Delovanje MacBook Pro 2018 T2 z ArchLinux (dvojni zagon)

Bilo je kar nekaj hrupa o dejstvu, da bo novi čip T2 onemogočil namestitev Linuxa na nove MacBooke 2018 z vrstico na dotik. Čas je minil in konec leta 2019 so razvijalci tretjih oseb implementirali številne gonilnike in popravke jedra za interakcijo s čipom T2. Glavni gonilnik za modele MacBook 2018 in novejše izvaja delovanje VHCI (delovanje na dotik/tipkovnico/itd.) ter zvočno delovanje.

Projekt mbp2018-most-drv razdeljen na 3 glavne komponente:

  • BCE (Buffer Copy Engine) - vzpostavi glavni komunikacijski kanal s T2. VHCI in Audio zahtevata to komponento.
  • VHCI je USB Virtual Host Controller; tipkovnico, miško in druge sistemske komponente zagotavlja ta komponenta (drugi gonilniki uporabljajo ta gostiteljski krmilnik za zagotavljanje več funkcionalnosti.
  • Zvok - gonilnik za zvočni vmesnik T2, trenutno podpira samo zvočni izhod prek vgrajenih zvočnikov MacBooka


Drugi projekt se imenuje gonilnik za macbook12-spi, in izvaja zmožnost upravljanja vnosnega gonilnika za tipkovnico, sledilno ploščico SPI in vrstico na dotik za MacBook Pro konec leta 2016 in novejše. Nekateri gonilniki za tipkovnico/sledilno ploščico so zdaj vključeni v jedro, začenši z različico 5.3.

Podpora za naprave, kot so wi-fi, sledilna ploščica itd., je bila izvedena tudi s popravki jedra. Trenutna različica jedra 5.3.5-1

Kaj trenutno deluje

  1. NVMe
  2. tipkovnica
  3. USB-C (Thunderbolt ni bil testiran; ko se modul samodejno naloži, zamrzne sistem)
  4. Touchbar (z možnostjo vklopa tipk Fn, osvetlitve ozadja, ESC itd.)
  5. Zvok (samo vgrajeni zvočniki)
  6. Wi-Fi modul (prek brcmfmac in samo prek iw)
  7. DisplayPort preko USB-C
  8. Senzorji
  9. Prekini/nadaljuj (delno)
  10. itd ..

Ta vadnica je uporabna za macbookpro15,1 in macbookpro15,2. Članek je bil vzet iz Githuba v angleščini. zato. Vse v tem članku ni delovalo, zato sem moral sam najti rešitev.

Kaj potrebujete za namestitev

  • Priključni adapter USB-C na USB (vsaj trije vhodi USB za povezavo miške, tipkovnice, modema USB ali telefona v načinu privezovanja). To je potrebno le v prvih fazah namestitve
  • USB tipkovnica
  • USB/USB-C ključek najmanj 4 GB

1. Onemogočite prepoved zagona z zunanjega medija

https://support.apple.com/en-us/HT208330
https://www.ninjastik.com/support/2018-macbook-pro-boot-from-usb/

2. S programom Disk Utility dodelite prosti prostor

Zaradi udobja sem disku takoj dodelil 30 GB in ga formatiral v exfat v samem Disk Utility. Pripomoček za particioniranje fizičnega diska.

3. Ustvarite sliko ISO

Možnosti:

  1. Lahko greste po preprosti poti in prenesete že pripravljeno sliko z jedrom 5.3.5-1 in popravki iz aunali1 povezava do končne slike
  2. Ustvarite sliko sami prek archlive (potreben je sistem z distribucijo Archa)

    Set archiso

    pacman -S archiso

    
    cp -r /usr/share/archiso/configs/releng/ archlive
    cd archlive
    

    Dodajte repozitorij v pacman.conf:

    
    [mbp]
    Server = https://packages.aunali1.com/archlinux/$repo/$arch
    

    Zanemarjamo izvirno jedro v pacman.conf:

    IgnorePkg   = linux linux-headers
    

    Dodajte potrebne pakete, na koncu dodajte jedro linux-mbp in glave linux-mbp

    ...
    wvdial
    xl2tpd
    linux-mbp
    linux-mbp-headers
    

    Skript spremenimo tako, da deluje v interaktivnem načinu (zamenjajte pacstrap -C s pacstrap -i -C):

    sudo nano /usr/bin/mkarchiso

    # Install desired packages to airootfs
    _pacman ()
    {
        _msg_info "Installing packages to '${work_dir}/airootfs/'..."
    
        if [[ "${quiet}" = "y" ]]; then
            pacstrap -i -C "${pacman_conf}" -c -G -M "${work_dir}/airootfs" $* &> /dev/null
        else
            pacstrap -i -C "${pacman_conf}" -c -G -M "${work_dir}/airootfs" $*
        fi
    
        _msg_info "Packages installed successfully!"
    }

    Oblikovanje slike:

    sudo ./build.sh -v

    Pritisnite Y, da preskočite prezrte pakete, nato pa zapišite iso sliko na bliskovni pogon USB:

    sudo dd if=out/archlinux*.iso of=/dev/sdb bs=1M

4. Prvi zagon

Znova zaženite z vstavljenim bliskovnim pogonom in tipkovnico. Pritisnite možnosti, ko se prikaže jabolko, izberite EFI BOOT.

Nato morate pritisniti tipko "e" in vnesti na koncu ukazne vrstice module_blacklist=thunderbolt. Če tega ne storite, se sistem morda ne bo zagnal in pojavila se bo napaka Thunderbolt ICM.

S pomočjo fdisk/cfdisk poiščemo svojo particijo (pri meni je to nvme0n1p4), jo formatiramo in namestimo arhiv. Lahko uporabiš uradna navodila ali postrani.

Ne ustvarjamo zagonske particije; vanjo bomo zapisali zagonski nalagalnik /dev/nvme0n1p1
Ko je okolje v /mnt popolnoma oblikovano in preden se premaknete na arch-chroot, napišite:

mount /dev/nvme0n1p1 /mnt/boot
arch-chroot /mnt /bin/bash

Dodaj v /etc/pacman.conf:


[mbp]
Server = https://packages.aunali1.com/archlinux/$repo/$arch

Namestite jedro:


sudo pacman -S linux-mbp linux-mbp-headers
sudo mkinitcpio -p linux-mbp

Thunderbolt in applesmc registriramo v /etc/modprobe.d/blacklist.conf

blacklist thunderbolt
blacklist applesmc

Tipkovnica, vrstica na dotik itd

Namesti yay:


sudo pacman -S git gcc make fakeroot binutils
git clone https://aur.archlinux.org/yay.git
cd yay
makepkg -si

Namestitev modulov za delovanje vrstice na dotik:


git clone --branch mbp15 https://github.com/roadrunner2/macbook12-spi-driver.git
cd macbook12-spi-driver
make install

Dodajte module v zagon: /etc/modules-load.d/apple.conf

industrialio_triggered_buffer
apple-ibridge
apple-ib-tb
apple-ib-als

Namestitev modulov jedra za tipkovnico. V skladišču letno1 obstaja že pripravljen paket, se imenuje apple-bce-dkms-git. Če ga želite namestiti, v konzolo vpišite:

pacman -S apple-bce-dkms-git

V tem primeru bo poklican modul jedra jabolko-bce. V primeru samomontaže se imenuje pr. V skladu s tem, če želite registrirati modul v razdelku MODULES datoteke mkinicpio.conf, ne pozabite, kateri modul ste namestili.

Ročna montaža:


git clone https://github.com/MCMrARM/mbp2018-bridge-drv.git
cd mbp2018-bridge-drv
make
cp bce.ko /usr/lib/modules/extramodules-mbp/bce.ko

Dodajte modul bce ali apple-bce v zagon: /etc/modules-load.d/bce.conf

bce

Če želite privzeto uporabljati gumbe Fn, vpišite v datoteko /etc/modprobe.d/apple-tb.conf:

options apple-ib-tb fnmode=2

Posodabljanje jedra in initramfs.


mkinitcpio -p linux-mbp

Namesti iwd:

sudo pacman -S networkmanager iwd

5. Nakladalnik

Ko so vsi glavni paketi nameščeni v chroot, lahko začnete nameščati zagonski nalagalnik.

Gruba nisem mogel pripraviti do dela. Grub se zažene z zunanjega pogona USB, ko pa ga poskušate registrirati v nvme prek

grub-install --target=x86_64-efi --efi-directory=/boot --bootloader-id=grub

sistem je zašel v paniko jedra in po ponovnem zagonu se nov element prek možnosti ni pojavil. Nisem našel nobene jasne rešitve za to težavo, zato sem se odločil poskusiti implementirati zagon z uporabo systemd-boot.

  1. Kosilo
    bootctl --path=/boot install

    in gremo v paniko jedra. Izklopite MacBook, ga znova vklopite, kliknite možnosti (ne izklopite zvezdišča USB-C s tipkovnico)

  2. Preverimo, ali se je poleg zunanje naprave pojavil nov vnos EFI BOOT
  3. Izberemo zagon z zunanjega pogona USB, kot pri prvi namestitvi (ne pozabite podati module_blacklist=thunderbolt)
  4. Namestimo svoj disk in gremo v okolje preko arch-chroot


mount /dev/nvme0n1p4 /mnt
mount /dev/nvme0n1p1 /mnt/boot
arch-chroot /mnt

Če je potrebno, da tipkovnica deluje, dokler ni sistem popolnoma naložen (to je potrebno pri uporabi šifriranja luks/dm-crypt), potem to zapišite v datoteko /etc/mkinicpio.conf v razdelku MODULI:

MODULES=(ext4 applespi intel_lpss_pci spi_pxa2xx_platform bce)

Posodabljanje jedra in initramfs.


mkinicpio -p linux-mbp

Nastavitev systemd-boot

Uredimo datoteko /boot/loader/loader.conf, izbrišemo vse v njej in dodamo naslednje:

default arch
timeout 5
editor 1

Pojdite v mapo /boot/loader/entries, ustvarite datoteko arch.conf in napišite:

title arch
linux /vmlinuz-linux-mbp
initrd /initramfs-linux-mbp.img
options root=/dev/<b>nvme0n1p4</b> rw pcie_ports=compat

Če ste uporabili luks in lvm, potem

options cryptdevice=/dev/<b>nvme0n1p4</b>:luks root=/dev/mapper/vz0-root rw pcie_ports=compat

Znova zaženite MacOS.

6. Nastavitev Wi-Fi

Kot se je na koncu izkazalo, MacOS shrani datoteke vdelane programske opreme za wi-fi adapter v mapo /usr/share/firmware/wifi , od tam pa jih lahko vzamete v obliki blobov in podate v modul jedra brcmfmac. Če želite izvedeti, katere datoteke uporablja vaš adapter, odprite terminal v MacOS in napišite:

ioreg -l | grep C-4364

Dobimo dolg seznam. Potrebujemo samo datoteke iz razdelka Zahtevane datoteke:

"RequestedFiles" = ({"Firmware"="<b>C-4364__s-B2/maui.trx</b>","TxCap"="C-4364__s-B2/maui-X3.txcb","Regulatory"="C-4364__s-B2/<b>maui-X3.clmb</b>","NVRAM"="C-4364__s-B2/<b>P-maui-X3_M-HRPN_V-m__m-7.7.txt</b>"})

V vašem primeru se lahko imena datotek razlikujejo. Kopirajte jih iz mape /usr/share/firmware/wifi na bliskovni pogon in jih preimenujte na naslednji način:

    maui.trx -> brcmfmac4364-pcie.bin
    maui-X3.clmb -> brcmfmac4364-pcie.clm_blob
    P-maui-X3_M-HRPN_V-m__m-7.7.txt -> brcmfmac4364-pcie.Apple Inc.-<b>MacBookPro15,2.txt</b>

V tem primeru zadnja besedilna datoteka vsebuje imena modelov; če vaš model ni macbookpro15,2, morate to datoteko preimenovati v skladu z vašim modelom MacBook.

Znova zaženite Arch.

Kopirajte datoteke iz bliskovnega pogona v mapo /lib/firmware/brcm/


sudo cp brcmfmac4364-pcie.bin /lib/firmware/brcm/
sudo cp brcmfmac4364-pcie.clm_blob /lib/firmware/brcm/
sudo cp 'brcmfmac4364-pcie.Apple Inc.-<b>MacBookPro15,2.txt' /lib/firmware/brcm/

Preverjanje funkcionalnosti modula:


rmmod brcmfmac
modprobe brcmfmac

Poskrbimo, da se omrežni vmesnik pojavi prek ifconfig/ip.
Nastavitev wifi prek iwctl

Pozor. Preko netctl, nmcli itd. Vmesnik ne dela, samo preko iwd.

NetworkManagerju vsilimo uporabo iwd. Če želite to narediti, ustvarite datoteko /etc/NetworkManager/NetworkManager.conf in napišite:

[device]
wifi.backend=iwd

Zaženite storitev NetworkManager


sudo systemctl start NetworkManager.service
sudo systemctl enable NetworkManager.service

7. Zvok

Da bo zvok deloval, morate namestiti pulseaudio:


sudo pacman -S pulseaudio

Prenesite tri datoteke:

Premaknimo jih:

    /usr/share/alsa/cards/AppleT2.conf
    /usr/share/pulseaudio/alsa-mixer/profile-sets/apple-t2.conf
    /usr/lib/udev/rules.d/91-pulseaudio-custom.rules

8. Začasno prekini/nadaljuj

V tem trenutku 16.10.2019 morate izbrati bodisi zvok ali prekinitev/nadaljevanje. Čakamo, da avtor modula bce dokonča funkcionalnost.

Če želite zgraditi modul s podporo za ustavitev/nadaljevanje, morate narediti naslednje:


git clone https://github.com/MCMrARM/mbp2018-bridge-drv.git
cd mbp2018-bridge-drv
git checkout suspend
make
cp bce.ko /usr/lib/modules/extramodules-mbp/bce.ko
modprobe bce

Če ste namestili že pripravljen modul apple-bce iz repozitorija anuali1, ga morate najprej odstraniti in šele nato sestaviti in namestiti modul bce s podporo za način mirovanja.

Dodati morate tudi modul applesmc na črni seznam (če tega niste storili prej) in se prepričati, da je v /boot/loader/entries/arch.conf v vrstici možnosti na koncu dodan parameter pcie_ports=združljiv.

Trenutno se gonilnik vrstice na dotik zruši, ko vstopi v način mirovanja, gonilnik thunderbolt pa včasih zamrzne sistem za več kot 30 sekund in za nekaj minut, ko nadaljuje. To je mogoče popraviti s samodejnim odstranjevanjem problematičnih modulov.

Ustvarite skript /lib/systemd/system-sleep/rmmod.sh:

#!/bin/sh
if [ "" == "pre" ]; then
        rmmod thunderbolt
        rmmod apple_ib_tb
elif [ "" == "post" ]; then
        modprobe apple_ib_tb
        modprobe thunderbolt
fi

Naj bo izvršljivo:

sudo chmod +x /lib/systemd/system-sleep/rmmod.sh

To je vse za zdaj. Rezultat je popolnoma delujoč sistem, z izjemo nekaterih nians s suspend/resume. V nekaj dneh delovanja ni bilo opaziti nobenih zrušitev ali panike jedra. Upam, da ga bo avtor modula bce v bližnji prihodnosti dokončal in bomo dobili popolno podporo za suspend/resume in sound.

Vir: www.habr.com

Dodaj komentar