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 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 , 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
Šta trenutno radi
- NVMe
- Tipkovnica
- USB-C (Thunderbolt nije testiran, automatsko učitavanje modula zamrzava sistem)
- Touch Bar (s mogućnošću uključivanja Fn tastera, pozadinsko osvetljenje, ESC itd.)
- Zvuk (samo ugrađeni zvučnici)
- Wi-Fi modul (preko brcmfmac i samo preko iw)
- DisplayPort preko USB-C
- Senzori
- Suspend/Resume (delimično)
- itd..
Ovaj tutorijal se primenjuje za macbookpro15,1 i macbookpro15,2. Kao osnovica je korišćen članak sa GitHuba na engleskom . 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
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. .
3. Izrađujemo ISO sliku
Opcije:
- Možete ići jednostavnim putem i preuzeti gotovu sliku s kernelom 5.3.5-1 i patchovima od
- Izradite sliku sami putem archlive (potreban je sustav s Arch Linux distribucijom)
Instaliramo
pacman -S archisocp -r /usr/share/archiso/configs/releng/ archlive cd archliveDodajemo repozitorij u pacman.conf:
[mbp] Server = https://packages.aunali1.com/archlinux/$repo/$archIgnoriramo originalni kernel u pacman.conf:
IgnorePkg = linux linux-headersDodajemo potrebne pakete, na kraju dodajemo kernel linux-mbp i linux-mbp-headers
... wvdial xl2tpd linux-mbp linux-mbp-headersMijenjamo 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 -vPritisnite 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 ili .
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 ima gotov paket, zove se apple-bce-dkms-git. Da bismo ga instalirali, upišite u konzolu:
pacman -S apple-bce-dkms-gitU 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
bceAko želite koristiti tipke Fn po defaultu, upisujemo u datoteku /etc/modprobe.d/apple-tb.conf:
options apple-ib-tb fnmode=2Ažuriramo kernel i initramfs.
mkinitcpio -p linux-mbp
Instaliramo iwd:
sudo pacman -S networkmanager iwd5. 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.
- Pokrenite
bootctl --path=/boot installi ponovo upadamo u kernel panic. Isključujemo MacBook, uključujemo ga ponovo, pritisnemo options (usb-c hub s tipkovnicom ne isključujemo)
- Provjeravamo da li se pojavila nova stavka EFI BOOT pored vanjske jedinice
- Biramo učitavanje s vanjskog usb diska, kao pri prvoj instalaciji (ne zaboravite upisati module_blacklist=thunderbolt)
- 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-4364Dobivamo 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 -> 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, 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
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.rules8. 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
