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

Es gab viel Aufregung darüber, dass es aufgrund des neuen T2-Chips unmöglich sei, Linux auf den neuen MacBook-Modellen 2018 mit Touch Bar zu installieren. Mit der Zeit haben Drittentwickler gegen Ende 2019 eine Reihe von Treibern und Kernel-Patches entwickelt, um mit dem T2-Chip zu interagieren. Der Haupttreiber für MacBook-Modelle 2018 und neuer unterstützt den Betrieb von VHCI (Touch, Tastatur usw.) sowie die Audiofunktionen.

Projekt mbp2018-bridge-drv unterteilt in 3 Hauptkomponenten:

  • BCE (Buffer Copy Engine) – richtet den Hauptkommunikationskanal mit T2 ein. VHCI und Audio benötigen diese Komponente.
  • VHCI ist ein virtueller Hostcontroller für USB; Tastatur, Maus und andere Systemkomponenten werden von diesem Modul bereitgestellt (andere Treiber verwenden diesen Hostcontroller, um erweiterte Funktionalitäten zu bieten).
  • Audio – Treiber für das Audiointerface T2, derzeit wird nur die Audioausgabe über die eingebauten Lautsprecher des MacBook unterstützt.


Das zweite Projekt heißt macbook12-spi-driver, und es wird die Möglichkeit implementiert, mit dem Eingabetreiber für die Tastatur, das SPI-Trackpad und die Touch Bar für das MacBook Pro von Ende 2016 und neueren Versionen zu arbeiten. Teile der Treiber für die Tastatur/das Trackpad sind jetzt ab Version 5.3 im Kernel enthalten.

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

Was zurzeit funktioniert

  1. NVMe
  2. Tastatur
  3. USB-C (Thunderbolt wurde nicht getestet, beim automatischen Laden des Moduls friert das System ein)
  4. Touch Bar (mit der Möglichkeit, die Fn-Tasten, die Hintergrundbeleuchtung, ESC usw. zu aktivieren)
  5. Ton (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 anwendbar für macbookpro15,1 und macbookpro15,2. Grundlage war ein Artikel von GitHub auf Englisch hier herunter. 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 für den Anschluss von Maus, Tastatur, USB-Modem oder Telefon im Tethering-Modus). Dies ist nur in den Anfangsphasen der Installation erforderlich.
  • USB-Tastatur
  • USB/USB-C-Flash-Laufwerk mit mindestens 4 GB

1. Deaktivieren Sie die Beschränkung für den Start von externen Medien.

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

2. Erstellen Sie mit dem Festplattendienstprogramm freien Speicherplatz.

Zur Vereinfachung habe ich 30 GB auf die Festplatte reserviert und sie im Festplattendienstprogramm auf exfat formatiert. Partitionierung der physischen Festplatte mit dem Festplattendienstprogramm..

3. ISO-Image erstellen.

Optionen:

  1. Sie können den einfachen Weg wählen und ein fertiges Image mit Kernel 5.3.5-1 und Patches von aunali1 Link zum fertigen Image.
  2. Das Image selbst über archlive erstellen (ein System mit dem Arch-Distribution ist erforderlich).

    Installieren Sie archiso

    pacman -S archiso

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

    Fügen Sie das Repository in der pacman.conf hinzu:

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

    Ignorieren Sie den Originalkernel in der pacman.conf:

    IgnorePkg = linux linux-headers
    

    Fügen Sie die erforderlichen Pakete hinzu und am Ende den Kernel linux-mbp und linux-mbp-headers:

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

    Ändern Sie das Skript für den interaktiven Modus (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!"
    }

    Erstellen Sie das Image:

    sudo ./build.sh -v

    Drücken Sie Y, um die ignorierten Pakete zu überspringen, und schreiben Sie dann das ISO-Image auf einen USB-Stick:

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

4. Erster Start.

Starten Sie mit dem eingesteckten USB-Stick und der Tastatur neu. Drücken Sie die Options-Taste, wenn der Apfel erscheint, und wählen Sie EFI BOOT.

Dann müssen Sie die Taste «e» drücken und ans Ende der Kommandozeile eingeben. module_blacklist=thunderbolt. Wenn dies nicht geschieht, kann das System nicht booten und es tritt ein Thunderbolt ICM Fehler auf.

Mit fdisk/cfdisk finden wir unsere Partition (in meinem Fall nvme0n1p4), formatieren sie und führen die Installation von Arch durch. Man kann die offizielle Anleitung oder dritte Partei.

Wir erstellen keine Bootpartition, der Bootloader wird in /dev/nvme0n1p1
Nachdem die Umgebung in /mnt vollständig erstellt ist und bevor wir zu arch-chroot übergehen, schreiben wir:

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

Fügen Sie in /etc/pacman.conf hinzu:


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

Wir installieren den Kernel:


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

Wir tragen thunderbolt und applesmc in /etc/modprobe.d/blacklist.conf ein

blacklist thunderbolt
blacklist applesmc

Tastatur, Touch Bar, etc.

Wir installieren yay:


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

Wir installieren die Module für die Funktionsfähigkeit der Touch Bar:


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

Wir fügen die Module zum Autostart hinzu: /etc/modules-load.d/apple.conf

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

Wir installieren die Kernel-Module für die Tastatur. Im Repository anuali1 gibt es ein fertiges Paket, das nennt sich apple-bce-dkms-git. Um es zu installieren, geben wir im Terminal ein:

pacman -S apple-bce-dkms-git

In diesem Fall wird das Kernel-Modul genannt apple-bce. Bei einer Eigenkompilierung heißt es bce. Wenn Sie das Modul also in den Abschnitt MODULES der Datei mkinicpio.conf eintragen möchten, denken Sie daran, welches Modul Sie installiert haben.

Manuelle Kompilierung:


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 Autostart-Konfiguration hinzu: /etc/modules-load.d/bce.conf

bce

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

options apple-ib-tb fnmode=2

Aktualisieren Sie den Kernel und initramfs.


mkinitcpio -p linux-mbp

Lassen Sie uns iwd installieren:

sudo pacman -S networkmanager iwd

5. Bootloader

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

Ich konnte grub nicht zum Laufen bringen. Von einem externen USB-Laufwerk bootet grub, aber beim Versuch, es in nvme zu installieren,

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

hatte das System einen Kernel-Panic, und nach dem Neustart erschien der neue Punkt nicht. Eine klare Lösung für dieses Problem habe ich nicht gefunden und habe deshalb entschieden, den Bootvorgang mit systemd-boot zu realisieren.

  1. Starten wir
    bootctl --path=/boot install

    und wir landen im Kernel-Panik. MacBook ausschalten, neu starten, Optionen drücken (USB-C Hub mit Tastatur nicht abziehen)

  2. Überprüfen Sie, dass ein neuer EFI BOOT-Eintrag neben dem externen Gerät erscheint
  3. Wählen Sie den Boot von externem USB-Laufwerk wie bei der ersten Installation (nicht vergessen, module_blacklist=thunderbolt anzugeben)
  4. Mounten Sie unsere Festplatte und wechseln Sie zur Umgebung über arch-chroot


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

Falls erforderlich, dass die Tastatur bis zum vollständigen Systemstart funktioniert (notwendig bei Verwendung von LUKS/DM-Crypt), 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 Sie 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

Gehen Sie zum Ordner /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=kompatibel

Falls LUKS und LVM verwendet wurden, dann

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

Starten Sie neu in MacOS.

6. WLAN-Einrichtung

Wie sich herausstellte, speichert MacOS die Firmware-Dateien für den Wi-Fi-Adapter im Ordner /usr/share/firmware/wifi , und können sie dort als Blobs abrufen und dem brcmfmac-Kernelmodul füttern. Um herauszufinden, welche Dateien Ihr Adapter genau 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 abweichen. Kopieren Sie sie aus dem Verzeichnis /usr/share/firmware/wifi auf einen USB-Stick und benennen Sie sie folgendermaßen 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 in Arch neu.

Kopieren Sie die Dateien vom USB-Stick in das Verzeichnis /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üfen Sie die Funktionsfähigkeit des Moduls:


rmmod brcmfmac
modprobe brcmfmac

Stellen Sie sicher, dass das Netzwerkinterface über ifconfig/ip angezeigt wird.
Konfigurieren Sie das WLAN über iwctl

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

Zwingen Sie den NetworkManager, iwd zu verwenden. Dazu erstellen Sie die Datei /etc/NetworkManager/NetworkManager.conf und schreiben:

[device]
wifi.backend=iwd

Starten Sie den NetworkManager-Dienst


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

7. Audio

Um Audio zu aktivieren, müssen Sie pulseaudio installieren:


sudo pacman -S pulseaudio

Laden Sie drei Dateien herunter:

Verschieben Sie 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. Aussetzen/Wiederherstellen

Aktuell muss man entweder Audio oder Aussetzen/Wiederherstellen wählen. Wir warten darauf, dass der Autor des gesamten Moduls die Funktionalität verbessert. 16.10.2019 Um das Modul mit Unterstützung für Aussetzen/Wiederherstellen 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 vorgefertigte Modul apple-bce aus dem Repository anuali1 installiert haben, müssen Sie es zunächst deinstallieren und danach das bce-Modul mit Unterstützung für den Aussetzmodus erstellen und installieren.

Außerdem müssen Sie das Modul applesmc auf die Blacklist setzen (sofern Sie dies nicht bereits getan haben) und sicherstellen, dass im /boot/loader/entries/arch.conf in der Zeile options am Ende der Parameter hinzugefügt wird:

pcie_ports=compat Derzeit stürzt der Touchbar-Treiber beim Wechsel in den Suspend-Modus ab, während der Thunderbolt-Treiber manchmal das System für mehr als 30 Sekunden anhalten kann und beim Wiederherstellen mehrere Minuten benötigt. Dies kann behoben werden, indem problematische Module automatisch entladen werden..

Erstellen Sie ein Skript

Machen Sie es ausführbar: /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

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

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

Das war es erstmal. Insgesamt ergibt sich ein funktionales System, abgesehen von ein paar Nuancen mit suspend/resume. In den letzten Tagen gab es keinen Absturz oder Kernel-Panic bei mehreren Tagen Uptime. Ich hoffe, dass der Autor des Moduls bce bald nachbessert, damit wir vollständige Unterstützung für suspend/resume und Sound erhalten.

Quelle: habr.com

Kaufen Sie zuverlässiges Hosting für Websites mit DDoS-Schutz, VPS VDS-Server 🔥 Kaufen Sie zuverlässiges Hosting für Websites mit DDoS-Schutz, VPS VDS-Server | ProHoster