Er was behoorlijk wat ophef over het feit dat het door de nieuwe T2-chip onmogelijk was om Linux te installeren op de nieuwe MacBook 2018 met Touch Bar. De tijd verstreek, en tegen het einde van 2019 werden verschillende stuurprogramma's en kernelpatches door externe ontwikkelaars gerealiseerd voor interactie met de T2-chip. De belangrijkste driver voor de MacBook-modellen 2018 en later maakt de werking van VHCI mogelijk (werk van de Touch Bar/toetsenbord/enzovoort), evenals de werking van geluid.
Project is verdeeld in 3 hoofdcomponenten:
- BCE (Buffer Copy Engine) ā stelt de hoofdcommunicatiekanaal met T2 in. VHCI en Audio vereisen deze component.
- VHCI ā is een virtuele hostcontroller voor USB; het toetsenbord, de muis en andere systeemcomponenten worden door deze component geleverd (andere stuurprogramma's gebruiken deze hostcontroller om meer functionaliteit te bieden).
- Audio ā stuurprogramma voor de audio-interface van T2, momenteel wordt alleen geluid via de ingebouwde luidsprekers van de MacBook ondersteund.
Het tweede project heet , en het implementeert de mogelijkheid tot het functioneren van de invoerstuurprogramma voor het toetsenbord, de trackpad SPI, de Touch Bar voor de MacBook Pro uit eind 2016 en later. Een deel van de stuurprogramma's voor het toetsenbord/trackpad is nu opgenomen in de kernel, beginnend met versie 5.3.
Ook is ondersteuning toegevoegd voor apparaten zoals wifi, trackpad, enzetera, met behulp van kernelpatches. Op dit moment is de kernelversie
Wat momenteel werkt
- NVMe
- Toetsenbord
- USB-C (Thunderbolt niet getest, bij automatisch laden van de module bevriest het systeem compleet)
- Touch Bar (met mogelijkheid om Fn-toetsen in te schakelen, verlichting, ESC enzovoort)
- Geluid (alleen ingebouwde luidsprekers)
- Wifi-module (via brcmfmac en alleen via iw)
- DisplayPort via USB-C
- Sensoren
- Slaap/Herstel (gedeeltelijk)
- enzovoort..
Deze tutorial is van toepassing op macbookpro15,1 en macbookpro15,2. De basis was een artikel op GitHub in het Engels . Niet alles uit dit artikel werkte, dus ik moest zelf naar een oplossing zoeken.
Wat nodig is voor de installatie
- USB-C dockingadapter naar USB (minimaal drie USB-ingangen voor aansluiting van muis, toetsenbord, usb-modem of telefoon in tethering-modus). Dit is alleen nodig in de eerste fasen van de installatie.
- USB-toetsenbord
- USB/USB-C flashdrive minimaal 4GB
1. Schakel de blokkering van opstarten vanaf externe schijven uit
2. Maak ruimte vrij met behulp van Schijfhulpprogramma
Voor het gemak heb ik onmiddellijk 30GB op de schijf toegewezen, het formaterend in exfat in het Schijfhulpprogramma. .
3. Maak een iso-afbeelding
Opties:
- Je kunt de eenvoudige weg kiezen en een kant-en-klare afbeelding downloaden met de kernel 5.3.5-1 en patches van
- Maak zelf een afbeelding met archlive (een systeem met de Arch-distributie is nodig)
Instellen
pacman -S archisocp -r /usr/share/archiso/configs/releng/ archlive cd archliveVoeg de repository toe aan pacman.conf:
[mbp] Server = https://packages.aunali1.com/archlinux/$repo/$archNegeer de originele kernel in pacman.conf:
IgnorePkg = linux linux-headersVoeg de benodigde pakketten toe, voeg aan het einde de linux-mbp en linux-mbp-headers kernel toe
... wvdial xl2tpd linux-mbp linux-mbp-headersWijzig het script voor gebruik in interactieve modus (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!" }Maak de afbeelding:
sudo ./build.sh -vDruk op Y om de genegeerde pakketten over te slaan en schrijf vervolgens de iso-afbeelding naar een usb-stick:
sudo dd if=out/archlinux*.iso of=/dev/sdb bs=1M
4. Eerste opstart
Herstart met de usb-stick en het toetsenbord aangesloten. Druk op opties wanneer het Apple-logo verschijnt, kies EFI BOOT.
Druk vervolgens op de toets "e" en voer aan het einde van de opdrachtregel in module_blacklist=thunderbolt. Als je dit niet doet, kan het systeem niet opstarten en krijg je de Thunderbolt ICM Error.
Gebruik fdisk/cfdisk om onze partitie te vinden (in mijn geval is dit nvme0n1p4), formatteer en installeer Arch. Je kunt de of .
We creƫren geen opstartpartitie, de bootloader zullen we schrijven naar /dev/nvme0n1p1
Nadat de omgeving volledig is opgebouwd in /mnt en voordat we naar arch-chroot gaan, schrijven we:
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
Installeer de kernel:
sudo pacman -S linux-mbp linux-mbp-headers
sudo mkinitcpio -p linux-mbp
Voeg thunderbolt en applesmc toe aan /etc/modprobe.d/blacklist.conf
blacklist thunderbolt
blacklist applesmc
Toetsenbord, touchbar, enz.
Installeer yay:
sudo pacman -S git gcc make fakeroot binutils
git clone https://aur.archlinux.org/yay.git
cd yay
makepkg -si
Installeer de modules voor de werking van de touchbar:
git clone --branch mbp15 https://github.com/roadrunner2/macbook12-spi-driver.git
cd macbook12-spi-driver
make install
Voeg de modules toe aan autostart: /etc/modules-load.d/apple.conf
industrialio_triggered_buffer
apple-ibridge
apple-ib-tb
apple-ib-als
Installeer de kernelmodules voor het toetsenbord. In de repository is er een kant-en-klaar pakket, het heet apple-bce-dkms-git. Om het te installeren, typ dan in de terminal:
pacman -S apple-bce-dkms-gitIn dit geval zal de kernelmodule worden genoemd apple-bce. In geval van zelfbouw wordt het genoemd bce. Dus, als je een module in de sectie MODULES in het bestand mkinicpio.conf wilt opnemen, vergeet dan niet welke module je hebt geĆÆnstalleerd.
Handmatige bouw:
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
Laten we de module bce of apple-bce aan de opstartlijst toevoegen: /etc/modules-load.d/bce.conf
bceAls je de Fn-knoppen standaard wilt gebruiken, schrijf dan in het bestand /etc/modprobe.d/apple-tb.conf:
options apple-ib-tb fnmode=2Werk de kernel en initramfs bij.
mkinitcpio -p linux-mbp
Laten we iwd installeren:
sudo pacman -S networkmanager iwd5. Bootloader
Nadat alle belangrijke pakketten binnen chroot zijn geĆÆnstalleerd, kunnen we beginnen met de installatie van de bootloader.
Ik heb het niet voor elkaar gekregen om grub aan de praat te krijgen. Grub start vanaf een externe usb-schijf, maar bij het proberen om het in nvme te installeren via
grub-install ātarget=x86_64-efi āefi-directory=/boot ābootloader-id=grub
systeem viel in een kernel panic, en na herstart verscheen er geen nieuw item via options. Ik heb geen duidelijke oplossing voor dit probleem gevonden, dus besloot ik om de opstart met systemd-boot te proberen.
- We starten
bootctl --path=/boot installen we vallen in kernel panic. Schakel MacBook uit, zet het opnieuw aan, druk op options (de usb-c hub met toetsenbord niet loskoppelen)
- Controleer of er een nieuwe EFI BOOT-entry is toegevoegd naast het externe apparaat
- Kies opstarten vanaf de externe usb-schijf, zoals bij de eerste installatie (vergeet niet module_blacklist=thunderbolt op te geven)
- Monteer onze schijf en ga naar de omgeving via arch-chroot.
mount /dev/nvme0n1p4 /mnt
mount /dev/nvme0n1p1 /mnt/boot
arch-chroot /mnt
Als je wilt dat het toetsenbord werkt voor de volledige opstart van het systeem (wat nodig is bij gebruik van versleuteling luks/dm-crypt), schrijf dan in het bestand /etc/mkinicpio.conf in het sectie MODULES:
MODULES=(ext4 applespi intel_lpss_pci spi_pxa2xx_platform bce)
Werk de kernel en initramfs bij.
mkinicpio -p linux-mbp
Stel systemd-boot in
Bewerk het bestand /boot/loader/loader.conf, verwijder alles wat erin staat, en voeg het volgende toe:
default arch
timeout 5
editor 1
Ga naar de map /boot/loader/entries, maak een bestand arch.conf en schrijf:
titel arch
linux /vmlinuz-linux-mbp
initrd /initramfs-linux-mbp.img
opties root=/dev/<b>nvme0n1p4</b> rw pcie_ports=compat
Als je luks en lvm hebt gebruikt, dan
opties cryptdevice=\/dev\/<b>nvme0n1p4</b>:luks root=\/dev\/mapper\/vz0-root rw pcie_ports=compat
Herstart naar MacOS.
6. Wifi-instelling
Zoals bleek, slaat MacOS de firmwarebestanden voor de wifi-adapter op in de map /usr/share/firmware/wifi , en men kan deze daar in de vorm van blobs halen en aan de kernelmodule brcmfmac geven. Om te ontdekken welke bestanden je adapter gebruikt, open je de terminal in MacOS en typ je:
ioreg -l | grep C-4364We krijgen een lange lijst. We hebben alleen de bestanden nodig uit de sectie 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 uw geval kunnen de bestandsnamen verschillen. We kopiƫren ze van de map /usr/share/firmware/wifi naar de USB-stick en hernoemen ze als volgt:
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 dit geval bevat het laatste tekstbestand de modelnamen; als uw model niet macbookpro15,2 is, moet u dit bestand hernoemen volgens uw macbookmodel.
We starten opnieuw op in Arch.
We kopiƫren de bestanden van de USB-stick naar de map /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/
We controleren of de module werkt:
rmmod brcmfmac
modprobe brcmfmac
We zorgen ervoor dat het netwerkinterface verschijnt via ifconfig/ip.
We configureren wifi via
Let op. Via netctl, nmcli, enz. werkt de interface niet, alleen via iwd.
We dwingen NetworkManager om iwd te gebruiken. Hiervoor maken we een bestand aan in /etc/NetworkManager/NetworkManager.conf en schrijven:
[device]
wifi.backend=iwd
We starten de NetworkManager-service
sudo systemctl start NetworkManager.service
sudo systemctl enable NetworkManager.service
7. Geluid
Om geluid te laten werken, moet pulseaudio worden geĆÆnstalleerd:
sudo pacman -S pulseaudio
We downloaden drie bestanden:
We verplaatsen ze:
/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. Suspend/Resume
Op dit moment 16.10.2019 moeten we kiezen tussen geluid of suspend/resume. We wachten tot de auteur van de bce-module de functionaliteit heeft voltooid.
Om de module met ondersteuning voor suspend/resume te bouwen, moet u het volgende uitvoeren:
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 repository anuali1 heeft geĆÆnstalleerd, moet u deze eerst verwijderen en pas daarna de bce-module met ondersteuning voor suspend-modus bouwen en installeren.
Daarnaast moet u de applesmc-module aan de blacklist toevoegen (als u dat nog niet eerder heeft gedaan) en ervoor zorgen dat de parameter pcie_ports=compat.
Op dit moment crasht de touchbar-driver bij het ingaan van de suspend-modus, terwijl de thunderbolt-driver het systeem soms langer dan 30 seconden vastzet, en bij het hervatten - enkele minuten. Dit kan worden opgelost door problematische modules automatisch te unloaden.
Maak een script aan /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
Maak het uitvoerbaar:
sudo chmod +x /lib/systemd/system-sleep/rmmod.sh Tot nu toe is dat alles. Uiteindelijk is er een vrij functioneel systeem ontstaan, met uitzondering van enkele nuances met suspend/resume. Er zijn de afgelopen dagen geen crashes of kernel panics waargenomen. Ik hoop dat de auteur van de bce-module dit snel afmaakt, zodat we volledige ondersteuning voor suspend/resume en geluid krijgen.
Bron: habr.com
