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.
It projekt ferdield yn 3 haadkomponinten:
- 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 , 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 ferzje
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. . 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
2. Tawize frije romte mei help fan Skiif Utility
Foar it gemak haw ik fuortendaliks 30GB oan 'e skiif tawiisd, it opmaak yn exfat yn Disk Utility sels. .
3. Meitsje in ISO-ôfbylding
Opsjes:
- Jo kinne de ienfâldige rûte gean en in klearmakke ôfbylding downloade mei kernel 5.3.5-1 en patches fan
- Meitsje sels in ôfbylding fia archlive (in systeem mei in Archa-distribúsje is fereaske)
Ynstallearje
pacman -S archisocp -r /usr/share/archiso/configs/releng/ archlive cd archliveFoegje it repository ta oan pacman.conf:
[mbp] Server = https://packages.aunali1.com/archlinux/$repo/$archWy negearje de orizjinele kernel yn pacman.conf:
IgnorePkg = linux linux-headersFoegje de nedige pakketten ta, foegje oan 'e ein de linux-mbp-kernel en linux-mbp-headers ta
... wvdial xl2tpd linux-mbp linux-mbp-headersWy 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 -vDruk 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 of .
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 de kernel:
sudo pacman -S linux-mbp linux-mbp-headers
sudo mkinitcpio -p linux-mbp
Wy registrearje thunderbolt en applesmc yn /etc/modprobe.d/blacklist.conf
blacklist thunderbolt
blacklist applesmc
Toetseboerd, touchbar, ensfh
Ynstallearje jo:
sudo pacman -S git gcc make fakeroot binutils
git clone https://aur.archlinux.org/yay.git
cd yay
makepkg -si
Ynstallaasje fan modules foar de touchbar om te wurkjen:
git clone --branch mbp15 https://github.com/roadrunner2/macbook12-spi-driver.git
cd macbook12-spi-driver
make install
Foegje modules ta oan it opstarten: /etc/modules-load.d/apple.conf
industrialio_triggered_buffer
apple-ibridge
apple-ib-tb
apple-ib-als
Ynstallearje kernel modules foar it toetseboerd. Yn de repository der is in klear pakket, hjit it apple-bce-dkms-git. Om it te ynstallearjen, skriuw yn 'e konsole:
pacman -S apple-bce-dkms-gitYn 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
bceAs 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=2It bywurkjen fan de kernel en initramfs.
mkinitcpio -p linux-mbp
Ynstallearje iwd:
sudo pacman -S networkmanager iwd5. 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
grub-ynstallearje --target=x86_64-efi --efi-directory=/boot --bootloader-id=grub
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 installen 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:
MODULES=(ext4 applespi intel_lpss_pci spi_pxa2xx_platform bce)
It bywurkjen fan de kernel en initramfs.
mkinicpio -p linux-mbp
Systemd-boot ynstelle
Wy bewurkje it /boot/loader/loader.conf-bestân, wiskje alles binnen, en foegje de folgjende ta:
default arch
timeout 5
editor 1
Gean nei de map /boot/loader/entries, meitsje it arch.conf-bestân en skriuw:
title arch
linux /vmlinuz-linux-mbp
initrd /initramfs-linux-mbp.img
options root=/dev/<b>nvme0n1p4</b> rw pcie_ports=compat
As jo luks en lvm brûkten, dan
options cryptdevice=/dev/<b>nvme0n1p4</b>:luks root=/dev/mapper/vz0-root rw pcie_ports=compat
Reboot yn MacOS.
6. Wi-Fi opset
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-4364Wy krije in lange list. Wy hawwe allinich bestannen nedich fan 'e seksje Requested Files:
"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>"})
Yn jo gefal kinne de triemnammen ferskille. Kopiearje se fan 'e map /usr/share/firmware/wifi nei it flash drive en omneame se as folget:
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>
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/
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/
Kontrolearje de funksjonaliteit fan 'e module:
rmmod brcmfmac
modprobe brcmfmac
Wy soargje derfoar dat de netwurkynterface ferskynt fia ifconfig/ip.
Wifi ynstelle fia
Oandacht. Fia netctl, nmcli, ensfh. De ynterface wurket net, allinich fia iwd.
Wy twinge NetworkManager om iwd te brûken. Om dit te dwaan, meitsje de triem /etc/NetworkManager/NetworkManager.conf en skriuw:
[device]
wifi.backend=iwd
Start de NetworkManager-tsjinst
sudo systemctl start NetworkManager.service
sudo systemctl enable NetworkManager.service
7. Lûd
Om it lûd te wurkjen, moatte jo pulsaudio ynstallearje:
sudo pacman -S pulseaudio
Download trije bestannen:
Litte wy se ferpleatse:
/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 / Ferfetsje
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 [ "${1}" == "pre" ]; then
rmmod thunderbolt
rmmod apple_ib_tb
elif [ "${1}" == "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.
Boarne: www.habr.com
