MacBook Pro 2018 T2 laten werken met ArchLinux (dualboot)
Er is nogal wat hype geweest over het feit dat de nieuwe T2-chip het onmogelijk zal maken om Linux te installeren op de nieuwe MacBooks uit 2018 met een touchbar. De tijd verstreek en eind 2019 implementeerden externe ontwikkelaars een aantal stuurprogramma's en kernelpatches voor interactie met de T2-chip. De belangrijkste driver voor MacBook-modellen 2018 en nieuwer implementeert VHCI-bediening (bediening via aanraking/toetsenbord/etc.), evenals geluidsbediening.
BCE (Buffer Copy Engine) - brengt het hoofdcommunicatiekanaal met T2 tot stand. Voor VHCI en Audio is dit onderdeel vereist.
VHCI is een virtuele USB-hostcontroller; het toetsenbord, de muis en andere systeemcomponenten worden door dit onderdeel geleverd (andere stuurprogramma's gebruiken deze hostcontroller om meer functionaliteit te bieden.
Audio - driver voor de T2-audio-interface, ondersteunt momenteel alleen audio-uitvoer via de ingebouwde luidsprekers van de MacBook
Het tweede project heet macbook12-spi-stuurprogramma, en het implementeert de mogelijkheid om een invoerstuurprogramma te gebruiken voor het toetsenbord, het SPI-trackpad en de touchbar voor MacBook Pro's van eind 2016 en later. Sommige toetsenbord-/trackpadstuurprogramma's zijn nu in de kernel opgenomen, te beginnen met versie 5.3.
Ondersteuning voor apparaten zoals wifi, touchpad, enz. werd ook geïmplementeerd met behulp van kernelpatches. Huidige kernelversie5.3.5-1
Wat werkt op dit moment
NVMe
toetsenbord
USB-C (Thunderbolt is niet getest; wanneer de module automatisch wordt geladen, loopt het systeem vast)
Touchbar (met de mogelijkheid om de Fn-toetsen, achtergrondverlichting, ESC, enz. in te schakelen)
Geluid (alleen ingebouwde luidsprekers)
Wi-Fi-module (via brcmfmac en alleen via iw)
DisplayPort via USB-C
Sensoren
Onderbreken/hervatten (gedeeltelijk)
enz..
Deze tutorial is van toepassing op macbookpro15,1 en macbookpro15,2. Het artikel is als basis overgenomen van Github in het Engels. vandaar. Niet alles in dit artikel werkte, dus ik moest zelf een oplossing vinden.
Wat je nodig hebt voor de installatie
USB-C dockingadapter naar USB (minstens drie USB-ingangen voor het aansluiten van een muis, toetsenbord, USB-modem of telefoon in tetheringmodus). Dit is alleen nodig tijdens de eerste fasen van de installatie
USB-toetsenbord
USB/USB-C-flashdrive minimaal 4 GB
1. Schakel het verbod op het opstarten vanaf externe media uit
cp -r /usr/share/archiso/configs/releng/ archlive
cd archlive
Voeg de repository toe aan pacman.conf:
[mbp]
Server = https://packages.aunali1.com/archlinux/$repo/$arch
We negeren de originele kernel in pacman.conf:
IgnorePkg = linux linux-headers
Voeg de benodigde pakketten toe, voeg aan het einde de linux-mbp kernel en linux-mbp-headers toe
...
wvdial
xl2tpd
linux-mbp
linux-mbp-headers
We veranderen het script zodat het in de interactieve modus werkt (vervang pacstrap -C door 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!"
}
Een beeld vormen:
sudo ./build.sh -v
Druk op Y om genegeerde pakketten over te slaan en schrijf vervolgens de ISO-image naar de USB-flashdrive:
sudo dd if=out/archlinux*.iso of=/dev/sdb bs=1M
4. Eerste keer opstarten
Start opnieuw op met de flashdrive en het toetsenbord geplaatst. Druk op opties wanneer de appel verschijnt, selecteer EFI BOOT.
Vervolgens moet u op de toets "e" drukken en aan het einde van de opdrachtregel invoeren module_blacklist=bliksemschicht. Als u dit niet doet, start het systeem mogelijk niet op en verschijnt er een Thunderbolt ICM-fout.
Met fdisk/cfdisk vinden we onze partitie (voor mij is het nvme0n1p4), formatteren we deze en installeren we het archief. Je kunt gebruiken officiële instructie of zijwaarts.
We maken geen opstartpartitie; we schrijven de bootloader erin /dev/nvme0n1p1
Nadat de omgeving in /mnt volledig is gevormd en voordat u naar arch-chroot gaat, schrijft u:
mount /dev/nvme0n1p1 /mnt/boot
arch-chroot /mnt /bin/bash
Voeg toe aan /etc/pacman.conf:
[mbp]
Server = https://packages.aunali1.com/archlinux/$repo/$arch
Kernelmodules voor het toetsenbord installeren. In de repository jaarlijks1 er is een kant-en-klaar pakket, dat heet apple-bce-dkms-git. Om het te installeren, schrijft u in de console:
pacman -S apple-bce-dkms-git
In dit geval wordt de kernelmodule aangeroepen appel-bce. In het geval van zelfmontage wordt dit genoemd bce. Als u dus een module wilt registreren in de MODULES-sectie van het mkinicpio.conf-bestand, vergeet dan niet welke module u hebt geïnstalleerd.
Handmatige 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
Voeg de bce- of apple-bce-module toe aan het opstarten: /etc/modules-load.d/bce.conf
bce
Als je standaard de Fn-knoppen wilt gebruiken, schrijf dan in het bestand /etc/modprobe.d/apple-tb.conf:
options apple-ib-tb fnmode=2
De kernel en initramfs bijwerken.
mkinitcpio -p linux-mbp
Installeer iwd:
sudo pacman -S networkmanager iwd
5. Lader
Zodra alle hoofdpakketten in de chroot zijn geïnstalleerd, kunt u beginnen met het installeren van de bootloader.
Het is mij niet gelukt om grub aan het werk te krijgen. Grub start op vanaf een externe USB-drive, maar wanneer u het probeert te registreren in nvme via
het systeem raakte in kernelpanic en na het opnieuw opstarten verscheen er geen nieuw item via opties. Ik vond geen duidelijke oplossing voor dit probleem en besloot daarom te proberen het opstarten te implementeren met systemd-boot.
Lancering
bootctl --path=/boot install
en we raken in kernelpaniek. Zet de MacBook uit, weer aan, klik op opties (zet de USB-C hub met toetsenbord niet uit)
We controleren of er naast het externe apparaat een nieuwe EFI BOOT-vermelding is verschenen
We selecteren om op te starten vanaf een extern USB-station, zoals tijdens de eerste installatie (vergeet niet module_blacklist=thunderbolt op te geven)
We mounten onze schijf en gaan via arch-chroot de omgeving in
mount /dev/nvme0n1p4 /mnt
mount /dev/nvme0n1p1 /mnt/boot
arch-chroot /mnt
Als het nodig is dat het toetsenbord werkt totdat het systeem volledig is geladen (dit is nodig bij gebruik van luks/dm-crypt-codering), schrijf dit dan in het bestand /etc/mkinicpio.conf in de sectie MODULES:
Uiteindelijk bleek dat MacOS de firmwarebestanden voor de wifi-adapter in de map opslaat /usr/share/firmware/wifi , en je kunt ze van daaruit overnemen in de vorm van blobs en ze naar de brcmfmac-kernelmodule sturen. Om erachter te komen welke bestanden uw adapter gebruikt, opent u een terminal in MacOS en schrijft u:
ioreg -l | grep C-4364
We krijgen een lange lijst. We hebben alleen bestanden uit de sectie nodig Aangevraagde bestanden:
In dit geval bevat het laatste tekstbestand de modelnamen; als uw model niet macbookpro 15,2 is, moet u dit bestand hernoemen in overeenstemming met uw MacBook-model.
Start opnieuw op in Arch.
Kopieer de bestanden van het flashstation naar de map /lib/firmware/brcm/
Op dit moment 16.10.2019 je moet kiezen tussen geluid of onderbreken/hervatten. We wachten tot de auteur van de bce-module de functionaliteit heeft voltooid.
Om een module met ondersteuning voor uitstel/hervatten te bouwen, moet u het volgende doen:
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
Als u de kant-en-klare Apple-bce-module uit de anuali1-repository hebt geïnstalleerd, moet u deze eerst verwijderen en pas daarna de bce-module met ondersteuning voor de slaapstand samenstellen en installeren.
Je moet ook de applesmc-module aan de zwarte lijst toevoegen (als je dit nog niet eerder hebt gedaan) en ervoor zorgen dat in /boot/loader/entries/arch.conf in de optieregel aan het einde de parameter wordt toegevoegd pcie_ports=compatibel.
Momenteel crasht het touchbar-stuurprogramma wanneer het in de slaapstand gaat, en het Thunderbolt-stuurprogramma bevriest het systeem soms gedurende meer dan 30 seconden, en gedurende enkele minuten wanneer het wordt hervat. Dit kan worden verholpen door problematische modules automatisch te verwijderen.
Maak een script /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
Maak het uitvoerbaar:
sudo chmod +x /lib/systemd/system-sleep/rmmod.sh
Dat is het voor nu. Het resultaat is een volledig werkbaar systeem, met uitzondering van enkele nuances bij onderbreken/hervatten. Er zijn geen crashes of kernelpanics waargenomen gedurende meerdere dagen van uptime. Ik hoop dat de auteur van de bce-module het in de nabije toekomst zal afmaken, en dat we volledige ondersteuning zullen krijgen voor onderbreken/hervatten en geluid.