MacBook Pro 2018 T2 aan de praat krijgen met ArchLinux (dualboot)

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 mbp2018-bridge-drv 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 macbook12-spi-driver, 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 5.3.5-1

Wat momenteel werkt

  1. NVMe
  2. Toetsenbord
  3. USB-C (Thunderbolt niet getest, bij automatisch laden van de module bevriest het systeem compleet)
  4. Touch Bar (met mogelijkheid om Fn-toetsen in te schakelen, verlichting, ESC enzovoort)
  5. Geluid (alleen ingebouwde luidsprekers)
  6. Wifi-module (via brcmfmac en alleen via iw)
  7. DisplayPort via USB-C
  8. Sensoren
  9. Slaap/Herstel (gedeeltelijk)
  10. enzovoort..

Deze tutorial is van toepassing op macbookpro15,1 en macbookpro15,2. De basis was een artikel op GitHub in het Engels hier. 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

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

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. Verdelen van de fysieke schijf in partities met Disk Utility.

3. Maak een iso-afbeelding

Opties:

  1. Je kunt de eenvoudige weg kiezen en een kant-en-klare afbeelding downloaden met de kernel 5.3.5-1 en patches van aunali1 link naar kant-en-klare afbeelding
  2. Maak zelf een afbeelding met archlive (een systeem met de Arch-distributie is nodig)

    Instellen archiso

    pacman -S archiso

    
    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
    

    Negeer de originele kernel in pacman.conf:

    IgnorePkg = linux linux-headers
    

    Voeg de benodigde pakketten toe, voeg aan het einde de linux-mbp en linux-mbp-headers kernel toe

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

    Wijzig 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 -v

    Druk 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 officiƫle instructies of derden.

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 anuali1 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-git

In 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

bce

Als je de Fn-knoppen standaard wilt gebruiken, schrijf dan in het bestand /etc/modprobe.d/apple-tb.conf:

options apple-ib-tb fnmode=2

Werk de kernel en initramfs bij.


mkinitcpio -p linux-mbp

Laten we iwd installeren:

sudo pacman -S networkmanager iwd

5. 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.

  1. We starten
    bootctl --path=/boot install

    en we vallen in kernel panic. Schakel MacBook uit, zet het opnieuw aan, druk op options (de usb-c hub met toetsenbord niet loskoppelen)

  2. Controleer of er een nieuwe EFI BOOT-entry is toegevoegd naast het externe apparaat
  3. Kies opstarten vanaf de externe usb-schijf, zoals bij de eerste installatie (vergeet niet module_blacklist=thunderbolt op te geven)
  4. 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-4364

We 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 -&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 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 iwctl

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.rules

8. 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

Koop betrouwbare webhosting met bescherming tegen DDoS, VPS VDS servers šŸ”„ Koop betrouwbare webhosting met bescherming tegen DDoS, VPS VDS servers | ProHoster