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

Det har vært en del hype om at den nye T2-brikken vil gjøre det umulig å installere Linux på de nye 2018 MacBook-ene med en touchbar. Tiden gikk, og på slutten av 2019 implementerte tredjepartsutviklere en rekke drivere og kjernepatcher for interaksjon med T2-brikken. Hoveddriveren for MacBook-modeller 2018 og nyere implementerer VHCI-drift (touch/keyboard/etc.-betjening), samt lyddrift.

Prosjekt mbp2018-bro-drv delt inn i 3 hovedkomponenter:

  • BCE (Buffer Copy Engine) - etablerer hovedkommunikasjonskanalen med T2. VHCI og Audio krever denne komponenten.
  • VHCI er en USB Virtual Host Controller; tastaturet, musen og andre systemkomponenter leveres av denne komponenten (andre drivere bruker denne vertskontrolleren for å gi mer funksjonalitet.
  • Lyd - driver for T2-lydgrensesnittet, støtter for øyeblikket kun lydutgang gjennom MacBooks innebygde høyttalere


Det andre prosjektet heter macbook12-spi-driver, og den implementerer muligheten til å betjene en inngangsdriver for tastaturet, SPI-styreflaten og berøringslinjen for slutten av 2016 og senere MacBook Pros. Noen tastatur-/styreflate-drivere er nå inkludert i kjernen, fra og med versjon 5.3.

Støtte for enheter som wi-fi, touchpad, etc ble også implementert ved hjelp av kjernepatcher. Gjeldende kjerneversjon 5.3.5-1

Hva fungerer for tiden

  1. NVMe
  2. tastatur
  3. USB-C (Thunderbolt har ikke blitt testet; når modulen lastes automatisk, fryser den systemet)
  4. Touchbar (med muligheten til å slå på Fn-tastene, bakgrunnsbelysningen, ESC, etc.)
  5. Lyd (kun innebygde høyttalere)
  6. Wi-Fi-modul (via brcmfmac og kun via iw)
  7. DisplayPort over USB-C
  8. Sensorer
  9. Suspend/Fortsett (delvis)
  10. etc..

Denne opplæringen gjelder for macbookpro15,1 og macbookpro15,2. Artikkelen er hentet som grunnlag fra Github på engelsk. derav. Ikke alt i denne artikkelen fungerte, så jeg måtte finne en løsning selv.

Hva du trenger for installasjon

  • USB-C docking-adapter til USB (minst tre USB-innganger for å koble til en mus, tastatur, USB-modem eller telefon i tethering-modus). Dette er kun nødvendig under de første stadiene av installasjonen
  • USB-tastatur
  • USB/USB-C flash-stasjon minimum 4 GB

1. Deaktiver forbudet mot oppstart fra eksterne medier

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

2. Tildel ledig plass ved hjelp av Diskverktøy

For enkelhets skyld allokerte jeg umiddelbart 30 GB til disken, og formaterte den i exfat i selve Diskverktøyet. Partisjonering av et fysisk diskverktøy.

3. Lag et ISO-bilde

alternativer:

  1. Du kan gå den enkle veien og laste ned et ferdig bilde med kjerne 5.3.5-1 og patcher fra aunali1 lenke til det ferdige bildet
  2. Lag et bilde selv via archlive (et system med Archa-distribusjon kreves)

    Satt archiso

    pacman -S archiso

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

    Legg til depotet til pacman.conf:

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

    Vi ignorerer den originale kjernen i pacman.conf:

    IgnorePkg   = linux linux-headers
    

    Legg til de nødvendige pakkene, til slutt legg til linux-mbp-kjernen og linux-mbp-headerne

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

    Vi endrer skriptet til å fungere i interaktiv modus (erstatt 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!"
    }

    Å danne et bilde:

    sudo ./build.sh -v

    Trykk på Y for å hoppe over ignorerte pakker, og skriv deretter iso-bildet til usb-flashstasjonen:

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

4. Første oppstart

Start på nytt med flash-stasjonen og tastaturet satt inn. Trykk på alternativer når eplet vises, velg EFI BOOT.

Deretter må du trykke på "e" -tasten og gå inn på slutten av kommandolinjen module_blacklist=torden. Hvis dette ikke gjøres, kan det hende at systemet ikke starter opp og en Thunderbolt ICM-feil vises.

Ved å bruke fdisk/cfdisk finner vi partisjonen vår (for meg er det nvme0n1p4), formaterer den og installerer arkivet. Du kan bruke offisielle instruksjoner eller sidelengs.

Vi lager ikke en oppstartspartisjon; vi vil skrive oppstartslasteren inn /dev/nvme0n1p1
Etter at miljøet i /mnt er fullstendig dannet og før du går til arch-chroot, skriv:

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

Legg til i /etc/pacman.conf:


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

Installer kjernen:


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, berøringsfelt osv

Installer yay:


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

Installere moduler for at berøringslinjen skal fungere:


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

Legg til moduler til oppstart: /etc/modules-load.d/apple.conf

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

Installere kjernemoduler for tastaturet. I depotet anuali1 det er en ferdig pakke, heter det apple-bce-dkms-git. For å installere den, skriv i konsollen:

pacman -S apple-bce-dkms-git

I dette tilfellet vil kjernemodulen bli kalt eple-bce. Ved selvmontering kalles det f.v.t. Følgelig, hvis du ønsker å registrere en modul i MODULES-delen av mkinicpio.conf-filen, så ikke glem hvilken modul du installerte.

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

Legg til bce- eller apple-bce-modulen til oppstart: /etc/modules-load.d/bce.conf

bce

Hvis du vil bruke Fn-knappene som standard, skriver du i filen /etc/modprobe.d/apple-tb.conf:

options apple-ib-tb fnmode=2

Oppdaterer kjernen og initramfs.


mkinitcpio -p linux-mbp

Installer iwd:

sudo pacman -S networkmanager iwd

5. Laster

Når alle hovedpakkene er installert inne i chrooten, kan du begynne å installere bootloaderen.

Jeg har ikke klart å få grub på jobb. Grub starter opp fra en ekstern USB-stasjon, men når du prøver å registrere den i nvme via

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

systemet gikk i kjernepanikk, og etter omstart dukket ikke et nytt element gjennom alternativer opp. Jeg fant ingen klar løsning på dette problemet og bestemte meg derfor for å prøve å implementere oppstart ved hjelp av systemd-boot.

  1. Lansering
    bootctl --path=/boot install

    og vi går i kjernepanikk. Slå av MacBook, slå den på igjen, klikk på alternativer (ikke slå av USB-C-huben med tastatur)

  2. Vi sjekker at en ny EFI BOOT-oppføring har dukket opp i tillegg til den eksterne enheten
  3. Vi velger å starte opp fra en ekstern USB-stasjon, som under den første installasjonen (ikke glem å spesifisere module_blacklist=thunderbolt)
  4. Vi monterer disken vår og går inn i miljøet via arch-chroot


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

Hvis det er nødvendig for tastaturet å fungere til systemet er fullastet (dette er nødvendig når du bruker luks/dm-crypt-kryptering), så skriv det i /etc/mkinicpio.conf-filen i MODULER-delen:

MODULES=(ext4 applespi intel_lpss_pci spi_pxa2xx_platform bce)

Oppdaterer kjernen og initramfs.


mkinicpio -p linux-mbp

Setter opp systemd-boot

Vi redigerer filen /boot/loader/loader.conf, sletter alt inne og legger til følgende:

default arch
timeout 5
editor 1

Gå til mappen /boot/loader/entries, lag arch.conf-filen 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 brukte luks og lvm, da

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

Start på nytt i MacOS.

6. Wi-Fi oppsett

Som det viste seg til slutt, lagrer MacOS fastvarefilene for wi-fi-adapteren i mappen /usr/share/firmware/wifi , og du kan ta dem derfra i form av klatter og mate dem til brcmfmac-kjernemodulen. For å finne ut hvilke filer adapteren bruker, åpne en terminal i MacOS og skriv:

ioreg -l | grep C-4364

Vi får en lang liste. Vi trenger bare filer fra seksjonen Forespurte 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 tilfelle kan filnavnene variere. Kopier dem fra mappen /usr/share/firmware/wifi til flash-stasjonen og gi dem nytt navn 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 tilfellet inneholder den siste tekstfilen modellnavnene; hvis modellen din ikke er macbookpro15,2, må du endre navn på denne filen i samsvar med din MacBook-modell.

Start på nytt i Arch.

Kopier filene fra flash-stasjonen 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/

Sjekke funksjonaliteten til modulen:


rmmod brcmfmac
modprobe brcmfmac

Vi sørger for at nettverksgrensesnittet vises gjennom ifconfig/ip.
Sette opp wifi via iwctl

Merk følgende. Via netctl, nmcli, etc. Grensesnittet fungerer ikke, kun gjennom iwd.

Vi tvinger NetworkManager til å bruke iwd. For å gjøre dette, lag filen /etc/NetworkManager/NetworkManager.conf og skriv:

[device]
wifi.backend=iwd

Start NetworkManager-tjenesten


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

7. Lyd

For at lyden skal fungere, må du installere pulsaudio:


sudo pacman -S pulseaudio

Last ned tre filer:

La oss 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. Suspend/Fortsett

Akkurat nå 16.10.2019 du må velge enten lyd eller suspendere/gjenoppta. Vi venter på at forfatteren av bce-modulen skal fullføre funksjonaliteten.

For å bygge en modul med støtte for suspendert/gjenoppta, må du gjø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 installerte den ferdige apple-bce-modulen fra anuali1-depotet, må du først fjerne den og først deretter montere og installere bce-modulen med støtte for suspenderingsmodus.

Du må også legge til applesmc-modulen til svartelisten (hvis du ikke har gjort dette før) og sørge for at parameteren er lagt til i /boot/loader/entries/arch.conf i alternativlinjen på slutten pcie_ports=kompat.

For øyeblikket krasjer berøringslinjedriveren når den går inn i hvilemodus, og thunderbolt-driveren fryser noen ganger systemet i mer enn 30 sekunder, og i flere minutter når det fortsetter. Dette kan fikses ved å automatisk losse problematiske moduler.

Lag et skript /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

Gjør den kjørbar:

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

Det er alt for nå. Resultatet er et fullstendig brukbart system, med unntak av noen nyanser med suspend/resume. Ingen krasj eller kjernepanikk ble observert i løpet av flere dager med oppetid. Jeg håper at forfatteren av bce-modulen i nær fremtid vil fullføre den, og vi vil få full støtte for suspend/resume og lyd.

Kilde: www.habr.com

Legg til en kommentar