Fer que MacBook Pro 2018 T2 funcioni amb ArchLinux (arrencada dual)

Hi ha hagut una mica de bombo el fet que el nou xip T2 farà impossible instal·lar Linux als nous MacBook 2018 amb una barra tàctil. Va passar el temps i, a finals del 2019, els desenvolupadors de tercers van implementar una sèrie de controladors i pedaços del nucli per a la interacció amb el xip T2. El controlador principal per als models de MacBook 2018 i posteriors implementa l'operació VHCI (operació tàctil/teclat/etc.), així com l'operació de so.

Projecte mbp2018-bridge-drv dividit en 3 components principals:

  • BCE (Buffer Copy Engine): estableix el canal de comunicació principal amb T2. VHCI i àudio requereixen aquest component.
  • VHCI és un controlador d'amfitrió virtual USB; el teclat, el ratolí i altres components del sistema els proporciona aquest component (altres controladors utilitzen aquest controlador d'amfitrió per oferir més funcionalitat.
  • Àudio: controlador per a la interfície d'àudio T2, actualment només admet la sortida d'àudio a través dels altaveus integrats del MacBook


El segon projecte es diu macbook12-spi-driver, i implementa la capacitat d'utilitzar un controlador d'entrada per al teclat, el trackpad SPI i la barra tàctil per a MacBook Pros de finals de 2016 i posteriors. Alguns controladors de teclat/ trackpad ara s'inclouen al nucli, a partir de la versió 5.3.

El suport per a dispositius com ara wi-fi, touchpad, etc. també es va implementar mitjançant pedaços del nucli. Versió actual del nucli 5.3.5-1

Què està funcionant en aquests moments

  1. NVMe
  2. Teclat
  3. USB-C (Thunderbolt no s'ha provat; quan el mòdul es carrega automàticament, congela el sistema)
  4. Barra tàctil (amb la possibilitat d'activar les tecles Fn, retroil·luminació, ESC, etc.)
  5. So (només altaveus integrats)
  6. Mòdul Wi-Fi (mitjançant brcmfmac i només mitjançant iw)
  7. DisplayPort a través d'USB-C
  8. Sensors
  9. Suspensió/reprèn (parcialment)
  10. etc ..

Aquest tutorial és aplicable a macbookpro15,1 i macbookpro15,2. L'article es va prendre com a base de Github en anglès. per tant. No tot en aquest article va funcionar, així que vaig haver de trobar una solució jo mateix.

El que necessiteu per a la instal·lació

  • Adaptador d'acoblament USB-C a USB (almenys tres entrades USB per connectar un ratolí, teclat, mòdem USB o telèfon en mode de connexió). Això només és necessari durant les primeres etapes d'instal·lació
  • Teclat USB
  • Unitat flash USB/USB-C de 4 GB com a mínim

1. Desactiveu la prohibició d'arrencar des de mitjans externs

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

2. Assigna espai lliure mitjançant la Utilitat de disc

Per comoditat, vaig assignar immediatament 30 GB al disc, formatant-lo en exfat a la Utilitat de disc. Particionament d'una utilitat de disc físic.

3. Creeu una imatge ISO

Opcions:

  1. Podeu seguir la ruta senzilla i descarregar una imatge ja feta amb el nucli 5.3.5-1 i els pedaços de aunali1 enllaç a la imatge acabada
  2. Creeu una imatge vosaltres mateixos mitjançant archlive (es requereix un sistema amb una distribució Archa)

    Establir archiso

    pacman -S archiso

    
    cp -r /usr/share/archiso/configs/releng/ archlive
    cd archlive
    

    Afegiu el repositori a pacman.conf:

    
    [mbp]
    Server = https://packages.aunali1.com/archlinux/$repo/$arch
    

    Ignorem el nucli original a pacman.conf:

    IgnorePkg   = linux linux-headers
    

    Afegiu els paquets necessaris, al final afegiu el nucli linux-mbp i les capçaleres linux-mbp

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

    Canviem l'script perquè funcioni en mode interactiu (substituïm pacstrap -C per 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!"
    }

    Formació d'una imatge:

    sudo ./build.sh -v

    Premeu Y per ometre els paquets ignorats i, a continuació, escriviu la imatge iso a la unitat flash USB:

    sudo dd if=out/archlinux*.iso of=/dev/sdb bs=1M

4. Primer arrencada

Reinicieu amb la unitat flaix i el teclat inserits. Premeu opcions quan aparegui la poma, seleccioneu EFI BOOT.

A continuació, heu de prémer la tecla "e" i entrar al final de la línia d'ordres module_blacklist=raig. Si això no es fa, és possible que el sistema no arrenqui i apareixerà un error ICM Thunderbolt.

Utilitzant fdisk/cfdisk trobem la nostra partició (per a mi és nvme0n1p4), la formem i instal·lem l'arxiu. Pots fer servir instruccions oficials o de costat.

No estem creant una partició d'arrencada, escriurem el carregador d'arrencada /dev/nvme0n1p1
Després que l'entorn a /mnt estigui completament format i abans de passar a arch-chroot, escriviu:

mount /dev/nvme0n1p1 /mnt/boot
arch-chroot /mnt /bin/bash

Afegeix a /etc/pacman.conf:


[mbp]
Server = https://packages.aunali1.com/archlinux/$repo/$arch

Instal·leu el nucli:


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

Registrem thunderbolt i applesmc a /etc/modprobe.d/blacklist.conf

blacklist thunderbolt
blacklist applesmc

Teclat, barra tàctil, etc

Instal·la jay:


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

Instal·lació de mòduls perquè funcioni la barra tàctil:


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

Afegiu mòduls a l'inici: /etc/modules-load.d/apple.conf

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

Instal·lació de mòduls del nucli per al teclat. Al repositori anuali1 hi ha un paquet ja fet, es diu apple-bce-dkms-git. Per instal·lar-lo, escriviu a la consola:

pacman -S apple-bce-dkms-git

En aquest cas, es cridarà el mòdul del nucli poma-bce. En el cas de l'automuntatge, es diu bce. En conseqüència, si voleu registrar un mòdul a la secció MÒDULS del fitxer mkinicpio.conf, no oblideu quin mòdul heu instal·lat.

Muntatge manual:


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

Afegiu el mòdul bce o apple-bce a l'inici: /etc/modules-load.d/bce.conf

bce

Si voleu utilitzar els botons Fn de manera predeterminada, escriviu al fitxer /etc/modprobe.d/apple-tb.conf:

options apple-ib-tb fnmode=2

Actualització del nucli i initramfs.


mkinitcpio -p linux-mbp

Instal·leu iwd:

sudo pacman -S networkmanager iwd

5. Carregador

Un cop instal·lats tots els paquets principals dins del chroot, podeu començar a instal·lar el carregador d'arrencada.

No he pogut posar el grub a treballar. Grub arrenca des d'una unitat USB externa, però quan intenteu registrar-lo a nvme via

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

el sistema va entrar en pànic del nucli i, després de reiniciar, no va aparèixer un nou element mitjançant opcions. No vaig trobar cap solució clara a aquest problema i, per tant, vaig decidir intentar implementar l'arrencada mitjançant systemd-boot.

  1. Llançament
    bootctl --path=/boot install

    i entrem en pànic del nucli. Apagueu el MacBook, torneu-lo a encendre, feu clic a opcions (no apagueu el concentrador USB-C amb el teclat)

  2. Comprovem que ha aparegut una nova entrada EFI BOOT a més del dispositiu extern
  3. Seleccionem arrencar des d'una unitat USB externa, com durant la primera instal·lació (no us oblideu d'especificar module_blacklist=thunderbolt)
  4. Muntem el nostre disc i entrem a l'entorn mitjançant arch-chroot


mount /dev/nvme0n1p4 /mnt
mount /dev/nvme0n1p1 /mnt/boot
arch-chroot /mnt

Si és necessari que el teclat funcioni fins que el sistema estigui completament carregat (això és necessari quan s'utilitza el xifratge luks/dm-crypt), escriu-lo al fitxer /etc/mkinicpio.conf a la secció MÒDULS:

MODULES=(ext4 applespi intel_lpss_pci spi_pxa2xx_platform bce)

Actualització del nucli i initramfs.


mkinicpio -p linux-mbp

Configurant systemd-boot

Editem el fitxer /boot/loader/loader.conf, suprimim tot el que hi ha dins i afegim el següent:

default arch
timeout 5
editor 1

Aneu a la carpeta /boot/loader/entries, creeu el fitxer arch.conf i escriviu:

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

Si heu utilitzat luks i lvm, aleshores

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

Reinicieu a MacOS.

6. Configuració Wi-Fi

Com va resultar al final, MacOS emmagatzema els fitxers de microprogramari per a l'adaptador Wi-Fi a la carpeta /usr/share/firmware/wifi , i podeu agafar-los des d'allà en forma de blobs i alimentar-los al mòdul del nucli brcmfmac. Per esbrinar quins fitxers utilitza el vostre adaptador, obriu un terminal a MacOS i escriviu:

ioreg -l | grep C-4364

Tenim una llarga llista. Només necessitem fitxers de la secció Fitxers sol·licitats:

"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>"})

En el vostre cas, els noms dels fitxers poden ser diferents. Copieu-los de la carpeta /usr/share/firmware/wifi a la unitat flaix i canvieu-los el nom de la següent manera:

    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>

En aquest cas, l'últim fitxer de text conté els noms dels models si el vostre model no és macbookpro15,2, haureu de canviar el nom d'aquest fitxer d'acord amb el vostre model de MacBook.

Reinicieu a Arch.

Copieu els fitxers de la unitat flaix a la carpeta /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/

Comprovació de la funcionalitat del mòdul:


rmmod brcmfmac
modprobe brcmfmac

Ens assegurem que la interfície de xarxa aparegui mitjançant ifconfig/ip.
Configuració de wifi mitjançant iwctl

Atenció. A través de netctl, nmcli, etc. La interfície no funciona, només mitjançant iwd.

Obliguem NetworkManager a utilitzar iwd. Per fer-ho, creeu el fitxer /etc/NetworkManager/NetworkManager.conf i escriviu:

[device]
wifi.backend=iwd

Inicieu el servei NetworkManager


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

7. So

Perquè el so funcioni, cal instal·lar pulseaudio:


sudo pacman -S pulseaudio

Descarrega tres fitxers:

Mou-los:

    /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.Suspendre/Reprendre

En aquest moment 16.10.2019 heu de triar entre so o suspendre/reprendre. Estem esperant que l'autor del mòdul bce completi la funcionalitat.

Per crear un mòdul amb suport suspès/reprend, heu de fer el següent:


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

Si heu instal·lat el mòdul apple-bce preparat des del dipòsit anuali1, primer haureu d'eliminar-lo i només després muntar i instal·lar el mòdul bce amb suport de mode suspès.

A més, heu d'afegir el mòdul applesmc a la llista negra (si no ho heu fet abans) i assegureu-vos que a /boot/loader/entries/arch.conf a la línia d'opcions al final s'afegeix el paràmetre. pcie_ports=compat.

Actualment, el controlador de la barra tàctil es bloqueja en entrar en el mode de suspensió i, de vegades, el controlador del raig congela el sistema durant més de 30 segons i durant diversos minuts quan es reprèn. Això es pot solucionar descarregant automàticament els mòduls problemàtics.

Creeu un guió /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

Fes-lo executable:

sudo chmod +x /lib/systemd/system-sleep/rmmod.sh

Això és tot per ara. El resultat és un sistema completament viable, amb l'excepció d'alguns matisos amb suspensió/reprendre. No es van observar bloquejos ni pànics del nucli durant diversos dies de temps d'activitat. Espero que l'autor del mòdul bce l'acabi en un futur proper i tindrem suport complet per a suspendre/reprendre i so.

Font: www.habr.com

Afegeix comentari