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

Det var mye stÞy om at det nye T2-chippet gjÞr det umulig Ä installere Linux pÄ de nye MacBook-modellene fra 2018 med Touch Bar. Tiden gikk, og mot slutten av 2019 utviklet tredjeparts utviklere en rekke drivere og kjernepatcher for Ä kommunisere med T2-chippet. Hoveddriveren for MacBook-modellene fra 2018 og nyere implementerer VHCI (funksjonalitet for Touch Bar/tastatur/osv.), samt lyden.

Prosjekt mbp2018-bridge-drv delt opp i 3 hovedkomponenter:

  • BCE (Buffer Copy Engine) — etablerer den primĂŠre kommunikasjonskanalen med T2. VHCI og Audio krever denne komponenten.
  • VHCI — er en virtuell vertskontroller for USB; tastatur, mus og andre systemkomponenter leveres av denne komponenten (andre drivere bruker denne vertskontrolleren for Ă„ gi mer funksjonalitet).
  • Audio — driveren for T2s lydgrensesnitt, stĂžtter for Ăžyeblikket bare lydutgang gjennom de innebygde hĂžyttalerne i MacBook.


Det andre prosjektet kalles macbook12-spi-driver, og det gir drivermulighetene for tastatur, trackpad SPI, og Touch Bar for MacBook Pro fra slutten av 2016 og nyere. Noen av driverne for tastatur/trackpad er nÄ inkludert i kjernen, fra versjon 5.3.

Det er ogsÄ lagt til stÞtte for enheter som Wi-Fi, trackpad, osv., ved hjelp av kjernepatcher. For Þyeblikket er kjerneversjonen 5.3.5-1

Hva som fungerer akkurat nÄ

  1. NVMe
  2. Tastatur
  3. USB-C (Thunderbolt har ikke blitt testet; ved automatisk lasting av modulen henger systemet seg helt).
  4. Touch Bar (med mulighet for Ă„ aktivere Fn-tastene, bakgrunnsbelysning, ESC osv.)
  5. Lyd (kun de innebygde hĂžyttalerne).
  6. Wi-Fi-modul (via brcmfmac og kun gjennom iw).
  7. DisplayPort via USB-C.
  8. Sensorer.
  9. Suspend/Resume (delvis).
  10. osv.

Denne guiden gjelder for macbookpro15,1 og macbookpro15,2. Basert pÄ en artikkel fra GitHub pÄ engelsk. herfrÄIkke alt i denne artikkelen fungerte, sÄ jeg mÄtte finne lÞsningen selv.

Hva som kreves for installasjon

  • USB-C dokkestasjon til USB (minimum tre USB-porter for Ă„ koble til mus, tastatur, USB-modem eller telefon i tethering-modus). Dette er kun nĂždvendig i de tidlige installasjonsfasene.
  • USB-tastatur.
  • USB/USB-C flash-stasjon pĂ„ minst 4GB.

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. Alloker ledig plass ved hjelp av DiskverktĂžy.

For enkelhets skyld allokerte jeg med én gang 30GB til disken, formatert i exFAT i DiskverktÞy. Oppdeling av den fysiske disken i partisjoner med DiskverktÞy..

3. Oppretting av ISO-bilde

Alternativer:

  1. Du kan ta den enkle veien og laste ned et ferdig bilde med kjerne 5.3.5-1 og patcher fra aunali1 lenke til ferdig bilde
  2. Lag bildet selv via archlive (krever et system med Arch-distribusjon)

    Installerer archiso

    pacman -S archiso

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

    Legg til depot i pacman.conf:

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

    Ignorer den originale kjernen i pacman.conf:

    IgnorePkg   = linux linux-headers
    

    Legg til nĂždvendige pakker, til slutt legger vi til kjernen linux-mbp og linux-mbp-headers

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

    Endre skriptet for interaktivt modus (bytt pacstrap -C til 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!"
    }

    Oppretting av bildet:

    sudo ./build.sh -v

    Trykk Y for Ä hoppe over de ignorerte pakkene, deretter skriver vi ISO-bildet pÄ USB-minne:

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

4. FĂžrste oppstart

Start pÄ nytt med USB-minnet og tastaturet tilkoblet. Trykk options nÄr eplet vises, og velg EFI BOOT.

Deretter mÄ du trykke pÄ tasten «e» og skrive inn pÄ slutten av kommandolinjen module_blacklist=thunderbolt. Hvis du ikke gjÞr dette vil systemet kanskje ikke starte, og du vil fÄ en Thunderbolt ICM-feil.

Med fdisk/cfdisk finner vi vÄr partisjon (i mitt tilfelle er det nvme0n1p4), formaterer og installerer Arch. Du kan bruke den offisielle veiledningen eller den eksterne.

Vi lager ikke en oppstartspartisjon, oppstartslasteren skal skrives til /dev/nvme0n1p1
NÄr miljÞet er fullstendig opprettet i /mnt og fÞr vi gÄr inn i arch-chroot, skriver vi:

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

Skriv inn thunderbolt og applesmc i /etc/modprobe.d/blacklist.conf

blacklist thunderbolt
blacklist applesmc

Tastatur, Touch Bar, etc.

Installer yay:


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

Installer moduler for Ä fÄ Touch Bar til Ä fungere:


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

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

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

Installer kjerner for Ä fÄ tastaturet til Ä fungere. I depotet aunali1 finnes en ferdig pakke som heter apple-bce-dkms-git. For Ä installere den, skriv i konsollen:

pacman -S apple-bce-dkms-git

I dette tilfellet vil kjernemodulet hete apple-bce. Hvis du bygger det selv, heter det bce. Hvis du vil inkludere modulen i MODULES-delen av mkinicpio.conf-filen, husk 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 modulen bce eller apple-bce i oppstartslisten: /etc/modules-load.d/bce.conf

bce

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

options apple-ib-tb fnmode=2

Oppdater kjernen og initramfs.


mkinitcpio -p linux-mbp

Installer iwd:

sudo pacman -S networkmanager iwd

5. Bootloader

NÄr alle hovedpakker er installert i chroot, kan vi begynne Ä installere bootloaderen.

Jeg klarte ikke Ä fÄ grub til Ä fungere. Fra en ekstern USB-disk starter grub opp, men ved forsÞk pÄ Ä installere det i nvme oppstod det problemer.

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

Systemet krasjet med kernel panic, og etter omstart dukket ikke det nye alternativet opp under options. Jeg fant ingen tydelig lÞsning pÄ dette problemet og bestemte meg derfor for Ä prÞve Ä implementere oppstart ved hjelp av systemd-boot.

  1. Startar
    bootctl --path=/boot install

    Og vi krasjer med kernel panic. SlÄ av MacBooken, start pÄ nytt, hold inne options (ikke koble fra USB-C huben med tastaturet)

  2. Sjekk at det dukker opp et nytt EFI BOOT-alternativ i tillegg til den eksterne enheten
  3. Velg oppstart fra den eksterne USB-disken, som ved den fĂžrste installasjonen (ikke glem Ă„ skrive module_blacklist=thunderbolt)
  4. Monter disken vÄr og gÄ inn i miljÞet via arch-chroot


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

Hvis det er nÞdvendig at tastaturet fungerer fÞr systemet er fullastet (dette er nÞdvendig ved bruk av luks/dm-crypt-kryptering), sÄ skriver vi inn i filen /etc/mkinicpio.conf i seksjonen MODULES:

MODULES=(ext4 applespi intel_lpss_pci spi_pxa2xx_platform bce)

Oppdater kjernen og initramfs.


mkinicpio -p linux-mbp

Konfigurer systemd-boot

Rediger filen /boot/loader/loader.conf, slett alt inne i den, og legg til fĂžlgende:

default arch
timeout 5
editor 1

GĂ„ til mappen /boot/loader/entries, opprett filen arch.conf og skriv:

tittel arch
linux /vmlinuz-linux-mbp
initrd /initramfs-linux-mbp.img
alternativer root=/dev/<b>nvme0n1p4</b> rw pcie_ports=kompat

Hvis du har brukt luks og lvm, sÄ

alternativer cryptdevice=\/dev\/<b>nvme0n1p4</b>:luks rot=\/dev\/mapper\/vz0-root rw pcie_ports=kompatibel

Start pÄ nytt i MacOS.

6. Konfigurering av Wi-Fi

Som det viste seg, lagrer MacOS firmwarefiler for Wi-Fi-adapteren i mappen /usr/share/firmware/wifi , og du kan ta dem derfra i form av blobs og gi dem til brcmfmac-kjernemodulen. For Ä finne ut hvilke filer adapteren din bruker, Äpner du terminalen i MacOS og skriver:

ioreg -l | grep C-4364

Du fÄr en lang liste. Vi trenger bare filene fra delen 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 tilfelle kan filnavnene variere. Kopier dem fra mappen /usr/share/firmware/wifi til USB-pinn og gi dem et nytt navn:

    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 dette tilfellet inneholder den siste tekstfilen modellnavn. Hvis modellen din ikke er macbookpro15,2, mÄ du gi filen nytt navn i trÄd med din MacBook-modell.

Vi starter pÄ nytt i Arch.

Vi kopierer filer fra USB-minnet 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/

Vi sjekker modulens funksjonalitet:


rmmod brcmfmac
modprobe brcmfmac

Vi sĂžrger for at nettverksgrensesnittet er synlig via ifconfig/ip.
Vi konfigurerer wifi via iwctl

Advarsel. Nettverksgrensesnittet fungerer ikke med netctl, nmcli, osv. Bare via iwd.

Vi tvinger NetworkManager til Ă„ bruke iwd. For dette lager vi filen /etc/NetworkManager/NetworkManager.conf og skriver:

[device]
wifi.backend=iwd

Vi starter NetworkManager-tjenesten


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

7. Lyd

For at lyden skal fungere, mÄ pulseaudio installeres:


sudo pacman -S pulseaudio

Vi laster ned tre filer:

Vi flytter 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/Resume

For Þyeblikket 16.10.2019 Vi mÄ velge enten lyd eller suspend/resume. Vi venter til forfatteren av bce-modulen oppdaterer funksjonaliteten.

For Ä bygge modulen med stÞtte for suspend/resume, 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 har installert den ferdige apple-bce-modulen fra repositoriet anuali1, mÄ du fÞrst fjerne den, og deretter bygge og installere bce-modulen med stÞtte for suspend-modus.

Det er ogsÄ nÞdvendig Ä legge applesmc-modulen til svartelisten (hvis du ikke har gjort det tidligere) og sÞrge for at parameteren pcie_ports=compat.

Per nÄ krasjer Touch Bar-driveren nÄr man gÄr inn i suspend-modus, og Thunderbolt-driveren kan noen ganger henge systemet i mer enn 30 sekunder, og ved gjenopptakelse i flere minutter. Dette kan lÞses ved automatisk Ä laste ut problematiske moduler.

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

GjĂžr det kjĂžrbart:

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

Det er alt sÄ langt. Resultatet er et ganske funksjonelt system, bortsett fra noen nyanser med suspend/resume. Ingen krasjer eller kernel panic har blitt observert pÄ flere dager med oppetid. Jeg hÄper forfatteren av bce-modulen vil forbedre det snart, slik at vi fÄr full stÞtte for suspend/resume og lyd.

Kilde: habr.com

KjĂžp pĂ„litelig hosting for nettsteder med DDoS-beskyttelse, VPS VDS-servere đŸ”„ KjĂžp pĂ„litelig hosting for nettsteder med DDoS-beskyttelse, VPS VDS-servere | ProHoster