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 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 , 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
Was zurzeit funktioniert
- NVMe
- Tastatur
- USB-C (Thunderbolt wurde nicht getestet, beim automatischen Laden des Moduls friert das System ein)
- Touch Bar (mit der Möglichkeit, die Fn-Tasten, die Hintergrundbeleuchtung, ESC usw. zu aktivieren)
- Ton (nur integrierte Lautsprecher)
- Wi-Fi-Modul (über brcmfmac und nur über iw)
- DisplayPort über USB-C
- Sensoren
- Suspend/Resume (teilweise)
- usw.
Dieses Tutorial ist anwendbar für macbookpro15,1 und macbookpro15,2. Grundlage war ein Artikel von GitHub auf 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 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.
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. .
3. ISO-Image erstellen.
Optionen:
- Sie können den einfachen Weg wählen und ein fertiges Image mit Kernel 5.3.5-1 und Patches von
- Das Image selbst über archlive erstellen (ein System mit dem Arch-Distribution ist erforderlich).
Installieren Sie
pacman -S archisocp -r /usr/share/archiso/configs/releng/ archlive cd archliveFügen Sie das Repository in der pacman.conf hinzu:
[mbp] Server = https://packages.aunali1.com/archlinux/$repo/$archIgnorieren Sie den Originalkernel in der pacman.conf:
IgnorePkg = linux linux-headersFü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 -vDrü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 oder .
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 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-gitIn 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
bceWenn 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=2Aktualisieren Sie den Kernel und initramfs.
mkinitcpio -p linux-mbp
Lassen Sie uns iwd installieren:
sudo pacman -S networkmanager iwd5. 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.
- Starten wir
bootctl --path=/boot installund wir landen im Kernel-Panik. MacBook ausschalten, neu starten, Optionen drücken (USB-C Hub mit Tastatur nicht abziehen)
- Überprüfen Sie, dass ein neuer EFI BOOT-Eintrag neben dem externen Gerät erscheint
- Wählen Sie den Boot von externem USB-Laufwerk wie bei der ersten Installation (nicht vergessen, module_blacklist=thunderbolt anzugeben)
- 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-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 abweichen. Kopieren Sie sie aus dem Verzeichnis /usr/share/firmware/wifi auf einen USB-Stick und benennen Sie sie folgendermaßen 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 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
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.rules8. 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
