ProHoster > Blog > Bestjoer > MacBook Pro 2018 T2 meitsje wurkje mei ArchLinux (dualboot)
MacBook Pro 2018 T2 meitsje wurkje mei ArchLinux (dualboot)
D'r is nochal wat hype west oer it feit dat de nije T2-chip it ûnmooglik makket om Linux te ynstallearjen op 'e nije 2018 MacBooks mei in touchbar. De tiid gie foarby, en oan 'e ein fan 2019 implementearren ûntwikkelders fan tredden in oantal bestjoerders en kernelpatches foar ynteraksje mei de T2-chip. De wichtichste stjoerprogramma foar MacBook modellen 2018 en nijer ymplemintearret VHCI operaasje (touch / toetseboerd / ensfh operaasje), likegoed as lûd operaasje.
BCE (Buffer Copy Engine) - stelt de wichtichste kommunikaasje kanaal mei T2. VHCI en Audio fereaskje dizze komponint.
VHCI is in USB Virtual Host Controller; it toetseboerd, de mûs en oare systeemkomponinten wurde levere troch dizze komponint (oare bestjoerders brûke dizze hostkontrôler om mear funksjonaliteit te leverjen.
Audio - stjoerprogramma foar de T2 audio-ynterface, stipet op it stuit allinich audioútfier fia de ynboude sprekkers fan 'e MacBook
It twadde projekt hjit macbook12-spi-bestjoerder, en it ymplementearret de mooglikheid om in ynfierbestjoerder te betsjinjen foar it toetseboerd, SPI-trackpad, en touchbar foar MacBook Pro Late 2016 en letter. Guon toetseboerd-/trackpad-bestjoerders binne no opnommen yn 'e kernel, begjinnend mei ferzje 5.3.
Stipe foar apparaten lykas wi-fi, touchpad, ensfh waard ek ymplementearre mei help fan kernel patches. Aktuele kernel ferzje5.3.5-1
Wat wurket op it stuit
NVMe
Keyboard
USB-C (Thunderbolt is net hifke; as de module automatysk wurdt laden, befriest it it systeem)
Touchbar (mei de mooglikheid om de Fn-toetsen, efterljochting, ESC, ensfh.)
Lûd (allinich ynboude sprekkers)
Wi-Fi-module (fia brcmfmac en allinich fia iw)
DisplayPort oer USB-C
Sensoren
Suspend/Resume (foar in part)
etc ..
Dizze tutorial is fan tapassing foar macbookpro15,1 en macbookpro15,2. It artikel waard nommen as basis fan Github yn it Ingelsk. fan hjir. Net alles yn dit artikel wurke, dus ik moast sels in oplossing fine.
Wat jo moatte ynstallearje
USB-C docking-adapter nei USB (op syn minst trije USB-yngongen foar it ferbinen fan in mûs, toetseboerd, USB-modem of tillefoan yn tethering-modus). Dit is allinich nedich yn 'e earste fazen fan ynstallaasje
USB toetseboerd
USB / USB-C flash drive minimum 4GB
1. Skeakelje it ferbod op booten fan eksterne media
cp -r /usr/share/archiso/configs/releng/ archlive
cd archlive
Foegje it repository ta oan pacman.conf:
[mbp]
Server = https://packages.aunali1.com/archlinux/$repo/$arch
Wy negearje de orizjinele kernel yn pacman.conf:
IgnorePkg = linux linux-headers
Foegje de nedige pakketten ta, foegje oan 'e ein de linux-mbp-kernel en linux-mbp-headers ta
...
wvdial
xl2tpd
linux-mbp
linux-mbp-headers
Wy feroarje it skript om te wurkjen yn ynteraktive modus (ferfange pacstrap -C mei 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!"
}
In ôfbylding foarmje:
sudo ./build.sh -v
Druk op Y om negearre pakketten oer te slaan, skriuw dan de iso-ôfbylding nei it usb-flash-drive:
sudo dd if=out/archlinux*.iso of=/dev/sdb bs=1M
4. Earste boot
Reboot mei de flash drive en toetseboerd ynfoege. Druk op opsjes as de appel ferskynt, selektearje EFI BOOT.
Folgjende moatte jo op de "e" kaai drukke en ynfiere oan 'e ein fan' e kommandorigel module_blacklist=thunderbolt. As dit net dien wurdt, kin it systeem net bootje en sil in Thunderbolt ICM-flater ferskine.
Mei fdisk/cfdisk fine wy ús partysje (foar my is it nvme0n1p4), formatearje it en ynstallearje it argyf. Jo kinne brûke offisjele ynstruksjes of sydlings.
Wy meitsje gjin bootpartysje oan; wy sille de bootloader yn skriuwe /dev/nvme0n1p1
Nei it miljeu yn / mnt is folslein foarme en foardat jo nei arch-chroot ferpleatse, skriuw:
mount /dev/nvme0n1p1 /mnt/boot
arch-chroot /mnt /bin/bash
Taheakje oan /etc/pacman.conf:
[mbp]
Server = https://packages.aunali1.com/archlinux/$repo/$arch
Ynstallearje kernel modules foar it toetseboerd. Yn de repository jierliks 1 der is in klear pakket, hjit it apple-bce-dkms-git. Om it te ynstallearjen, skriuw yn 'e konsole:
pacman -S apple-bce-dkms-git
Yn dit gefal sil de kernelmodule wurde neamd appel-bce. Yn it gefal fan sels-assemblage wurdt it neamd ecb. Dêrom, as jo in module registrearje wolle yn 'e MODULES-seksje fan' e mkinicpio.conf-bestân, ferjit dan net hokker module jo ynstalleare.
Hânlieding gearstalling:
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
Foegje de bce- of apple-bce-module ta oan it opstarten: /etc/modules-load.d/bce.conf
bce
As jo standert de Fn-knoppen brûke wolle, skriuw dan yn it /etc/modprobe.d/apple-tb.conf-bestân:
options apple-ib-tb fnmode=2
It bywurkjen fan de kernel en initramfs.
mkinitcpio -p linux-mbp
Ynstallearje iwd:
sudo pacman -S networkmanager iwd
5. Loader
Sadree't alle haadpakketten yn 'e chroot binne ynstalleare, kinne jo begjinne mei it ynstallearjen fan de bootloader.
Ik haw grub net oan it wurk krije kinnen. Grub boots fan in eksterne USB-stasjon, mar as jo besykje it te registrearjen yn nvme fia
it systeem gie yn kernel panyk, en nei it herstarten fan in nij item fia opsjes ferskynde net. Ik fûn gjin dúdlike oplossing foar dit probleem en besleat dêrom om te besykjen it opstarten út te fieren mei systemd-boot.
Launch
bootctl --path=/boot install
en wy geane yn kernel panyk. Skeakelje de MacBook út, skeakelje it opnij oan, klikje op opsjes (útsette de USB-C-hub mei toetseboerd net)
Wy kontrolearje dat in nije EFI BOOT-yngong is ferskynd neist it eksterne apparaat
Wy selektearje om te booten fan in ekstern USB-stasjon, lykas by de earste ynstallaasje (ferjit net module_blacklist=thunderbolt op te jaan)
Wy mount ús skiif en gean yn 'e omjouwing fia arch-chroot
mount /dev/nvme0n1p4 /mnt
mount /dev/nvme0n1p1 /mnt/boot
arch-chroot /mnt
As it nedich is foar it toetseboerd om te wurkjen oant it systeem folslein laden is (dit is nedich by it brûken fan luks/dm-crypt-kodearring), skriuw it dan yn it /etc/mkinicpio.conf-bestân yn 'e seksje MODULES:
As it úteinlik die bliken, bewarret MacOS de firmware-bestannen foar de wi-fi-adapter yn 'e map /usr/share/firmware/wifi , en do kinst nimme se út dêr yn 'e foarm fan blobs en feed se nei de brcmfmac kernel module. Om út te finen hokker bestannen jo adapter brûkt, iepenje in terminal yn MacOS en skriuw:
ioreg -l | grep C-4364
Wy krije in lange list. Wy hawwe allinich bestannen nedich fan 'e seksje Requested Files:
Yn dit gefal befettet it lêste tekstbestân de modelnammen; as jo model net macbookpro15,2 is, dan moatte jo dit bestân omneame yn oerienstimming mei jo MacBook-model.
Reboot yn Arch.
Kopiearje de bestannen fan it flash-drive nei de map /lib/firmware/brcm/
Op dit stuit 16.10.2019 jo moatte kieze foar lûd of suspend / ferfetsje. Wy wachtsje op de skriuwer fan 'e bce-module om de funksjonaliteit te foltôgjen.
Om in module te bouwen mei stipe / resume-stipe, moatte jo it folgjende dwaan:
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
As jo de klearmakke apple-bce-module ynstalleare fan 'e anuali1-repository, dan moatte jo it earst fuortsmite en pas dan de bce-module gearstalle en ynstallearje mei stipe foar suspendmodus.
Ek moatte jo de applesmc-module tafoegje oan 'e swarte list (as jo dit net earder dien hawwe) en soargje derfoar dat yn /boot/loader/entries/arch.conf yn 'e opsjesrigel oan 'e ein de parameter tafoege wurdt pcie_ports=kompat.
Op it stuit crasht de touchbar-bestjoerder by it ynfieren fan de suspendmodus, en de thunderbolt-bestjoerder befriest it systeem soms foar mear as 30 sekonden, en foar ferskate minuten by it hervatten. Dit kin wurde reparearre troch automatysk lossen problematyske modules.
Meitsje in 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
Meitsje it útfierber:
sudo chmod +x /lib/systemd/system-sleep/rmmod.sh
Dat is alles foar no. It resultaat is in folslein wurkber systeem, mei útsûndering fan guon nuânses mei suspend / resume. Gjin crashes of kernel panyk waarden waarnommen tidens ferskate dagen fan uptime. Ik hoopje dat yn 'e heine takomst de skriuwer fan' e bce-module it sil ôfmeitsje, en wy sille folsleine stipe krije foar suspend / resume en sound.