Omogućavanje da MacBook Pro 2018 T2 radi sa ArchLinuxom (dualboot)

Bilo je dosta navijanja oko činjenice da će novi T2 čip onemogućiti instalaciju Linuxa na nove MacBookove iz 2018. sa touchbar-om. Vrijeme je prolazilo, a krajem 2019. programeri treće strane implementirali su brojne drajvere i zakrpe kernela za interakciju sa T2 čipom. Glavni drajver za MacBook modele 2018 i novije implementira VHCI rad (rad na dodir/tastaturu/itd.), kao i rad sa zvukom.

Projekat mbp2018-bridge-drv podijeljen u 3 glavne komponente:

  • BCE (Buffer Copy Engine) - uspostavlja glavni komunikacijski kanal sa T2. VHCI i Audio zahtijevaju ovu komponentu.
  • VHCI je USB Virtual Host Controller; tastatura, miš i druge sistemske komponente su obezbeđene ovom komponentom (drugi drajveri koriste ovaj host kontroler da obezbede više funkcionalnosti.
  • Audio - drajver za T2 audio interfejs, trenutno podržava samo audio izlaz preko ugrađenih zvučnika MacBook-a


Drugi projekat se zove macbook12-spi-driver, i implementira mogućnost upravljanja ulaznim drajverom za tastaturu, SPI trackpad i touchbar za MacBook Pro krajem 2016. i novije verzije. Neki drajveri za tastaturu/trackpad su sada uključeni u kernel, počevši od verzije 5.3.

Podrška za uređaje kao što su wi-fi, touchpad itd. je također implementirana pomoću kernel zakrpa. Trenutna verzija kernela 5.3.5-1

Šta radi u ovom trenutku

  1. NVMe
  2. Tastatura
  3. USB-C (Thunderbolt nije testiran; kada se modul automatski učita, zamrzava sistem)
  4. Touchbar (sa mogućnošću uključivanja Fn tipki, pozadinskog osvjetljenja, ESC-a, 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. Obustavi/nastavi (djelimično)
  10. itd.

Ovaj vodič je primjenjiv za macbookpro15,1 i macbookpro15,2. Članak je uzet kao osnova sa Githuba na engleskom. odavde. Nije sve u ovom članku funkcioniralo, pa sam morao sam pronaći rješenje.

Šta trebate instalirati

  • USB-C adapter za priključivanje na USB (najmanje tri USB ulaza za povezivanje miša, tastature, USB modema ili telefona u modu povezivanja). Ovo je potrebno samo u prvim fazama instalacije
  • USB tastatura
  • USB/USB-C fleš disk minimalno 4GB

1. Onemogućite zabranu pokretanja sa eksternog medija

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

2. Dodijelite slobodan prostor koristeći Disk Utility

Radi praktičnosti, odmah sam dodijelio 30 GB disku, formatirajući ga u exfat u samom Disk Utility-u. Particioniranje uslužnog programa za fizički disk.

3. Kreirajte ISO sliku

Opcije:

  1. Možete ići jednostavnim putem i preuzeti gotovu sliku sa kernelom 5.3.5-1 i zakrpama sa aunali1 link do gotove slike
  2. Napravite sliku sami putem arhive (potreban je sistem sa Archa distribucijom)

    Instalirajte archiso

    pacman -S archiso

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

    Dodajte spremište u pacman.conf:

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

    Zanemarujemo originalno jezgro u pacman.conf:

    IgnorePkg   = linux linux-headers
    

    Dodajte potrebne pakete, na kraju dodajte linux-mbp kernel i linux-mbp-headers

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

    Mijenjamo skriptu da radi u interaktivnom načinu (zamijenite pacstrap -C sa 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!"
    }

    Formiranje slike:

    sudo ./build.sh -v

    Pritisnite Y da preskočite zanemarene pakete, a zatim zapišite iso sliku na USB fleš disk:

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

4. Prvo pokretanje

Ponovo pokrenite sa umetnutim fleš diskom i tastaturom. Pritisnite opcije kada se pojavi jabuka, odaberite EFI BOOT.

Zatim morate pritisnuti tipku “e” i unijeti na kraju komandne linije module_blacklist=thunderbolt. Ako se to ne uradi, sistem se možda neće pokrenuti i pojaviće se Thunderbolt ICM greška.

Koristeći fdisk/cfdisk nalazimo našu particiju (kod mene je to nvme0n1p4), formatiramo je i instaliramo arhivu. Možeš koristiti službena uputstva ili bočno.

Ne kreiramo boot particiju; upisaćemo bootloader /dev/nvme0n1p1
Nakon što je okruženje u /mnt potpuno formirano i prije prelaska na arch-chroot, napišite:

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

Dodajte u /etc/pacman.conf:


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

Instalirajte kernel:


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

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

blacklist thunderbolt
blacklist applesmc

Tastatura, touchbar itd

Instaliraj yay:


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

Instaliranje modula za rad touchbara:


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

Dodajte module za pokretanje: /etc/modules-load.d/apple.conf

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

Instaliranje kernel modula za tastaturu. U spremištu anuali1 postoji gotov paket, zove se apple-bce-dkms-git. Da biste ga instalirali, napišite u konzoli:

pacman -S apple-bce-dkms-git

U ovom slučaju će biti pozvan modul kernela apple-bce. U slučaju samomontaže, to se zove p.n.e. Shodno tome, ako želite da registrujete modul u sekciji MODULES datoteke mkinicpio.conf, ne zaboravite koji ste modul instalirali.

Ruč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 bce ili apple-bce modul za pokretanje: /etc/modules-load.d/bce.conf

bce

Ako želite da koristite Fn dugmad prema zadanim postavkama, onda napišite u /etc/modprobe.d/apple-tb.conf datoteku:

options apple-ib-tb fnmode=2

Ažuriranje kernela i initramfs-a.


mkinitcpio -p linux-mbp

Instaliraj iwd:

sudo pacman -S networkmanager iwd

5. Utovarivač

Nakon što su svi glavni paketi instalirani unutar chroot-a, možete započeti instalaciju pokretačkog programa.

Nisam mogao natjerati grub na posao. Grub se pokreće sa eksternog USB drajva, ali kada pokušate da ga registrujete u nvme preko

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

sistem je upao u paniku kernela i nakon ponovnog pokretanja nove stavke kroz opcije se nisu pojavile. Nisam našao nikakvo jasno rješenje za ovaj problem i stoga sam odlučio da pokušam implementirati dizanje koristeći systemd-boot.

  1. Pokreni
    bootctl --path=/boot install

    i ulazimo u kernel paniku. Isključite MacBook, uključite ga ponovo, kliknite na opcije (ne isključujte USB-C čvorište s tastaturom)

  2. Provjeravamo da li se pojavio novi unos EFI BOOT pored vanjskog uređaja
  3. Odabiremo pokretanje sa eksternog USB diska, kao i prilikom prve instalacije (ne zaboravite navesti module_blacklist=thunderbolt)
  4. Montiramo naš disk i ulazimo u okruženje preko arch-chroot-a


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

Ako je potrebno da tastatura radi dok se sistem potpuno ne učita (ovo je neophodno kada koristite luks/dm-crypt enkripciju), onda to upišite u /etc/mkinicpio.conf fajl u odjeljku MODULI:

MODULES=(ext4 applespi intel_lpss_pci spi_pxa2xx_platform bce)

Ažuriranje kernela i initramfs-a.


mkinicpio -p linux-mbp

Postavljanje systemd-boot-a

Uređujemo /boot/loader/loader.conf fajl, brišemo sve unutra i dodajemo sledeće:

default arch
timeout 5
editor 1

Idite u /boot/loader/entries folder, kreirajte datoteku arch.conf i napišite:

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

Ako ste koristili luks i lvm, onda

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

Ponovo pokrenite MacOS.

6. Wi-Fi podešavanje

Kako se na kraju ispostavilo, MacOS pohranjuje fajlove firmvera za wi-fi adapter u folder /usr/share/firmware/wifi , i možete ih uzeti odatle u obliku mrljica i ubaciti ih u modul jezgre brcmfmac. Da biste saznali koje datoteke vaš adapter koristi, otvorite terminal u MacOS-u i napišite:

ioreg -l | grep C-4364

Dobijamo dugu listu. Potrebni su nam samo fajlovi iz sekcije 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. Kopirajte ih iz fascikle /usr/share/firmware/wifi na fleš disk i preimenujte ih na sledeći 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>

U ovom slučaju, posljednja tekstualna datoteka sadrži nazive modela; ako vaš model nije macbookpro15,2, onda morate preimenovati ovu datoteku u skladu s vašim MacBook modelom.

Ponovo pokrenite u Arch.

Kopirajte datoteke sa fleš diska u fasciklu /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/

Provjera funkcionalnosti modula:


rmmod brcmfmac
modprobe brcmfmac

Osiguravamo da se mrežni interfejs pojavljuje preko ifconfig/ip.
Podešavanje wifi preko iwctl

Pažnja. Preko netctl, nmcli, itd. Interfejs ne radi, samo preko iwd.

Prisiljavamo NetworkManager da koristi iwd. Da biste to učinili, kreirajte datoteku /etc/NetworkManager/NetworkManager.conf i napišite:

[device]
wifi.backend=iwd

Pokrenite uslugu NetworkManager


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

7. Zvuk

Da bi zvuk radio potrebno je da instalirate pulseaudio:


sudo pacman -S pulseaudio

Preuzmite tri fajla:

Pomerimo 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. Obustavi/nastavi

Trenutno 16.10.2019 morate odabrati zvuk ili obustaviti/nastaviti. Čekamo da autor bce modula završi funkcionalnost.

Da biste napravili modul sa podrškom za obustavljeno/nastavljanje, morate 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 gotovi apple-bce modul iz anuali1 spremišta, onda ga prvo morate ukloniti i tek onda sastaviti i instalirati bce modul sa podrškom za suspend mod.

Takođe, potrebno je da dodate applesmc modul na crnu listu (ako to ranije niste uradili) i proverite da li je u /boot/loader/entries/arch.conf u redu opcija na kraju parametar dodat pcie_ports=compat.

Trenutno se drajver touchbara ruši kada uđe u režim suspendovanja, a drajver thunderbolt ponekad zamrzne sistem na više od 30 sekundi, a na nekoliko minuta kada se nastavi. Ovo se može popraviti automatskim istovarom problematičnih modula.

Kreirajte skriptu /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

Učinite ga izvršnim:

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

To je sve za sada. Rezultat je potpuno izvodljiv sistem, sa izuzetkom nekih nijansi sa obustavom/nastavkom. Tokom nekoliko dana neprekidnog rada nisu uočeni padovi ili panika kernela. Nadam se da će ga u bliskoj budućnosti autor bce modula završiti, a mi ćemo dobiti punu podršku za suspend/resume i zvuk.

izvor: www.habr.com

Dodajte komentar