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.

Project mbp2018-bridge-drv verdeeld in 3 hoofdcomponenten:

  • 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 kernelversie 5.3.5-1

Wat werkt op dit moment

  1. NVMe
  2. toetsenbord
  3. USB-C (Thunderbolt is niet getest; wanneer de module automatisch wordt geladen, loopt het systeem vast)
  4. Touchbar (met de mogelijkheid om de Fn-toetsen, achtergrondverlichting, ESC, enz. in te schakelen)
  5. Geluid (alleen ingebouwde luidsprekers)
  6. Wi-Fi-module (via brcmfmac en alleen via iw)
  7. DisplayPort via USB-C
  8. Sensoren
  9. Onderbreken/hervatten (gedeeltelijk)
  10. 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

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

2. Wijs vrije ruimte toe met behulp van Schijfhulpprogramma

Voor het gemak heb ik onmiddellijk 30 GB aan de schijf toegewezen en deze in het Schijfhulpprogramma zelf in exfat geformatteerd. Een fysieke schijf partitioneren Schijfhulpprogramma.

3. Maak een ISO-image

opties:

  1. U kunt de eenvoudige route volgen en een kant-en-klare image met kernel 5.3.5-1 en patches downloaden aunali1 link naar de voltooide afbeelding
  2. Maak zelf een image via archlive (een systeem met een Archa distributie is vereist)

    Ingesteld 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
    

    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

Installeer de kernel:


sudo pacman -S linux-mbp linux-mbp-headers
sudo mkinitcpio -p linux-mbp

We registreren bliksemschicht en applesmc in /etc/modprobe.d/blacklist.conf

blacklist thunderbolt
blacklist applesmc

Toetsenbord, touchbar, enz

Installeer ja:


sudo pacman -S git gcc make fakeroot binutils
git clone https://aur.archlinux.org/yay.git
cd yay
makepkg -si

Modules installeren zodat de touchbar werkt:


git clone --branch mbp15 https://github.com/roadrunner2/macbook12-spi-driver.git
cd macbook12-spi-driver
make install

Voeg modules toe aan het opstarten: /etc/modules-load.d/apple.conf

industrialio_triggered_buffer
apple-ibridge
apple-ib-tb
apple-ib-als

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

grub-install --target=x86_64-efi --efi-directory=/boot --bootloader-id=grub

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.

  1. 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)

  2. We controleren of er naast het externe apparaat een nieuwe EFI BOOT-vermelding is verschenen
  3. We selecteren om op te starten vanaf een extern USB-station, zoals tijdens de eerste installatie (vergeet niet module_blacklist=thunderbolt op te geven)
  4. 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:

MODULES=(ext4 applespi intel_lpss_pci spi_pxa2xx_platform bce)

De kernel en initramfs bijwerken.


mkinicpio -p linux-mbp

Systemd-boot instellen

We bewerken het bestand /boot/loader/loader.conf, verwijderen alles daarin en voegen het volgende toe:

default arch
timeout 5
editor 1

Ga naar de map /boot/loader/entries, maak het bestand arch.conf en schrijf:

title arch
linux /vmlinuz-linux-mbp
initrd /initramfs-linux-mbp.img
options root=/dev/<b>nvme0n1p4</b> rw pcie_ports=compat

Als je luks en lvm hebt gebruikt, dan

options cryptdevice=/dev/<b>nvme0n1p4</b>:luks root=/dev/mapper/vz0-root rw pcie_ports=compat

Start opnieuw op in MacOS.

6. Wi-Fi-installatie

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:

"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. Kopieer ze van de map /usr/share/firmware/wifi naar de flashdrive en hernoem 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 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/


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/

De functionaliteit van de module controleren:


rmmod brcmfmac
modprobe brcmfmac

We zorgen ervoor dat de netwerkinterface verschijnt via ifconfig/ip.
Wifi instellen via iwctl

Aandacht. Via netctl, nmcli, etc. De interface werkt niet, alleen via iwd.

We dwingen NetworkManager om iwd te gebruiken. Om dit te doen, maakt u het bestand /etc/NetworkManager/NetworkManager.conf en schrijft u:

[device]
wifi.backend=iwd

Start de NetworkManager-service


sudo systemctl start NetworkManager.service
sudo systemctl enable NetworkManager.service

7. Geluid

Om het geluid te laten werken, moet je pulseaudio installeren:


sudo pacman -S pulseaudio

Download drie bestanden:

Laten we ze verplaatsen:

    /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. Onderbreken/hervatten

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.

Bron: www.habr.com

Voeg een reactie