Tjeranje MacBook Pro 2018 T2 na ArchLinux (dualboot)

Bilo je dosta buke oko toga da zbog novog T2 čipa nije moguće instalirati Linux na nove MacBook modele iz 2018. godine sa Touch Barom. Kako je vreme prolazilo, do kraja 2019. godine su od strane nezavisnih developera objavljeni niz vozača i zakrpa za kernel koje omogućavaju interakciju sa T2 čipom. Glavni drajver za MacBook modele 2018. i novije implementira rad VHCI (rad Touch Bar-a/klavijature itd.), kao i funkcionisanje zvuka.

Projekt mbp2018-bridge-drv podeljen na 3 osnovna komponenta:

  • BCE (Buffer Copy Engine) — uspostavlja glavnu komunikaciju sa T2. VHCI i Audio zahtevaju ovu komponentu.
  • VHCI — to je virtuelni USB host kontroler; tastatura, miš i druge komponente sistema pružaju se ovom komponentom (ostali vozači koriste ovaj host kontroler za obezbeđivanje veće funkcionalnosti).
  • Audio — drajver za audio interfejs T2, trenutno podržava samo izlaz zvuka kroz ugrađene zvučnike MacBook-a.


Drugi projekat se zove macbook12-spi-driver, i implementira mogućnost rada drajvera za unos za tastaturu, trackpad SPI, Touch Bar za MacBook Pro krajem 2016. godine i novije verzije. Deo drajvera za tastaturu/trackpad sada je uključen u kernel, počevši od verzije 5.3.

Takođe je implementirana podrška za uređaje kao što su wi-fi, trackpad itd., putem zakrpa za kernel. U ovom trenutku, verzija kernela 5.3.5-1

Šta trenutno radi

  1. NVMe
  2. Tipkovnica
  3. USB-C (Thunderbolt nije testiran, automatsko učitavanje modula zamrzava sistem)
  4. Touch Bar (s mogućnošću uključivanja Fn tastera, pozadinsko osvetljenje, ESC itd.)
  5. Zvuk (samo ugrađeni zvučnici)
  6. Wi-Fi modul (preko brcmfmac i samo preko iw)
  7. DisplayPort preko USB-C
  8. Senzori
  9. Suspend/Resume (delimično)
  10. itd..

Ovaj tutorijal se primenjuje za macbookpro15,1 i macbookpro15,2. Kao osnovica je korišćen članak sa GitHuba na engleskom odavde. Nije sve u ovom članku radilo, pa je bilo potrebno tražiti rešenje samostalno.

Šta će biti potrebno za instalaciju

  • USB-C dok adapter na USB (barem tri USB ulaza za povezivanje miša, tastature, USB modema ili telefona u režimu tethering-a). Ovo je neophodno samo u prvim fazama instalacije.
  • USB tastatura
  • USB/USB-C fleš disk minimum 4GB

1. Onemogućite zabranu pokretanja sa eksternih uređaja

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

2. Podelite slobodan prostor pomoću Disk Utility

Radi lakšeg snalaženja, odmah sam odvojio 30GB na disku, formatirajući ga u exfat unutar Disk Utility. Deljenje fizičkog diska na particije Disk Utility.

3. Izrađujemo ISO sliku

Opcije:

  1. Možete ići jednostavnim putem i preuzeti gotovu sliku s kernelom 5.3.5-1 i patchovima od aunali1 link na gotovu sliku
  2. Izradite sliku sami putem archlive (potreban je sustav s Arch Linux distribucijom)

    Instaliramo archiso

    pacman -S archiso

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

    Dodajemo repozitorij u pacman.conf:

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

    Ignoriramo originalni kernel u pacman.conf:

    IgnorePkg   = linux linux-headers
    

    Dodajemo potrebne pakete, na kraju dodajemo kernel linux-mbp i linux-mbp-headers

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

    Mijenjamo skriptu za rad u interaktivnom režimu (zamjenjujemo 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!"
    }

    Formiramo sliku:

    sudo ./build.sh -v

    Pritisnite Y kako biste preskočili ignorerane pakete, a zatim upišite ISO sliku na USB flash disk:

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

4. Prvo pokretanje

Ponovo pokrećemo s umetnutim flash diskom i tipkovnicom. Pritisnite options kada se pojavi jabuka, odaberite EFI BOOT.

Nakon toga potrebno je pritisnuti tipku "e" i unijeti na kraj naredbenog retka module_blacklist=thunderbolt. Ako to ne učinite, sustav se možda neće pokrenuti i dobit ćete grešku Thunderbolt ICM Error.

Pomoću fdisk/cfdisk pronalazimo naš particiju (kod mene je to nvme0n1p4), formatiramo i instaliramo Arch. Možete se poslužiti službenim uputama ili vanjskom.

Ne kreiramo boot particiju, boot loader ćemo instalirati u /dev/nvme0n1p1
Nakon što je potpuno formirano okruženje u /mnt i prije nego što pređemo u arch-chroot, pišemo:

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

Dodajemo u /etc/pacman.conf:


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

Instaliramo kernel:


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

Unosimo thunderbolt i applesmc u /etc/modprobe.d/blacklist.conf

blacklist thunderbolt
blacklist applesmc

Tipkovnica, touch bar itd.

Instaliramo yay:


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

Instaliramo module za rad touch bara:


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

Dodajemo module u automatsko učitavanje: /etc/modules-load.d/apple.conf

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

Instaliramo module kernela za rad tipkovnice. U repozitoriju anuali1 ima gotov paket, zove se apple-bce-dkms-git. Da bismo ga instalirali, upišite u konzolu:

pacman -S apple-bce-dkms-git

U tom slučaju, modul kernela zvat će se apple-bce. U slučaju samostalne izrade, zvat će se bce. Tako da, ako želite unijeti modul u odjeljak MODULES u datoteku mkinicpio.conf, ne zaboravite koji modul ste instalirali.

Ručno sklapanje:


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

Dodajemo modul bce ili apple-bce u automatsko učitavanje: /etc/modules-load.d/bce.conf

bce

Ako želite koristiti tipke Fn po defaultu, upisujemo u datoteku /etc/modprobe.d/apple-tb.conf:

options apple-ib-tb fnmode=2

Ažuriramo kernel i initramfs.


mkinitcpio -p linux-mbp

Instaliramo iwd:

sudo pacman -S networkmanager iwd

5. Učitavač

Nakon što su svi glavni paketi unutar chroot instalirani, možete započeti s instalacijom učitavača.

Nisam uspio natjerati grub da radi. Grub se učitava s vanjskog usb diska, ali prilikom pokušaja njegova upisa u nvme putem

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

sustav je upao u kernel panic, i nakon ponovnog pokretanja nova stavka kroz options se nije pojavljivala. Nisam pronašao jasno rješenje ovog problema i stoga sam odlučio probati realizirati učitavanje putem systemd-boot.

  1. Pokrenite
    bootctl --path=/boot install

    i ponovo upadamo u kernel panic. Isključujemo MacBook, uključujemo ga ponovo, pritisnemo options (usb-c hub s tipkovnicom ne isključujemo)

  2. Provjeravamo da li se pojavila nova stavka EFI BOOT pored vanjske jedinice
  3. Biramo učitavanje s vanjskog usb diska, kao pri prvoj instalaciji (ne zaboravite upisati module_blacklist=thunderbolt)
  4. Montiramo naš disk i prelazimo u okruženje putem arch-chroot


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

Ako je potrebno da tipkovnica radi do potpunog učitavanja sustava (to je potrebno u slučaju korištenja enkripcije luks/dm-crypt), onda upisujemo u datoteku /etc/mkinicpio.conf u odjeljku MODULES:

MODULES=(ext4 applespi intel_lpss_pci spi_pxa2xx_platform bce)

Ažuriramo kernel i initramfs.


mkinicpio -p linux-mbp

Konfiguriramo systemd-boot

Uređujemo datoteku /boot/loader/loader.conf, brišemo sve što se unutra nalazilo i dodajemo sljedeće:

default arch
timeout 5
editor 1

Prelazimo u mapu /boot/loader/entries, kreiramo datoteku arch.conf i pišemo:

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

U slučaju da ste koristili luks i lvm, tada

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

Ponovo pokrećemo u MacOS.

6. Konfiguracija Wi-Fi

Kako se ispostavilo, datoteke firmwara za wi-fi adapter MacOS pohranjuje u mapu /usr/share/firmware/wifi , i možete ih odatle uzeti u obliku blobova i dostaviti modulu kernela brcmfmac. Da biste saznali koje točno datoteke koristi vaš adapter, otvorite terminal u MacOS i upišite:

ioreg -l | grep C-4364

Dobivamo dugačak popis. Potrebne su nam datoteke samo iz odjeljka RequestedFiles:

"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>"})

U vašem slučaju nazivi datoteka mogu se razlikovati. Kopiramo ih iz mape /usr/share/firmware/wifi na flešku i preimenujemo u sljedeći oblik:

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

U ovom slučaju, posljednja tekstualna datoteka sadrži nazive modela; ako vaš model nije macbookpro15,2, potrebno je preimenovati ovu datoteku prema vašem MacBook modelu.

Ponovo se pokrećemo u Archu.

Kopiramo datoteke s USB-a u folder /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/

Provjeravamo funkcionalnost modula:


rmmod brcmfmac
modprobe brcmfmac

Uvjeravamo se da se mrežni sučelje pojavilo putem ifconfig/ip.
Postavljamo wifi preko iwctl

Pažnja. Kroz netctl, nmcli, itd. sučelje ne radi, samo kroz iwd.

Naterujemo NetworkManager da koristi iwd. Za to kreiramo datoteku /etc/NetworkManager/NetworkManager.conf i pišemo:

[device]
wifi.backend=iwd

Pokrećemo uslugu NetworkManager


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

7. Zvuk

Da bi zvuk radio, potrebno je instalirati pulseaudio:


sudo pacman -S pulseaudio

Preuzimamo tri datoteke:

Premještamo ih:

    /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. Suspend/Resume

Trenutno 16.10.2019 moramo birati ili zvuk, ili suspend/resume. Čekamo da autor bce modula doda funkcionalnost.

Da bismo izgradili modul s podrškom za suspend/resume, potrebno je učiniti sljedeće:


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

Ako ste instalirali gotov modul apple-bce iz repozitorija anuali1, prvo ga morate ukloniti, a zatim izgraditi i instalirati bce modul s podrškom za suspend.

Također, potrebno je dodati u blacklist modul applesmc (ako to niste već učinili) i osigurati da je u /boot/loader/entries/arch.conf u liniji options na kraju dodat parametar pcie_ports=compat.

Trenutno, drajver za Touch Bar se ruši prilikom ulaska u suspend režim, a drajver za thunderbolt ponekad usporava sistem više od 30 sekundi, a prilikom ponovnog aktiviranja — nekoliko minuta. To se može ispraviti automatskim uklanjanjem problematičnih modula.

Kreirajte skriptu /lib/systemd/system-sleep/rmmod.sh:

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

Učinite je izvršnom:

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

Na tome za sada sve. Na kraju, dobijamo potpuno funkcionalan sistem, osim nekih problema sa suspend/resume. Nema izbacivanja i kernel panic-a tokom nekoliko dana rada. Nadam se da će autor modula bce uskoro dodati podršku za suspend/resume i zvuk.

Izvor: habr.com

Kupite pouzdan hosting za web stranice s DDoS zaštitom, VPS VDS servere 🔥 Kupite pouzdan hosting za web stranice s DDoS zaštitom, VPS VDS servere | ProHoster