MacBook Pro 2018 T2 mit ArchLinux (Dualboot) funktionieren lassen

Es gab einen ziemlichen Hype darüber, dass der neue T2-Chip die Installation von Linux auf den neuen 2018 MacBooks mit Touchbar unmöglich machen wird. Die Zeit verging und Ende 2019 implementierten Drittentwickler eine Reihe von Treibern und Kernel-Patches für die Interaktion mit dem T2-Chip. Der Haupttreiber für MacBook-Modelle 2018 und neuer implementiert den VHCI-Betrieb (Touch-/Tastatur-/usw.-Betrieb) sowie den Soundbetrieb.

Projekt mbp2018-bridge-drv unterteilt in 3 Hauptkomponenten:

  • BCE (Buffer Copy Engine) – stellt den Hauptkommunikationskanal mit T2 her. VHCI und Audio erfordern diese Komponente.
  • VHCI ist ein USB Virtual Host Controller; Tastatur, Maus und andere Systemkomponenten werden von dieser Komponente bereitgestellt (andere Treiber verwenden diesen Host-Controller, um mehr Funktionalität bereitzustellen.
  • Audio – Treiber für die T2-Audioschnittstelle, unterstützt derzeit nur die Audioausgabe über die eingebauten Lautsprecher des MacBook


Das zweite Projekt heißt MacBook12-SPI-Treiberund implementiert die Möglichkeit, einen Eingabetreiber für die Tastatur, das SPI-Trackpad und die Touchbar für MacBook Pro Ende 2016 und höher zu betreiben. Einige Tastatur-/Trackpad-Treiber sind jetzt im Kernel enthalten, beginnend mit Version 5.3.

Die Unterstützung für Geräte wie WLAN, Touchpad usw. wurde ebenfalls mithilfe von Kernel-Patches implementiert. Aktuelle Kernel-Version 5.3.5-1

Was im Moment funktioniert

  1. NVMe
  2. Tastatur
  3. USB-C (Thunderbolt wurde nicht getestet; wenn das Modul automatisch geladen wird, friert es das System ein)
  4. Touchbar (mit der Möglichkeit, die Fn-Tasten, die Hintergrundbeleuchtung, ESC usw. einzuschalten)
  5. Ton (nur eingebaute Lautsprecher)
  6. Wi-Fi-Modul (über brcmfmac und nur über iw)
  7. DisplayPort über USB-C
  8. Sensoren
  9. Unterbrechen/Fortsetzen (teilweise)
  10. etc..

Dieses Tutorial gilt für MacBook Pro 15,1 und MacBook Pro 15,2. Der Artikel wurde als Grundlage von Github in englischer Sprache übernommen. daher. Da nicht alles in diesem Artikel funktionierte, musste ich selbst eine Lösung finden.

Was Sie für die Installation benötigen

  • USB-C-Docking-Adapter auf USB (mindestens drei USB-Eingänge zum Anschluss einer Maus, Tastatur, USB-Modem oder Telefon im Tethering-Modus). Dies ist nur in den ersten Phasen der Installation erforderlich
  • USB-Tastatur
  • USB/USB-C-Flash-Laufwerk mindestens 4 GB

1. Deaktivieren Sie das Bootverbot von externen Medien

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

2. Weisen Sie mit dem Festplatten-Dienstprogramm freien Speicherplatz zu

Der Einfachheit halber habe ich der Festplatte sofort 30 GB zugewiesen und sie im Festplatten-Dienstprogramm selbst in Exfat formatiert. Partitionieren einer physischen Festplatte Festplatten-Dienstprogramm.

3. Erstellen Sie ein ISO-Image

Optionen:

  1. Sie können den einfachen Weg gehen und ein fertiges Image mit Kernel 5.3.5-1 und Patches von herunterladen aunali1 Link zum fertigen Bild
  2. Erstellen Sie selbst ein Bild über archlive (ein System mit einer Archa-Distribution ist erforderlich)

    Setzen archiso

    pacman -S archiso

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

    Fügen Sie das Repository zu pacman.conf hinzu:

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

    Wir ignorieren den Originalkernel in pacman.conf:

    IgnorePkg   = linux linux-headers
    

    Fügen Sie die erforderlichen Pakete hinzu und fügen Sie am Ende den Linux-MBP-Kernel und die Linux-MBP-Header hinzu

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

    Wir ändern das Skript so, dass es im interaktiven Modus funktioniert (ersetzen Sie pacstrap -C durch 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!"
    }

    Ein Bild formen:

    sudo ./build.sh -v

    Drücken Sie Y, um ignorierte Pakete zu überspringen, und schreiben Sie dann das ISO-Image auf das USB-Flash-Laufwerk:

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

4. Erster Start

Starten Sie mit eingesetztem Flash-Laufwerk und Tastatur neu. Drücken Sie Optionen, wenn der Apfel erscheint, und wählen Sie EFI BOOT.

Als nächstes müssen Sie die Taste „e“ drücken und am Ende der Befehlszeile eingeben module_blacklist=Thunderbolt. Andernfalls startet das System möglicherweise nicht und es wird ein Thunderbolt ICM-Fehler angezeigt.

Mit fdisk/cfdisk finden wir unsere Partition (bei mir ist es nvme0n1p4), formatieren sie und installieren das Archiv. Sie können verwenden offizielle Anweisung oder seitwärts.

Wir erstellen keine Boot-Partition; wir schreiben den Bootloader hinein /dev/nvme0n1p1
Nachdem die Umgebung in /mnt vollständig erstellt wurde und bevor Sie zu arch-chroot wechseln, schreiben Sie:

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

Zu /etc/pacman.conf hinzufügen:


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

Installieren Sie den Kernel:


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

Wir registrieren Thunderbolt und Applesmc in /etc/modprobe.d/blacklist.conf

blacklist thunderbolt
blacklist applesmc

Tastatur, Touchbar usw

Installiere juhuu:


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

Module installieren, damit die Touchbar funktioniert:


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

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

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

Installieren von Kernelmodulen für die Tastatur. Im Repository anuali1 Es gibt ein fertiges Paket, das heißt apple-bce-dkms-git. Um es zu installieren, schreiben Sie in die Konsole:

pacman -S apple-bce-dkms-git

In diesem Fall wird das Kernelmodul aufgerufen Apfel-bce. Im Falle der Selbstorganisation spricht man von BCE. Wenn Sie also ein Modul im Abschnitt MODULES der Datei mkinicpio.conf registrieren möchten, vergessen Sie nicht, welches Modul Sie installiert haben.

Manuelle Montage:


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 bce- oder apple-bce-Modul zum Start hinzu: /etc/modules-load.d/bce.conf

bce

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

options apple-ib-tb fnmode=2

Aktualisieren des Kernels und der Initramfs.


mkinitcpio -p linux-mbp

iwd installieren:

sudo pacman -S networkmanager iwd

5. Lader

Sobald alle Hauptpakete in der Chroot installiert sind, können Sie mit der Installation des Bootloaders beginnen.

Es ist mir nicht gelungen, Grub zum Laufen zu bringen. Grub bootet von einem externen USB-Laufwerk, aber wenn Sie versuchen, es in nvme über zu registrieren

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

Das System geriet in eine Kernel-Panik und nach dem Neustart wurde über die Optionen kein neues Element angezeigt. Ich habe keine eindeutige Lösung für dieses Problem gefunden und habe mich daher entschlossen, zu versuchen, das Booten mit systemd-boot zu implementieren.

  1. Rennen
    bootctl --path=/boot install

    und wir geraten in Kernel-Panik. Schalten Sie das MacBook aus, schalten Sie es wieder ein, klicken Sie auf Optionen (schalten Sie den USB-C-Hub mit Tastatur nicht aus).

  2. Wir prüfen, ob zusätzlich zum externen Gerät ein neuer EFI BOOT-Eintrag erschienen ist
  3. Wir wählen, wie bei der ersten Installation, von einem externen USB-Laufwerk zu booten (vergessen Sie nicht, module_blacklist=thunderbolt anzugeben).
  4. Wir mounten unsere Festplatte und gehen per Arch-Chroot in die Umgebung


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

Wenn es notwendig ist, dass die Tastatur funktioniert, bis das System vollständig geladen ist (dies ist bei Verwendung der luks/dm-crypt-Verschlüsselung erforderlich), dann schreiben Sie es in die Datei /etc/mkinicpio.conf im Abschnitt MODULES:

MODULES=(ext4 applespi intel_lpss_pci spi_pxa2xx_platform bce)

Aktualisieren des Kernels und der Initramfs.


mkinicpio -p linux-mbp

Systemd-Boot einrichten

Wir bearbeiten die Datei /boot/loader/loader.conf, löschen alles darin und fügen Folgendes hinzu:

default arch
timeout 5
editor 1

Gehen Sie zum Ordner /boot/loader/entries, erstellen Sie die Datei arch.conf und schreiben Sie:

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

Wenn Sie luks und lvm verwendet haben, dann

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

Starten Sie MacOS neu.

6. WLAN-Einrichtung

Wie sich am Ende herausstellte, speichert MacOS die Firmware-Dateien für den WLAN-Adapter in dem Ordner /usr/share/firmware/wifi , und Sie können sie von dort in Form von Blobs übernehmen und sie dem brcmfmac-Kernelmodul zuführen. Um herauszufinden, welche Dateien Ihr Adapter verwendet, öffnen Sie ein Terminal in MacOS und schreiben Sie:

ioreg -l | grep C-4364

Wir bekommen eine lange Liste. Wir benötigen nur Dateien aus dem Abschnitt Angeforderte Dateien:

"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 abweichen. Kopieren Sie sie aus dem Ordner /usr/share/firmware/wifi auf das Flash-Laufwerk und benennen Sie sie wie folgt um:

    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>

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.

Starten Sie Arch neu.

Kopieren Sie die Dateien vom Flash-Laufwerk 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/

Überprüfung der Funktionalität des Moduls:


rmmod brcmfmac
modprobe brcmfmac

Wir stellen sicher, dass die Netzwerkschnittstelle über ifconfig/ip angezeigt wird.
WLAN einrichten über iwctl

Aufmerksamkeit. Über netctl, nmcli usw. Die Schnittstelle funktioniert nicht, nur über iwd.

Wir zwingen NetworkManager, iwd zu verwenden. Erstellen Sie dazu die Datei /etc/NetworkManager/NetworkManager.conf und schreiben Sie:

[device]
wifi.backend=iwd

Starten Sie den NetworkManager-Dienst


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

7. Ton

Damit der Sound funktioniert, müssen Sie Pulseaudio installieren:


sudo pacman -S pulseaudio

Laden Sie drei Dateien herunter:

Verschieben wir 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. Unterbrechen/Fortsetzen

Im Augenblick 16.10.2019 Sie müssen entweder „Ton“ oder „Unterbrechen/Fortsetzen“ wählen. Wir warten darauf, dass der Autor des bce-Moduls die Funktionalität vervollständigt.

Um ein Modul mit Susped/Resume-Unterstützung zu erstellen, müssen Sie Folgendes tun:


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 Apple-BCE-Modul aus dem anuali1-Repository installiert haben, müssen Sie es zuerst entfernen und erst dann das BCE-Modul mit Unterstützung für den Suspend-Modus zusammenstellen und installieren.

Außerdem müssen Sie das applesmc-Modul zur Blacklist hinzufügen (falls Sie dies noch nicht getan haben) und sicherstellen, dass in /boot/loader/entries/arch.conf in der Optionszeile am Ende der Parameter hinzugefügt wird pcie_ports=compat.

Derzeit stürzt der Touchbar-Treiber ab, wenn er in den Suspend-Modus wechselt, und der Thunderbolt-Treiber friert das System manchmal für mehr als 30 Sekunden und beim Fortsetzen für mehrere Minuten ein. Dies kann durch automatisches Entladen problematischer Module behoben werden.

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

Machen Sie es ausführbar:

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

Das ist alles für den Moment. Das Ergebnis ist ein vollständig funktionsfähiges System, mit Ausnahme einiger Nuancen bei Suspend/Resume. Während der mehrtägigen Betriebszeit wurden keine Abstürze oder Kernel-Panik beobachtet. Ich hoffe, dass der Autor des bce-Moduls es in naher Zukunft fertigstellt und wir volle Unterstützung für Suspend/Resume und Sound erhalten.

Source: habr.com

Kommentar hinzufügen