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

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 mbp2018-bridge-drv 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 macbook12-spi-driver, 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 5.3.5-1

Vad som fungerar för tillfÀllet

  1. NVMe
  2. Tangentbord
  3. USB-C (Thunderbolt har inte testats, laddning av modulen lÄser systemet helt)
  4. Touchbar (med möjlighet att aktivera Fn-tangenter, belysning, ESC osv.)
  5. Ljud (endast inbyggda högtalare)
  6. Wi-Fi-modul (via brcmfmac och endast genom iw)
  7. DisplayPort via USB-C
  8. Sensorer
  9. Suspendera/Äteruppta (delvis)
  10. 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 hÀrifrÄn. 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

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

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. Partitionering av den fysiska disken med Disk Utility.

3. Skapa en ISO-avbild

Alternativ:

  1. 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 aunali1 lÀnk till den fÀrdiga avbilden
  2. Skapa en avbild sjÀlv via archlive (en dator med Arch-distro krÀvs)

    Installera archiso

    pacman -S archiso

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

    LĂ€gg till repositoriet i pacman.conf:

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

    Ignorera den ursprungliga kÀrnan i pacman.conf:

    IgnorePkg   = linux linux-headers
    

    LÀ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 -v

    Tryck 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 den officiella instruktionen eller tredjepart.

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 aunali1 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-git

I 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

bce

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

options apple-ib-tb fnmode=2

Uppdatera kÀrnan och initramfs.


mkinitcpio -p linux-mbp

Installera iwd:

sudo pacman -S networkmanager iwd

5. 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.

  1. Starta
    bootctl --path=/boot install

    och 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).

  2. Kontrollera att en ny post EFI BOOT har dykt upp bredvid den externa enheten.
  3. VÀlj att boota frÄn den externa usb-enheten, som vid den första installationen (glöm inte att ange module_blacklist=thunderbolt).
  4. 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-4364

Du 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 -&gt; brcmfmac4364-pcie.bin
    maui-X3.clmb -&gt; brcmfmac4364-pcie.clm_blob
    P-maui-X3_M-HRPN_V-m__m-7.7.txt -&gt; 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 iwctl

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.rules

8. 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

Köp pĂ„litlig webbhotell med DDoS-skydd, VPS VDS-servrar đŸ”„ Köp pĂ„litlig webbhotell med DDoS-skydd, VPS VDS-servrar | ProHoster