Få MacBook Pro 2018 T2 til at fungere med ArchLinux (dualboot)

Der har været en del hype omkring, at den nye T2-chip vil gøre det umuligt at installere Linux på de nye 2018 MacBooks med en touchbar. Tiden gik, og i slutningen af ​​2019 implementerede tredjepartsudviklere en række drivere og kernepatches til interaktion med T2-chippen. Hoveddriveren for MacBook-modeller 2018 og nyere implementerer VHCI-betjening (touch/tastatur/etc.-betjening), samt lydbetjening.

Projekt mbp2018-bro-drv opdelt i 3 hovedkomponenter:

  • BCE (Buffer Copy Engine) - etablerer hovedkommunikationskanalen med T2. VHCI og Audio kræver denne komponent.
  • VHCI er en USB Virtual Host Controller; tastaturet, musen og andre systemkomponenter leveres af denne komponent (andre drivere bruger denne værtscontroller til at give mere funktionalitet.
  • Lyd - driver til T2 lydgrænsefladen, understøtter i øjeblikket kun lydoutput gennem MacBook'ens indbyggede højttalere


Det andet projekt hedder macbook12-spi-driver, og den implementerer muligheden for at betjene en input-driver til tastaturet, SPI-trackpad og touchbar til MacBook Pro sent 2016 og senere. Nogle tastatur-/pegefelt-drivere er nu inkluderet i kernen, startende med version 5.3.

Understøttelse af enheder som wi-fi, touchpad osv. blev også implementeret ved hjælp af kernepatches. Nuværende kerneversion 5.3.5-1

Hvad virker i øjeblikket

  1. NVMe
  2. tastatur
  3. USB-C (Thunderbolt er ikke blevet testet; når modulet indlæses automatisk, fryser det systemet)
  4. Touchbar (med mulighed for at tænde for Fn-tasterne, baggrundsbelysning, ESC osv.)
  5. Lyd (kun indbyggede højttalere)
  6. Wi-Fi-modul (via brcmfmac og kun via iw)
  7. DisplayPort over USB-C
  8. Sensorer
  9. Suspender/Genoptag (delvist)
  10. etc ..

Denne vejledning gælder for macbookpro15,1 og macbookpro15,2. Artiklen er taget som grundlag fra Github på engelsk. dermed. Ikke alt i denne artikel virkede, så jeg måtte selv finde en løsning.

Hvad du skal bruge til installation

  • USB-C docking-adapter til USB (mindst tre USB-indgange til tilslutning af mus, tastatur, USB-modem eller telefon i tethering-tilstand). Dette er kun nødvendigt i de første faser af installationen
  • USB-tastatur
  • USB/USB-C flashdrev minimum 4GB

1. Deaktiver forbuddet mod opstart fra eksterne medier

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

2. Tildel ledig plads ved hjælp af Diskværktøj

For nemheds skyld tildelte jeg straks 30 GB til disken og formaterede den i exfat i selve Diskværktøjet. Partitionering af et Physical Disk Disk Utility.

3. Opret et ISO-billede

muligheder:

  1. Du kan gå den enkle vej og downloade et færdigt billede med kerne 5.3.5-1 og patches fra aunali1 link til det færdige billede
  2. Opret et billede selv via archlive (et system med en Archa distribution er påkrævet)

    Indstil archiso

    pacman -S archiso

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

    Tilføj lageret til pacman.conf:

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

    Vi ignorerer den originale kerne i pacman.conf:

    IgnorePkg   = linux linux-headers
    

    Tilføj de nødvendige pakker, tilføj til sidst linux-mbp-kernen og linux-mbp-headerne

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

    Vi ændrer scriptet til at fungere i interaktiv tilstand (erstat 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!"
    }

    Dannelse af et billede:

    sudo ./build.sh -v

    Tryk på Y for at springe ignorerede pakker over, og skriv derefter iso-billedet til usb-flashdrevet:

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

4. Første boot

Genstart med flashdrevet og tastaturet indsat. Tryk på optioner, når æblet vises, vælg EFI BOOT.

Dernæst skal du trykke på "e" -tasten og indtaste i slutningen af ​​kommandolinjen module_blacklist=tordenskold. Hvis dette ikke gøres, starter systemet muligvis ikke, og der vises en Thunderbolt ICM-fejl.

Ved at bruge fdisk/cfdisk finder vi vores partition (for mig er det nvme0n1p4), formaterer den og installerer arkivet. Du kan bruge officielle instruktioner eller sidelæns.

Vi opretter ikke en boot-partition; vi skriver bootloaderen ind /dev/nvme0n1p1
Efter at miljøet i /mnt er fuldstændig dannet, og før du flytter til arch-chroot, skriv:

mount /dev/nvme0n1p1 /mnt/boot
arch-chroot /mnt /bin/bash

Tilføj til /etc/pacman.conf:


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

Installer kernen:


sudo pacman -S linux-mbp linux-mbp-headers
sudo mkinitcpio -p linux-mbp

Vi registrerer thunderbolt og applesmc i /etc/modprobe.d/blacklist.conf

blacklist thunderbolt
blacklist applesmc

Tastatur, touchbar osv

Installer yay:


sudo pacman -S git gcc make fakeroot binutils
git clone https://aur.archlinux.org/yay.git
cd yay
makepkg -si

Installation af moduler, så touchbaren fungerer:


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

Tilføj moduler til opstart: /etc/modules-load.d/apple.conf

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

Installation af kernemoduler til tastaturet. I depotet anuali1 der er en færdig pakke, hedder det æble-bce-dkms-git. For at installere det, skriv i konsollen:

pacman -S apple-bce-dkms-git

I dette tilfælde vil kernemodulet blive kaldt æble-bce. Ved selvmontering kaldes det BCE. Derfor, hvis du ønsker at registrere et modul i modulet MODULER i filen mkinicpio.conf, så glem ikke hvilket modul du har installeret.

Manuel samling:


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

Tilføj bce- eller apple-bce-modulet til opstart: /etc/modules-load.d/bce.conf

bce

Hvis du vil bruge Fn-knapperne som standard, så skriv i filen /etc/modprobe.d/apple-tb.conf:

options apple-ib-tb fnmode=2

Opdatering af kernen og initramfs.


mkinitcpio -p linux-mbp

Installer iwd:

sudo pacman -S networkmanager iwd

5. Læssemaskine

Når alle hovedpakkerne er installeret inde i chrooten, kan du begynde at installere bootloaderen.

Jeg har ikke kunnet få grub til at arbejde. Grub starter fra et eksternt USB-drev, men når du forsøger at registrere det i nvme via

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

systemet gik i kernepanik, og efter genstart dukkede et nyt element gennem muligheder ikke op. Jeg fandt ikke nogen klar løsning på dette problem og besluttede derfor at prøve at implementere opstart ved hjælp af systemd-boot.

  1. Lad os starte
    bootctl --path=/boot install

    og vi går i kernepanik. Sluk MacBook, tænd den igen, klik på muligheder (sluk ikke USB-C-hubben med tastatur)

  2. Vi tjekker, at der er dukket en ny EFI BOOT-post op ud over den eksterne enhed
  3. Vi vælger at starte fra et eksternt USB-drev, som under den første installation (glem ikke at angive module_blacklist=thunderbolt)
  4. Vi monterer vores disk og går ind i miljøet via arch-chroot


mount /dev/nvme0n1p4 /mnt
mount /dev/nvme0n1p1 /mnt/boot
arch-chroot /mnt

Hvis det er nødvendigt for tastaturet at virke, indtil systemet er fuldt indlæst (dette er nødvendigt, når du bruger luks/dm-crypt-kryptering), så skriv det i filen /etc/mkinicpio.conf i MODULER-sektionen:

MODULES=(ext4 applespi intel_lpss_pci spi_pxa2xx_platform bce)

Opdatering af kernen og initramfs.


mkinicpio -p linux-mbp

Opsætning af systemd-boot

Vi redigerer filen /boot/loader/loader.conf, sletter alt indeni og tilføjer følgende:

default arch
timeout 5
editor 1

Gå til mappen /boot/loader/entries, opret filen arch.conf og skriv:

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

Hvis du brugte luks og lvm, så

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

Genstart i MacOS.

6. Wi-Fi opsætning

Som det viste sig til sidst, gemmer MacOS firmwarefilerne til wi-fi-adapteren i mappen /usr/share/firmware/wifi , og du kan tage dem derfra i form af klatter og fodre dem til brcmfmac-kernemodulet. For at finde ud af, hvilke filer din adapter bruger, skal du åbne en terminal i MacOS og skrive:

ioreg -l | grep C-4364

Vi får en lang liste. Vi mangler kun filer fra sektionen 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 dit tilfælde kan filnavnene være forskellige. Kopier dem fra mappen /usr/share/firmware/wifi til flashdrevet og omdøb dem som følger:

    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 dette tilfælde indeholder den sidste tekstfil modelnavnene; hvis din model ikke er macbookpro15,2, skal du omdøbe denne fil i overensstemmelse med din MacBook-model.

Genstart i Arch.

Kopier filerne fra flashdrevet til 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/

Kontrol af modulets funktionalitet:


rmmod brcmfmac
modprobe brcmfmac

Vi sørger for, at netværksgrænsefladen vises gennem ifconfig/ip.
Opsætning af wifi via iwctl

Opmærksomhed. Via netctl, nmcli osv. Interfacet virker ikke, kun via iwd.

Vi tvinger NetworkManager til at bruge iwd. For at gøre dette skal du oprette filen /etc/NetworkManager/NetworkManager.conf og skrive:

[device]
wifi.backend=iwd

Start NetworkManager-tjenesten


sudo systemctl start NetworkManager.service
sudo systemctl enable NetworkManager.service

7. Lyd

For at lyden kan fungere, skal du installere pulsaudio:


sudo pacman -S pulseaudio

Download tre filer:

Lad os flytte 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. Suspender/Genoptag

I dette øjeblik 16.10.2019 du skal vælge enten lyd eller suspendere/genoptage. Vi venter på, at forfatteren af ​​bce-modulet fuldfører funktionaliteten.

For at bygge et modul med suspenderet/genoptag support skal du gøre følgende:


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

Hvis du installerede det færdige apple-bce-modul fra anuali1-depotet, skal du først fjerne det og først derefter samle og installere bce-modulet med understøttelse af suspend-tilstand.

Du skal også tilføje applesmc-modulet til sortlisten (hvis du ikke har gjort dette før) og sørge for, at parameteren tilføjes i /boot/loader/entries/arch.conf i indstillingslinjen i slutningen. pcie_ports=compat.

I øjeblikket går touchbar-driveren ned, når den går ind i suspend-tilstand, og thunderbolt-driveren fryser nogle gange systemet i mere end 30 sekunder og i flere minutter, når det genoptages. Dette kan løses ved automatisk at aflæse problematiske moduler.

Opret et script /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 eksekverbart:

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

Det er alt for nu. Resultatet er et fuldstændig brugbart system, med undtagelse af nogle nuancer med suspend/resume. Der blev ikke observeret nogen nedbrud eller kernepanik i flere dages oppetid. Jeg håber, at forfatteren af ​​bce-modulet i den nærmeste fremtid vil afslutte det, og vi får fuld support til suspend/resume og lyd.

Kilde: www.habr.com

Tilføj en kommentar