Det har varit mycket noise kring att det pÄ grund av den nya T2-chippet inte gÄr att installera linux pÄ de nya MacBook-modellerna frÄn 2018 med touchbar. Tiden gick, och i slutet av 2019 utvecklades ett antal drivrutiner och kÀrnpatchar av tredje part för att interagera med T2-chippet. Huvuddrivrutinen för MacBook-modeller 2018 och nyare implementerar VHCI (funktioner för touch/keyboard/osv.), samt ljudfunktionalitet.
Projektet delas in i tre grundlÀggande komponenter:
- BCE (Buffer Copy Engine) â etablerar den huvudsakliga kommunikationskanalen med T2. VHCI och Audio krĂ€ver denna komponent.
- VHCI â detta Ă€r en virtuell vĂ€rdcontroller för USB; tangentbord, mus och andra systemkomponenter tillhandahĂ„lls av denna komponent (andra drivrutiner anvĂ€nder denna vĂ€rdcontroller för att ge mer funktionalitet.
- Audio â drivrutinen för T2:s ljudgrĂ€nssnitt, för nĂ€rvarande stödjer endast ljudutgĂ„ng genom MacBooks inbyggda högtalare.
Det andra projektet kallas , och det möjliggör anvÀndningen av en inmatningsdrivrutin för tangentbord, pekplatta SPI, touchbar för MacBook Pro frÄn slutet av 2016 och senare versioner. Vissa drivrutiner för tangentbord/pekplatta ingÄr nu i kÀrnan frÄn och med version 5.3.
Det har ocksÄ implementerats stöd för enheter som wi-fi, pekplatta osv., med hjÀlp av kÀrnpatchar. För nÀrvarande Àr kÀrnversionen
Vad som fungerar för tillfÀllet
- NVMe
- Tangentbord
- USB-C (Thunderbolt har inte testats, laddning av modulen lÄser systemet helt)
- Touchbar (med möjlighet att aktivera Fn-tangenter, belysning, ESC osv.)
- Ljud (endast inbyggda högtalare)
- Wi-Fi-modul (via brcmfmac och endast genom iw)
- DisplayPort via USB-C
- Sensorer
- Suspendera/Äteruppta (delvis)
- osv..
Denna handledning Àr tillÀmplig för macbookpro15,1 och macbookpro15,2. Den tar utgÄngspunkt i en artikel frÄn GitHub pÄ engelska . Inte allt frÄn denna artikel fungerade, sÄ jag var tvungen att leta efter lösningar sjÀlv.
Vad som behövs för installation
- USB-C dongel till USB (minst tre USB-portar för anslutning av mus, tangentbord, usb-modem eller telefon i tethering-lÀge). Detta behövs endast under de första faserna av installationen
- USB-tangentbord
- USB/USB-C flash-enhet pÄ minst 4GB
1. Deaktivera förbudet mot att starta frÄn externa enheter
2. Allokera ledigt utrymme med Disk Utility
För enkelhetens skull allokerade jag direkt 30GB pÄ disken och formaterade den till exfat i Disk Utility. .
3. Skapa en ISO-avbild
Alternativ:
- Du kan ta den enkla vÀgen och ladda ner en fÀrdig avbild med kÀrna 5.3.5-1 och patchar frÄn
- Skapa en avbild sjÀlv via archlive (en dator med Arch-distro krÀvs)
Installera
pacman -S archisocp -r /usr/share/archiso/configs/releng/ archlive cd archliveLĂ€gg till repositoriet i pacman.conf:
[mbp] Server = https://packages.aunali1.com/archlinux/$repo/$archIgnorera den ursprungliga kÀrnan i pacman.conf:
IgnorePkg = linux linux-headersLÀgg till nödvÀndiga paket, och avsluta med kÀrnorna linux-mbp och linux-mbp-headers
... wvdial xl2tpd linux-mbp linux-mbp-headersĂndra skriptet för att arbeta i interaktivt lĂ€ge (ersĂ€tt pacstrap -C med 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!" }Skapa avbilden:
sudo ./build.sh -vTryck pÄ Y för att hoppa över ignorerade paket, och skriv sedan ISO-avbilden till USB-minnet:
sudo dd if=out/archlinux*.iso of=/dev/sdb bs=1M
4. Första uppstart
Starta om med USB-minnet och tangentbordet anslutet. Tryck pÄ options nÀr Àpplet visas och vÀlj EFI BOOT.
DÀrefter mÄste du trycka pÄ tangenten «e» och skriva in slutet av kommandoraden module_blacklist=thunderbolt. Om du inte gör detta kan systemet misslyckas med att starta och ge ett felmeddelande om Thunderbolt ICM Error.
AnvÀnd fdisk/cfdisk för att hitta vÄr partition (för mig Àr det nvme0n1p4), formatera och installera Arch. Du kan anvÀnda eller .
Skapa ingen startpartition, vi kommer att installera bootloadern i /dev/nvme0n1p1
Efter att miljön helt har skapats i /mnt och innan vi gÄr in i arch-chroot, skriver vi:
mount /dev/nvme0n1p1 /mnt/boot
arch-chroot /mnt /bin/bash
LĂ€gg till i /etc/pacman.conf:
[mbp]
Server = https://packages.aunali1.com/archlinux/$repo/$arch
Installera kÀrnan:
sudo pacman -S linux-mbp linux-mbp-headers
sudo mkinitcpio -p linux-mbp
Skriv in thunderbolt och applesmc i /etc/modprobe.d/blacklist.conf
blacklist thunderbolt
blacklist applesmc
Tangentbord, touchbar, etc.
Installera yay:
sudo pacman -S git gcc make fakeroot binutils
git clone https://aur.archlinux.org/yay.git
cd yay
makepkg -si
Installera moduler för att fÄ touchbaren att fungera:
git clone --branch mbp15 https://github.com/roadrunner2/macbook12-spi-driver.git
cd macbook12-spi-driver
make install
LĂ€gg till moduler i autostart: /etc/modules-load.d/apple.conf
industrialio_triggered_buffer
apple-ibridge
apple-ib-tb
apple-ib-als
Installera kÀrnmoduler för tangentbordsarbete. I repositoriet finns ett fÀrdigt paket, det heter apple-bce-dkms-git. För att installera det skriver vi i konsolen:
pacman -S apple-bce-dkms-gitI det hÀr fallet kommer kÀrnmodulen att heta apple-bce. Vid egen kompilering heter det bce. Om du vill lÀgga till modulen i avsnittet MODULES i filen mkinicpio.conf, glöm inte vilken modul du installerade.
Manuell installation:
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
LĂ€gg till modulen bce eller apple-bce i autoload: /etc/modules-load.d/bce.conf
bceOm du vill anvÀnda Fn-tangenterna som standard, skriv i filen /etc/modprobe.d/apple-tb.conf:
options apple-ib-tb fnmode=2Uppdatera kÀrnan och initramfs.
mkinitcpio -p linux-mbp
Installera iwd:
sudo pacman -S networkmanager iwd5. Bootloader
NÀr alla huvudpaket Àr installerade inuti chroot kan vi börja installera bootloadern.
Jag lyckades aldrig fÄ grub att fungera. Grub laddas frÄn en extern usb-enhet, men nÀr jag försökte installera den pÄ nvme via
grub-install âtarget=x86_64-efi âefi-directory=/boot âbootloader-id=grub
föll systemet i kernel panic, och efter omstart fanns ingen ny post via options. Jag hittade ingen tydlig lösning pÄ detta problem och beslutade dÀrför att försöka konfigurera bootning med systemd-boot.
- Starta
bootctl --path=/boot installoch vi Äker in i kernel panic. StÀng av MacBook, slÄ pÄ den igen och tryck pÄ options (stÀng inte av usb-c hubben med tangentbordet).
- Kontrollera att en ny post EFI BOOT har dykt upp bredvid den externa enheten.
- VÀlj att boota frÄn den externa usb-enheten, som vid den första installationen (glöm inte att ange module_blacklist=thunderbolt).
- Montera vÄr disk och gÄ in i miljön via arch-chroot.
mount /dev/nvme0n1p4 /mnt
mount /dev/nvme0n1p1 /mnt/boot
arch-chroot /mnt
Om det Àr nödvÀndigt att tangentbordet fungerar innan systemet Àr helt laddat (detta Àr nödvÀndigt vid anvÀndning av LUKS/dm-crypt-kryptering) skrivs det i filen /etc/mkinicpio.conf i avsnittet MODULES:
MODULES=(ext4 applespi intel_lpss_pci spi_pxa2xx_platform bce)
Uppdatera kÀrnan och initramfs.
mkinicpio -p linux-mbp
Konfigurera systemd-boot
Redigera filen /boot/loader/loader.conf, ta bort allt som finns dÀr och skriv följande:
default arch
timeout 5
editor 1
GĂ„ till mappen /boot/loader/entries, skapa filen arch.conf och skriv:
titel arch
linux /vmlinuz-linux-mbp
initrd /initramfs-linux-mbp.img
alternativ root=/dev/<b>nvme0n1p4</b> rw pcie_ports=kompatibel
Om du anvÀnde LUKS och LVM, dÄ
alternativ krypt-enhet=\/dev\/<b>nvme0n1p4</b>:luks rot=\/dev\/mapper\/vz0-root rw pcie_ports=kompatibel
Starta om till MacOS.
6. Wi-Fi-konfiguration
Som det visade sig lagrar MacOS firmwarefiler för wi-fi-adaptern i mappen /usr/share/firmware/wifi , och du kan hÀmta dem dÀrifrÄn i form av blobbar och mata dem till kÀrnmodulen brcmfmac. För att ta reda pÄ vilka filer din adapter anvÀnder, öppna terminalen i MacOS och skriv:
ioreg -l | grep C-4364Du fÄr en lÄng lista. Vi behöver filer endast frÄn avsnittet 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>"})
I ditt fall kan filnamnen variera. Kopiera dem frÄn mappen /usr/share/firmware/wifi till flashminnet och döp om dem enligt följande format:
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>
I detta fall innehÄller den sista textfilen modellnamnen. Om din modell inte Àr macbookpro15,2, mÄste du döpa om den hÀr filen enligt din MacBooks modell.
Starta om till Arch.
Kopiera filer frÄn flashminnet till mappen /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/
Kontrollera modulen fungerar:
rmmod brcmfmac
modprobe brcmfmac
Se till att nÀtverksgrÀnssnittet syns via ifconfig/ip.
Konfigurera wifi via
Observera. Via netctl, nmcli, etc. fungerar inte grÀnssnittet, bara via iwd.
Tvinga NetworkManager att anvÀnda iwd. För detta skapar vi filen /etc/NetworkManager/NetworkManager.conf och skriver:
[device]
wifi.backend=iwd
Starta NetworkManager-tjÀnsten
sudo systemctl start NetworkManager.service
sudo systemctl enable NetworkManager.service
7. Ljud
För att ljudet ska fungera, mÄste pulseaudio installeras:
sudo pacman -S pulseaudio
Ladda ner tre filer:
Flytta dem:
/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/Reaume
För tillfÀllet 16.10.2019 mÄste man vÀlja antingen ljud eller suspend/resume. VÀnta pÄ att författaren av bce-modulen ska fÀrdigstÀlla funktionen.
För att kompilera modulen med stöd för suspend/resume, mÄste följande utföras:
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
Om du har installerat den fÀrdiga modulen apple-bce frÄn repot anuali1, mÄste du ta bort den först och endast efter det bygga och installera bce-modulen med stöd för suspendlÀge.
Dessutom, se till att lÀgga till i blacklist-modulen applesmc (om du inte har gjort det tidigare) och kontrollera att i /boot/loader/entries/arch.conf i raden options Àr tillagt parametern pcie_ports=compat.
För tillfĂ€llet kraschar TouchBar-drivrutinen vid intrĂ€de i suspend-lĂ€ge, och Thunderbolt-drivrutinen fryser systemet ibland i mer Ă€n 30 sekunder, och vid Ă„terupptagning â i flera minuter. Detta kan Ă„tgĂ€rdas genom automatiserad avlastning av problematiska moduler.
Skapa ett 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
Gör det körbart:
sudo chmod +x /lib/systemd/system-sleep/rmmod.sh Detta Àr allt för nu. Resultatet Àr ett fullt fungerande system, förutom nÄgra detaljer med suspend/resume. Inga krascher eller kernel panic har observerats under flera dagar av drift. Jag hoppas att författaren av bce-modulen fÀrdigstÀller det snart, och att vi fÄr full kropp för support av suspend/resume och ljud.
KĂ€lla: habr.com
