MacBook Pro 2018 T2 mit ArchLinux (Dualboot) zum Laufen bringen.

Es gab viel Aufsehen darüber, dass aufgrund des neuen T2-Chips Linux auf den neuen MacBook 2018 mit Touch Bar nicht installiert werden kann. Die Zeit verging, und bis Ende 2019 wurden von Drittentwicklern eine Reihe von Treibern und Kernel-Patches für die Interaktion mit dem T2-Chip implementiert. Der Haupttreiber für MacBook-Modelle 2018 und neuer ermöglicht die VHCI-Funktionalität (Touch/Keyboard/etc.) sowie Audio.

Projekt mbp2018-bridge-drv unterteilt in 3 Hauptkomponenten:

  • BCE (Buffer Copy Engine) – etabliert den Hauptkommunikationskanal mit T2. VHCI und Audio benötigen diese Komponente.
  • VHCI ist ein virtueller USB-Hostcontroller; Tastatur, Maus und andere Systemkomponenten werden über diese Komponente bereitgestellt (andere Treiber nutzen diesen Hostcontroller, um zusätzliche Funktionen zu bieten).
  • Audio – Treiber für die Audio-Schnittstelle T2, derzeit wird nur die Audioausgabe über die integrierten Lautsprecher des MacBook unterstützt.


Das zweite Projekt heißt macbook12-spi-driver, und es ermöglicht die Verwendung des Eingabegerät-Treibers für die Tastatur, das SPI-Trackpad und die Touch Bar für MacBook Pro-Modelle von Ende 2016 und neuer. Teile der Treiber für Tastatur/Trackpad sind nun ab der Version 5.3 in den Kernel integriert.

Es wurde auch die Unterstützung für Geräte wie Wi-Fi, Trackpad usw. durch Kernel-Patches implementiert. Momentan ist die Kernel-Version 5.3.5-1

Was derzeit funktioniert

  1. NVMe
  2. Tastatur
  3. USB-C (Thunderbolt wurde nicht getestet, beim automatischen Laden des Moduls hängt das System fest)
  4. Touch Bar (mit der Möglichkeit, die Fn-Tasten einzuschalten, Hintergrundbeleuchtung, ESC usw.)
  5. Audio (nur integrierte Lautsprecher)
  6. Wi-Fi-Modul (über brcmfmac und nur über iw)
  7. DisplayPort über USB-C
  8. Sensoren
  9. Suspend/Resume (teilweise)
  10. usw..

Dieses Tutorial ist für macbookpro15,1 und macbookpro15,2 anwendbar. Grundlage war ein Artikel auf GitHub in Englisch, von hier. Nicht alles aus diesem Artikel hat funktioniert, daher musste ich selbst nach einer Lösung suchen.

Was für die Installation benötigt wird

  • USB-C-Dock-Adapter auf USB (mindestens drei USB-Anschlüsse zum Anschluss einer Maus, Tastatur, USB-Modem oder Handy im Tethering-Modus). Dies ist nur in den ersten Installationsphasen erforderlich.
  • USB-Tastatur
  • USB/USB-C-Stick mit mindestens 4 GB

1. Deaktivieren Sie die Boot-Sperre von externen Medien

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

2. Partitionieren Sie den freien Speicherplatz mit dem Festplattendienstprogramm

Zur Vereinfachung habe ich sofort 30 GB auf der Festplatte partitioniert und sie im Festplattendienstprogramm in exfat formatiert. Partitionierung der physischen Festplatte mit Disk Utility.

3. Erstellen eines ISO-Images

Optionen:

  1. Man kann den einfachen Weg wählen und ein fertiges Image mit Kernel 5.3.5-1 und Patches von aunali1 Link zum fertigen Image
  2. Bild selbstständig über archlive erstellen (ein System mit der Arch-Distribution ist erforderlich)

    Installation archiso

    pacman -S archiso

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

    Repository in pacman.conf hinzufügen:

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

    Originalkernel in pacman.conf ignorieren:

    IgnorePkg = linux linux-headers
    

    Benötigte Pakete hinzufügen, am Ende den Kernel linux-mbp und linux-mbp-headers hinzufügen

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

    Skript für den interaktiven Modus anpassen (pacstrap -C durch pacstrap -i -C ersetzen):

    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!"
    }

    Image erstellen:

    sudo ./build.sh -v

    Y drücken, um ignorierte Pakete zu überspringen, dann das ISO-Image auf einen USB-Stick schreiben:

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

4. Erster Boot

Neustart mit eingelegtem USB-Stick und Tastatur. Bei Erscheinen des Apfels die Optionen-Taste drücken, EFI BOOT auswählen.

Dann die Taste „e“ drücken und am Ende der Kommandozeile eingeben module_blacklist=thunderbolt. Andernfalls könnte das System nicht starten, und es tritt ein Thunderbolt ICM-Fehler auf.

Mit fdisk/cfdisk die Partition finden (bei mir ist das nvme0n1p4), formatieren und Arch installieren. Man kann die offizielle Anleitung oder dritte.

Bootpartition nicht erstellen, der Bootloader wird hierhin geschrieben: /dev/nvme0n1p1
Nachdem die Umgebung in /mnt vollständig erstellt wurde und bevor man in arch-chroot wechselt, eingeben:

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

In /etc/pacman.conf hinzufügen:


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

Kernel installieren:


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

thunderbolt und applesmc in /etc/modprobe.d/blacklist.conf eintragen

blacklist thunderbolt
blacklist applesmc

Tastatur, Touch Bar, etc.

yay installieren:


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

Module für die Verwendung der Touch Bar installieren:


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

Module zum Autostart hinzufügen: /etc/modules-load.d/apple.conf

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

Kernelmodule für die Tastatur installieren. Im Repository anuali1 gibt es ein fertiges Paket, das heißt apple-bce-dkms-git. Um es zu installieren, geben wir in der Konsole ein:

pacman -S apple-bce-dkms-git

In diesem Fall heißt das Kernelmodul apple-bce. Bei einer Selbstkompilierung heißt es bce. Dementsprechend, wenn Sie das Modul in den Abschnitt MODULES der Datei mkinicpio.conf eintragen möchten, vergessen Sie nicht, welches Modul Sie installiert haben.

Manuelle 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

Fügen Sie das Modul bce oder apple-bce zur Autostartliste hinzu: /etc/modules-load.d/bce.conf

bce

Wenn Sie die Fn-Tasten standardmäßig verwenden möchten, fügen Sie in die Datei /etc/modprobe.d/apple-tb.conf ein:

options apple-ib-tb fnmode=2

Aktualisieren Sie den Kernel und initramfs.


mkinitcpio -p linux-mbp

Installieren wir iwd:

sudo pacman -S networkmanager iwd

5. Bootloader

Nachdem alle Hauptpakete im chroot installiert sind, können wir mit der Installation des Bootloaders beginnen.

Es ist mir nicht gelungen, grub zum Laufen zu bringen. Von einem externen USB-Laufwerk bootet grub, aber beim Versuch, ihn über

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

stürzte das System in einen Kernel-Panik, und nach einem Neustart erschien der neue Eintrag nicht über Options. Eine klare Lösung für dieses Problem habe ich nicht gefunden und habe deshalb beschlossen, den Bootvorgang mit systemd-boot umzusetzen.

  1. Starten
    bootctl --path=/boot installieren

    und stürzen in eine Kernel-Panik. Wir schalten das MacBook aus, schalten es wieder ein, drücken Optionen (USB-C-Hub mit Tastatur nicht trennen)

  2. Wir überprüfen, ob ein neuer Eintrag EFI BOOT zusätzlich zu dem externen Gerät erschienen ist.
  3. Wählen Sie das Booten von einem externen USB-Laufwerk, wie bei der ersten Installation (vergessen Sie nicht, module_blacklist=thunderbolt einzutragen)
  4. Wir mounten unser Laufwerk und wechseln über arch-chroot in die Umgebung


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

Wenn Sie möchten, dass die Tastatur bis zum vollständigen Systemstart funktioniert (dies ist erforderlich, wenn Sie LUKS/dm-crypt verwenden), fügen Sie in die Datei /etc/mkinicpio.conf im Abschnitt MODULES ein:

MODULES=(ext4 applespi intel_lpss_pci spi_pxa2xx_platform bce)

Aktualisieren Sie den Kernel und initramfs.


mkinicpio -p linux-mbp

Konfigurieren wir systemd-boot

Bearbeiten Sie die Datei /boot/loader/loader.conf, entfernen Sie alles darin und fügen Sie Folgendes ein:

default arch
timeout 5
editor 1

Wechseln Sie in das Verzeichnis /boot/loader/entries, erstellen Sie die Datei arch.conf und schreiben Sie:

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

Im Falle von LUKS und LVM,

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

Starten wir in macOS neu.

6. WLAN-Konfiguration

Wie sich herausstellte, speichert macOS die Firmware-Dateien für den WLAN-Adapter im Ordner /usr/share/firmware/wifi , und Sie können diese dort als Blobs entnehmen und dem Kernel-Modul brcmfmac übergeben. Um herauszufinden, welche Dateien Ihr Adapter verwendet, öffnen Sie das Terminal in macOS und geben Sie ein:

ioreg -l | grep C-4364

Wir erhalten eine lange Liste. Wir benötigen nur die Dateien aus dem Abschnitt 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>"})

In Ihrem Fall können die Dateinamen variieren. Wir kopieren sie aus dem Ordner /usr/share/firmware/wifi auf einen USB-Stick und benennen sie wie folgt um:

    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>

In diesem Fall enthält die letzte Textdatei die Modellnamen. Wenn Ihr Modell nicht macbookpro15,2 ist, müssen Sie diese Datei entsprechend Ihrem MacBook-Modell umbenennen.

Wir starten neu in Arch.

Wir kopieren die Dateien vom USB-Stick in den Ordner /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/

Wir überprüfen die Funktionsfähigkeit des Moduls:


rmmod brcmfmac
modprobe brcmfmac

Wir stellen sicher, dass das Netzwerk-Interface über ifconfig/ip erscheint.
Wi-Fi konfigurieren über iwctl

Achtung. Über netctl, nmcli usw. funktioniert das Interface nicht, nur über iwd.

Wir zwingen NetworkManager, iwd zu verwenden. Dazu erstellen wir die Datei /etc/NetworkManager/NetworkManager.conf und schreiben:

[device]
wifi.backend=iwd

Wir starten den Dienst NetworkManager


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

7. Sound

Um Sound zu aktivieren, muss pulseaudio installiert werden:


sudo pacman -S pulseaudio

Wir laden drei Dateien herunter:

Wir verschieben sie:

    /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. Suspendieren/Wiederherstellen

Zur Zeit 16.10.2019 muss man entweder Sound oder Suspend/Resume wählen. Wir warten darauf, dass der Autor des bce-Moduls die Funktionalität abschließt.

Um das Modul mit Unterstützung für Suspend/Resume zu erstellen, führen Sie Folgendes aus:


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

Wenn Sie das fertige Modul apple-bce aus dem Repository anuali1 installiert haben, müssen Sie es vorher entfernen und erst dann das bce-Modul mit Unterstützung für den Suspend-Modus erstellen und installieren.

Außerdem müssen Sie das Modul applesmc auf die Schwarze Liste setzen (falls Sie das noch nicht gemacht haben) und sicherstellen, dass in /boot/loader/entries/arch.conf in der Zeile options am Ende der Parameter hinzugefügt wurde: pcie_ports=compat.

Derzeit stürzt der Touch Bar-Treiber beim Wechsel in den Suspend-Modus ab, und der Thunderbolt-Treiber hängt das System manchmal mehr als 30 Sekunden auf, und bei der Wiederherstellung — für mehrere Minuten. Dies lässt sich durch eine automatische Entladung der problematischen Module beheben.

Erstellen Sie ein 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

Machen Sie es ausführbar:

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

Das wäre es für jetzt. Insgesamt haben wir ein funktionsfähiges System, abgesehen von einigen Nuancen mit Suspend/Resume. Es sind keine Abstürze oder Kernel-Panics über mehrere Tage Uptime zu beobachten. Ich hoffe, der Autor des bce-Moduls wird es in naher Zukunft vervollständigen, und wir erhalten vollständige Unterstützung für Suspend/Resume und Sound.

Quelle: habr.com

60GB SSD 8Gb DDR4