Få MacBook Pro 2018 T2 att fungera med ArchLinux (dualboot)

Det har varit en hel del hype om att det nya T2-chippet kommer att göra det omöjligt att installera Linux på de nya 2018 MacBook-datorerna med en touchbar. Tiden gick och i slutet av 2019 implementerade tredjepartsutvecklare ett antal drivrutiner och kärnpatchar för interaktion med T2-chippet. Den huvudsakliga drivrutinen för MacBook-modeller 2018 och nyare implementerar VHCI-drift (touch/tangentbord/etc. drift), såväl som ljuddrift.

Projekt mbp2018-bridge-drv uppdelad i 3 huvudkomponenter:

  • BCE (Buffer Copy Engine) - upprättar huvudkommunikationskanalen med T2. VHCI och Audio kräver denna komponent.
  • VHCI är en virtuell USB-värdstyrenhet; tangentbordet, musen och andra systemkomponenter tillhandahålls av den här komponenten (andra drivrutiner använder den här värdkontrollern för att ge mer funktionalitet.
  • Audio - drivrutin för T2-ljudgränssnittet, stöder för närvarande endast ljudutgång via MacBooks inbyggda högtalare


Det andra projektet heter macbook12-spi-drivrutinen, och den implementerar möjligheten att använda en ingångsdrivrutin för tangentbordet, SPI-styrplattan och pekfältet för sent 2016 och senare MacBook Pros. Vissa drivrutiner för tangentbord/styrplatta ingår nu i kärnan, från och med version 5.3.

Stöd för enheter som wi-fi, pekplatta, etc implementerades också med hjälp av kernel patchar. Aktuell kärnversion 5.3.5-1

Vad som fungerar för tillfället

  1. NVMe
  2. tangentbord
  3. USB-C (Thunderbolt har inte testats; när modulen laddas automatiskt fryser den systemet)
  4. Pekfält (med möjlighet att slå på Fn-tangenterna, bakgrundsbelysning, ESC, etc.)
  5. Ljud (endast inbyggda högtalare)
  6. Wi-Fi-modul (via brcmfmac och endast via iw)
  7. DisplayPort över USB-C
  8. Sensorer
  9. Stäng av/återuppta (delvis)
  10. etc..

Denna handledning är tillämplig för macbookpro15,1 och macbookpro15,2. Artikeln är hämtad som grund från Github på engelska. hence. Allt i den här artikeln fungerade inte, så jag var tvungen att hitta en lösning själv.

Vad du behöver för installation

  • USB-C dockningsadapter till USB (minst tre USB-ingångar för att ansluta en mus, tangentbord, USB-modem eller telefon i internetdelningsläge). Detta är endast nödvändigt under de första stegen av installationen
  • USB-tangentbord
  • USB/USB-C flashminne minst 4GB

1. Inaktivera förbudet mot uppstart från externa media

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

2. Tilldela ledigt utrymme med hjälp av Skivverktyg

För enkelhetens skull tilldelade jag omedelbart 30 GB till disken och formaterade den i exfat i själva Diskverktyget. Partitionering av ett verktyg för fysisk diskdisk.

3. Skapa en ISO-bild

alternativ:

  1. Du kan gå den enkla vägen och ladda ner en färdig bild med kernel 5.3.5-1 och patchar från aunali1 länk till den färdiga bilden
  2. Skapa en bild själv via archlive (ett system med Archa-distribution krävs)

    Ställ archiso

    pacman -S archiso

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

    Lägg till förvaret till pacman.conf:

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

    Vi ignorerar den ursprungliga kärnan i pacman.conf:

    IgnorePkg   = linux linux-headers
    

    Lägg till de nödvändiga paketen, lägg till linux-mbp-kärnan och linux-mbp-headers i slutet

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

    Vi ändrar skriptet så att det fungerar 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 en bild:

    sudo ./build.sh -v

    Tryck på Y för att hoppa över ignorerade paket, skriv sedan iso-bilden till USB-flashenheten:

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

4. Första start

Starta om med flashenheten och tangentbordet isatta. Tryck på alternativ när äpplet dyker upp, välj EFI BOOT.

Därefter måste du trycka på "e" -tangenten och ange i slutet av kommandoraden module_blacklist=åsk. Om detta inte görs kanske systemet inte startar och ett Thunderbolt ICM-fel visas.

Med hjälp av fdisk/cfdisk hittar vi vår partition (för mig är det nvme0n1p4), formaterar den och installerar arkivet. Du kan använda officiella instruktioner eller i sidled.

Vi skapar inte en startpartition, vi kommer att skriva in starthanteraren /dev/nvme0n1p1
Efter att miljön i /mnt är helt bildad och innan du går över till arch-chroot, skriv:

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

Vi registrerar thunderbolt och applesmc i /etc/modprobe.d/blacklist.conf

blacklist thunderbolt
blacklist applesmc

Tangentbord, pekfält 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 pekfältet ska fungera:


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

Lägg till moduler för start: /etc/modules-load.d/apple.conf

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

Installera kärnmoduler för tangentbordet. I förvaret anuali1 det finns ett färdigt paket heter det apple-bce-dkms-git. För att installera det, skriv i konsolen:

pacman -S apple-bce-dkms-git

I det här fallet kommer kärnmodulen att anropas äpple-bce. Vid självmontering kallas det BCE. Följaktligen, om du vill registrera en modul i MODULES-sektionen i filen mkinicpio.conf, glöm inte vilken modul du installerade.

Manuell montering:


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 bce- eller apple-bce-modulen vid start: /etc/modules-load.d/bce.conf

bce

Om du vill använda Fn-knapparna som standard, skriv sedan i filen /etc/modprobe.d/apple-tb.conf:

options apple-ib-tb fnmode=2

Uppdaterar kärnan och initramfs.


mkinitcpio -p linux-mbp

Installera iwd:

sudo pacman -S networkmanager iwd

5. Lastare

När alla huvudpaket är installerade i chrooten kan du börja installera starthanteraren.

Jag har inte lyckats få grub att jobba. Grub startar från en extern USB-enhet, men när du försöker registrera den i nvme via

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

Systemet hamnade i kärnpanik och efter omstart visades inte ett nytt objekt via alternativen. Jag hittade ingen tydlig lösning på detta problem och bestämde mig därför för att försöka implementera uppstart med systemd-boot.

  1. Vi lanserar
    bootctl --path=/boot install

    och vi hamnar i kärnpanik. Stäng av MacBook, slå på den igen, klicka på alternativ (stäng inte av USB-C-hubben med tangentbord)

  2. Vi kontrollerar att en ny EFI BOOT-post har dykt upp utöver den externa enheten
  3. Vi väljer att starta från en extern USB-enhet, som under den första installationen (glöm inte att ange module_blacklist=thunderbolt)
  4. Vi monterar vår disk och går 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 för tangentbordet att fungera tills systemet är fulladdat (detta är nödvändigt när du använder luks/dm-crypt-kryptering), skriv det sedan i filen /etc/mkinicpio.conf i avsnittet MODULER:

MODULES=(ext4 applespi intel_lpss_pci spi_pxa2xx_platform bce)

Uppdaterar kärnan och initramfs.


mkinicpio -p linux-mbp

Konfigurera systemd-boot

Vi redigerar filen /boot/loader/loader.conf, tar bort allt inuti och lägger till följande:

default arch
timeout 5
editor 1

Gå till mappen /boot/loader/entries, skapa filen arch.conf och skriv:

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

Om du använde luks och lvm, då

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

Starta om till MacOS.

6. Wi-Fi-inställning

Som det visade sig i slutändan lagrar MacOS firmwarefilerna för wi-fi-adaptern i mappen /usr/share/firmware/wifi , och du kan ta dem därifrån i form av blobbar och mata dem till brcmfmac-kärnmodulen. För att ta reda på vilka filer din adapter använder, öppna en terminal i MacOS och skriv:

ioreg -l | grep C-4364

Vi får en lång lista. Vi behöver bara filer från sektionen Begärda filer:

"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 skilja sig åt. Kopiera dem från mappen /usr/share/firmware/wifi till flashenheten och byt namn på dem enligt följande:

    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 det här fallet innehåller den sista textfilen modellnamnen; om din modell inte är macbookpro15,2 måste du byta namn på filen i enlighet med din MacBook-modell.

Starta om i Arch.

Kopiera filerna från flashenheten 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 modulens funktionalitet:


rmmod brcmfmac
modprobe brcmfmac

Vi ser till att nätverksgränssnittet visas via ifconfig/ip.
Konfigurera wifi via iwctl

Uppmärksamhet. Via netctl, nmcli, etc. Gränssnittet fungerar inte, bara via iwd.

Vi tvingar NetworkManager att använda iwd. För att göra detta, skapa filen /etc/NetworkManager/NetworkManager.conf och skriv:

[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 du installera pulsaudio:


sudo pacman -S pulseaudio

Ladda ner tre filer:

Låt oss 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.rules

8. Stäng av/återuppta

I detta ögonblick 16.10.2019 du måste välja antingen ljud eller avbryta/återuppta. Vi väntar på att författaren till bce-modulen ska slutföra funktionaliteten.

För att bygga en modul med suspenderad/återuppta support måste du göra följande:


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 installerade den färdiga apple-bce-modulen från anuali1-förvaret, måste du först ta bort den och först sedan montera och installera bce-modulen med stöd för viloläge.

Dessutom måste du lägga till applesmc-modulen till svartlistan (om du inte har gjort detta tidigare) och se till att parametern läggs till i /boot/loader/entries/arch.conf i alternativraden i slutet pcie_ports=kompat.

För närvarande kraschar touchbar-drivrutinen när den går in i viloläge, och thunderbolt-drivrutinen fryser ibland systemet i mer än 30 sekunder och i flera minuter när det återupptas. Detta kan åtgärdas genom att automatiskt lossa problematiska moduler.

Skapa ett manus /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

Gör det körbart:

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

Det var allt tills vidare. Resultatet är ett helt fungerande system, med undantag för vissa nyanser med suspend/resume. Inga krascher eller kärnpanik observerades under flera dagars drifttid. Jag hoppas att författaren till bce-modulen inom en snar framtid kommer att slutföra den, och vi kommer att få fullt stöd för suspend/resume och ljud.

Källa: will.com

Lägg en kommentar