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

Der var ret meget støj om, at det ikke var muligt at installere Linux på de nye MacBook-modeller fra 2018 med touchbar på grund af den nye T2-chip. Tiden gik, og ved udgangen af 2019 blev der udviklet en række drivere og kernepatches af tredjepartsudviklere for at interagere med T2-chippen. Hoveddriveren til MacBook-modellerne fra 2018 og nyere muliggør VHCI (fungerende touch/tastatur/etc.) samt lydfunktionalitet.

Projekt mbp2018-bridge-drv opdelt i 3 hovedkomponenter:

  • BCE (Buffer Copy Engine) — etablerer den primære kommunikationskanal med T2. VHCI og Audio kræver denne komponent.
  • VHCI — er en virtuel USB-værtcontroller; tastatur, mus og andre systemkomponenter leveres af denne komponent (andre drivere bruger denne værtcontroller for at sikre større funktionalitet.
  • Audio — driveren til T2s lydinterface, understøtter i øjeblikket kun lydudgang gennem de indbyggede højttalere i MacBook.


Det andet projekt hedder macbook12-spi-driver, og det muliggør drift af inputdriveren til tastaturet, trackpadet SPI og touchbaren for MacBook Pro fra slutningen af 2016 og nyere. En del drivere til tastatur/trackpad er nu inkluderet i kernen, fra version 5.3.

Der er også blevet implementeret support for enheder såsom wi-fi, touchpad, osv., ved hjælp af kernepatches. I øjeblikket er kerneversionen 5.3.5-1

Hvad fungerer på nuværende tidspunkt

  1. NVMe
  2. Tastatur
  3. USB-C (Thunderbolt er ikke testet, ved automatisk indlæsning af modulet fryser systemet helt)
  4. Touchbar (med mulighed for at aktivere Fn-taster, baggrundsbelysning, ESC osv.)
  5. Lyd (kun indbyggede højttalere)
  6. Wi-Fi-modul (gennem brcmfmac og kun via iw)
  7. DisplayPort gennem USB-C
  8. Sensorer
  9. Suspend/Resume (delvist)
  10. osv..

Denne tutorial gælder for macbookpro15,1 og macbookpro15,2. Jeg har taget udgangspunkt i en artikel fra GitHub på engelsk. from hereIkke alt fra denne artikel fungerede, så jeg måtte finde løsninger selv.

Hvad der kræves til installation

  • USB-C dock-adapter til USB (mindst tre USB-porte 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 med minimum 4GB

1. Deaktiver forbuddet mod indlæsning 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 Disk Utility.

For nemheds skyld tildelede jeg straks 30GB på disken, formateret i exfat i selve Disk Utility. Opdeling af den fysiske disk i partitioner med Disk Utility.

3. Opretter iso billede

Muligheder:

  1. Man kan tage den enkle vej og downloade et færdigt billede med kernel 5.3.5-1 og patches fra aunali1 link til det færdige billede
  2. Opret billedet selv via archlive (en system med Arch-distributionen er nødvendig)

    Installerer archiso

    pacman -S archiso

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

    Tilføj repository til pacman.conf:

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

    Ignorer den originale kernel i pacman.conf:

    IgnorePkg   = linux linux-headers
    

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

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

    Ændre scriptet til at køre 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!"
    }

    Opret billede:

    sudo ./build.sh -v

    Tryk Y for at springe over de ignorerede pakker, og skriv derefter iso-billedet til USB-nøgle:

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

4. Første opstart

Genstart med den indsatte nøgle og tastatur. Tryk på options, når æblet vises, og vælg EFI BOOT.

Dernæst skal du trykke på tasten «e» og skrive i slutningen af kommandolinjen module_blacklist=thunderbolt. Hvis dette ikke gøres, kan systemet muligvis ikke starte, og der vil opstå en fejl Thunderbolt ICM Error.

Brug af fdisk/cfdisk finder vi vores partition (i mit tilfælde nvme0n1p4), formater og installer Arch. Du kan bruge den officielle vejledning eller en tredjeparts.

Vi opretter ikke en boot-partition, bootloaderen vil blive skrevet til /dev/nvme0n1p1
Når miljøet i /mnt er fuldt oprettet, og før vi går ind i arch-chroot, skriver vi:

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 kernel:


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

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

blacklist thunderbolt
blacklist applesmc

Tastatur, touch bar osv.

Installer yay:


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

Installer moduler til touch bar:


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

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

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

Installer kernelmoduler til tastaturet. I repositoriet anuali1 der er et færdigt pakket, den hedder apple-bce-dkms-git. For at installere det skriver vi i terminalen:

pacman -S apple-bce-dkms-git

I dette tilfælde vil kernelmodulet hedde apple-bce. I tilfælde af selvbyg vil det hedde bce. Hvis du vil tilføje modulet til sektionen MODULES i filen mkinicpio.conf, så glem ikke, hvilket modul du installerede.

Manuel 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

Tilføj bce- eller apple-bce-modulet til automatisk indlæsning: /etc/modules-load.d/bce.conf

bce

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

options apple-ib-tb fnmode=2

Opdater kernen og initramfs.


mkinitcpio -p linux-mbp

Lad os installere iwd:

sudo pacman -S networkmanager iwd

5. Bootloader

Når alle hovedpakker er installeret inde i chroot, kan vi begynde at installere bootloaderen.

Jeg kunne ikke få grub til at fungere. Grub starter fra en ekstern usb-disk, men når jeg prøver at installere den i nvme via

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

systemet gik i kernel panic, og efter genstart dukkede den nye post ikke op i options. Jeg fandt ingen klar løsning på dette problem og besluttede derfor at prøve at implementere boot via systemd-boot.

  1. Starting
    bootctl --path=/boot install

    og så går vi i kernel panic. Sluk MacBook'en, tænd den igen, tryk på options (usb-c hub med tastatur tilsluttet forbliver tilsluttet)

  2. Kontroller, at der er en ny EFI BOOT-post ud over den eksterne enhed
  3. Vælg opstart fra den eksterne usb-disk, ligesom ved første installation (husk at tilføje module_blacklist=thunderbolt)
  4. Monter vores disk og gå ind i miljøet via arch-chroot


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

Hvis du har brug for, at tastaturet fungerer før systemet er helt indlæst (det er nødvendigt ved brug af luks/dm-crypt-kryptering), så skriv følgende i filen /etc/mkinicpio.conf under MODULES:

MODULES=(ext4 applespi intel_lpss_pci spi_pxa2xx_platform bce)

Opdater kernen og initramfs.


mkinicpio -p linux-mbp

Konfigurer systemd-boot

Rediger filen /boot/loader/loader.conf, slet alt indholdet og tilføj følgende:

default arch
timeout 5
editor 1

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

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

I tilfælde af brug af luks og lvm, så

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

Genstart til MacOS.

6. Konfiguration af Wi-Fi

Det viste sig, at MacOS gemmer firmwarefilerne til Wi-Fi-adapteren i mappen /usr/share/firmware/wifi , og du kan hente dem derfra i form af blobs og fodre dem til kernen modul brcmfmac. For at finde ud af, hvilke filer din adapter bruger, åbner du terminalen i MacOS og skriver:

ioreg -l | grep C-4364

Du får en lang liste. Vi har kun brug for filerne 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 variere. Vi kopierer dem fra mappen /usr/share/firmware/wifi til USB-drevet og omdøber dem til følgende 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 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 MacBooks model.

Genstarter vi i Arch.

Vi kopierer filer fra USB-drevet 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 kontrollerer modulens funktionalitet:


rmmod brcmfmac
modprobe brcmfmac

Vi sikrer os, at netværksgrænsefladen vises via ifconfig/ip.
Vi konfigurerer wifi via iwctl

Bemærk. Gennem netctl, nmcli osv. fungerer grænsefladen ikke, kun via iwd.

Vi tvinger NetworkManager til at bruge iwd. For dette opretter 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 få lyden til at fungere skal pulseaudio installeres:


sudo pacman -S pulseaudio

Vi downloader 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

I øjeblikket 16.10.2019 må vi vælge enten lyd eller suspend/resume. Vi venter på, at forfatteren af bce-modulet finjusterer funktionaliteten.

For at samle modulet med understøttelse af suspend/resume skal du udfø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 installeret det færdige apple-bce modul fra repository anuli1, skal du først slette det, før du bygger og installerer bce modulet med understøttelse af suspend.

Det er også nødvendigt at tilføje applesmc-modulet til blacklist (hvis du ikke har gjort det tidligere) og sikre, at parameteren pcie_ports=compat.

I øjeblikket fejler touchbar-driveren ved ind, i suspend-tilstand, og thunderbolt-driveren fryser systemet i mere end 30 sekunder, og ved genoptagelse i flere minutter. Dette kan rettes ved automatisk at aflaste de problematiske moduler.

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

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

Indtil videre er dette alt. Resultatet er et fuldt fungerende system, bortset fra nogle nuancer med suspend/resume. Ingen nedbrud eller kernel panic er blevet observeret i flere dages oppetid. Jeg håber, at forfatteren af bce-modulet snart vil finjustere det, så vi får fuld understøttelse af suspend/resume og lyd.

Kilde: habr.com

Køb pålidelig webhosting med DDoS-beskyttelse, VPS VDS-servere 🔥 Køb pålidelig webhosting med DDoS-beskyttelse, VPS VDS-servere | ProHoster