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 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 , 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
Was derzeit funktioniert
- NVMe
- Tastatur
- USB-C (Thunderbolt wurde nicht getestet, beim automatischen Laden des Moduls hängt das System fest)
- Touch Bar (mit der Möglichkeit, die Fn-Tasten einzuschalten, Hintergrundbeleuchtung, ESC usw.)
- Audio (nur integrierte Lautsprecher)
- Wi-Fi-Modul (über brcmfmac und nur über iw)
- DisplayPort über USB-C
- Sensoren
- Suspend/Resume (teilweise)
- usw..
Dieses Tutorial ist für macbookpro15,1 und macbookpro15,2 anwendbar. Grundlage war ein Artikel auf GitHub in Englisch, . 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
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. .
3. Erstellen eines ISO-Images
Optionen:
- Man kann den einfachen Weg wählen und ein fertiges Image mit Kernel 5.3.5-1 und Patches von
- Bild selbstständig über archlive erstellen (ein System mit der Arch-Distribution ist erforderlich)
Installation
pacman -S archisocp -r /usr/share/archiso/configs/releng/ archlive cd archliveRepository in pacman.conf hinzufügen:
[mbp] Server = https://packages.aunali1.com/archlinux/$repo/$archOriginalkernel in pacman.conf ignorieren:
IgnorePkg = linux linux-headersBenötigte Pakete hinzufügen, am Ende den Kernel linux-mbp und linux-mbp-headers hinzufügen
... wvdial xl2tpd linux-mbp linux-mbp-headersSkript 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 -vY 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 oder .
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 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-gitIn 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
bceWenn 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=2Aktualisieren Sie den Kernel und initramfs.
mkinitcpio -p linux-mbp
Installieren wir iwd:
sudo pacman -S networkmanager iwd5. 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.
- Starten
bootctl --path=/boot installierenund 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)
- Wir überprüfen, ob ein neuer Eintrag EFI BOOT zusätzlich zu dem externen Gerät erschienen ist.
- Wählen Sie das Booten von einem externen USB-Laufwerk, wie bei der ersten Installation (vergessen Sie nicht, module_blacklist=thunderbolt einzutragen)
- 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-4364Wir 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 -> 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.
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
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.rules8. 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
