Far funzionare MacBook Pro 2018 T2 con ArchLinux (dualboot)

Si è parlato parecchio del fatto che il nuovo chip T2 renderà impossibile l'installazione di Linux sui nuovi MacBook 2018 con touchbar. Il tempo è passato e alla fine del 2019 gli sviluppatori di terze parti hanno implementato una serie di driver e patch del kernel per l'interazione con il chip T2. Il driver principale per i modelli MacBook 2018 e successivi implementa il funzionamento VHCI (funzionamento touch/tastiera/ecc.), nonché il funzionamento audio.

Progetto mbp2018-bridge-drv suddiviso in 3 componenti principali:

  • BCE (Buffer Copy Engine) - stabilisce il canale di comunicazione principale con T2. VHCI e Audio richiedono questo componente.
  • VHCI è un controller host virtuale USB; la tastiera, il mouse e altri componenti del sistema sono forniti da questo componente (altri driver utilizzano questo controller host per fornire più funzionalità.
  • Audio: driver per l'interfaccia audio T2, attualmente supporta solo l'uscita audio tramite gli altoparlanti integrati del MacBook


Il secondo progetto si chiama macbook12-spi-drivere implementa la possibilità di utilizzare un driver di input per tastiera, trackpad SPI e touchbar per MacBook Pro fine 2016 e versioni successive. Alcuni driver di tastiera/trackpad sono ora inclusi nel kernel, a partire dalla versione 5.3.

Anche il supporto per dispositivi come Wi-Fi, touchpad, ecc. è stato implementato utilizzando le patch del kernel. Versione attuale del kernel 5.3.5-1

Cosa funziona in questo momento

  1. NVMe
  2. tastiera
  3. USB-C (Thunderbolt non è stato testato; quando il modulo viene caricato automaticamente, blocca il sistema)
  4. Touchbar (con la possibilità di attivare i tasti Fn, retroilluminazione, ESC, ecc.)
  5. Suono (solo altoparlanti integrati)
  6. Modulo Wi-Fi (tramite brcmfmac e solo tramite iw)
  7. DisplayPort su USB-C
  8. sensori
  9. Sospendi/Riprendi (parzialmente)
  10. eccetera..

Questo tutorial è applicabile a macbookpro15,1 e macbookpro15,2. L'articolo è stato preso come base da Github in inglese. quindi. Non tutto in questo articolo ha funzionato, quindi ho dovuto trovare una soluzione da solo.

Cosa devi installare

  • Adattatore docking da USB-C a USB (almeno tre ingressi USB per il collegamento di mouse, tastiera, modem USB o telefono in modalità tethering). Ciò è necessario solo durante le prime fasi dell'installazione
  • Tastiera USB
  • Unità flash USB/USB-C da almeno 4 GB

1. Disabilitare il divieto di avvio da supporti esterni

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

2. Alloca spazio libero utilizzando Utility Disco

Per comodità, ho immediatamente assegnato 30 GB al disco, formattandolo in exfat nella stessa Utility Disco. Partizionamento di un disco fisico Utilità Disco.

3. Crea un'immagine ISO

opzioni:

  1. Puoi seguire il percorso semplice e scaricare un'immagine già pronta con il kernel 5.3.5-1 e le patch da aunali1 collegamento all'immagine finita
  2. Crea tu stesso un'immagine tramite archlive (è richiesto un sistema con una distribuzione Archa)

    Set archiso

    pacman -S archiso

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

    Aggiungi il repository a pacman.conf:

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

    Ignoriamo il kernel originale in pacman.conf:

    IgnorePkg   = linux linux-headers
    

    Aggiungi i pacchetti necessari, alla fine aggiungi il kernel linux-mbp e gli header linux-mbp

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

    Modifichiamo lo script per farlo funzionare in modalità interattiva (sostituisci pacstrap -C con 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!"
    }

    Formare un'immagine:

    sudo ./build.sh -v

    Premi Y per saltare i pacchetti ignorati, quindi scrivi l'immagine ISO sull'unità flash USB:

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

4. Primo avvio

Riavviare con l'unità flash e la tastiera inserite. Premere opzioni quando viene visualizzata la mela, selezionare EFI BOOT.

Successivamente, è necessario premere il tasto “e” e inserire alla fine della riga di comando module_blacklist=fulmine. In caso contrario, il sistema potrebbe non avviarsi e verrà visualizzato un errore ICM Thunderbolt.

Usando fdisk/cfdisk troviamo la nostra partizione (per me è nvme0n1p4), formattiamola e installiamo l'archivio. Puoi usare istruzione ufficiale o lateralmente.

Non stiamo creando una partizione di avvio; scriveremo il bootloader /dev/nvme0n1p1
Dopo che l'ambiente in /mnt è stato completamente formato e prima di passare ad arch-chroot, scrivere:

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

Aggiungi a /etc/pacman.conf:


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

Installa il kernel:


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

Registriamo Thunderbolt e Applesmc in /etc/modprobe.d/blacklist.conf

blacklist thunderbolt
blacklist applesmc

Tastiera, touchbar, ecc

Installa sì:


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

Installazione dei moduli per il funzionamento della touchbar:


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

Aggiungi moduli all'avvio: /etc/modules-load.d/apple.conf

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

Installazione dei moduli del kernel per la tastiera. Nel deposito annuali1 c'è un pacchetto già pronto, si chiama apple-bce-dkms-git. Per installarlo scrivere nella console:

pacman -S apple-bce-dkms-git

In questo caso, verrà chiamato il modulo del kernel mela-bce. Nel caso dell'autoassemblaggio, si chiama bce. Di conseguenza, se desideri registrare un modulo nella sezione MODULES del file mkinicpio.conf, non dimenticare quale modulo hai installato.

Assemblaggio manuale:


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

Aggiungi il modulo bce o apple-bce all'avvio: /etc/modules-load.d/bce.conf

bce

Se desideri utilizzare i pulsanti Fn per impostazione predefinita, scrivi nel file /etc/modprobe.d/apple-tb.conf:

options apple-ib-tb fnmode=2

Aggiornamento del kernel e initramfs.


mkinitcpio -p linux-mbp

Installa iwd:

sudo pacman -S networkmanager iwd

5. Caricatore

Una volta installati tutti i pacchetti principali all'interno del chroot, puoi iniziare l'installazione del bootloader.

Non sono riuscito a far funzionare grub. Grub si avvia da un'unità USB esterna, ma quando provi a registrarlo in nvme tramite

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

il sistema è andato in panico nel kernel e dopo il riavvio un nuovo elemento tramite le opzioni non è apparso. Non ho trovato alcuna soluzione chiara a questo problema e quindi ho deciso di provare a implementare l'avvio utilizzando systemd-boot.

  1. Lanciamo
    bootctl --path=/boot install

    e andiamo nel panico del kernel. Spegni il MacBook, riaccendilo, fai clic su Opzioni (non spegnere l'hub USB-C con tastiera)

  2. Controlliamo che sia apparsa una nuova voce EFI BOOT oltre al dispositivo esterno
  3. Selezioniamo l'avvio da un'unità USB esterna, come durante la prima installazione (non dimenticare di specificare module_blacklist=thunderbolt)
  4. Montiamo il nostro disco ed entriamo nell'ambiente tramite arch-chroot


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

Se è necessario che la tastiera funzioni finché il sistema non è completamente caricato (questo è necessario quando si utilizza la crittografia luks/dm-crypt), scriverlo nel file /etc/mkinicpio.conf nella sezione MODULES:

MODULES=(ext4 applespi intel_lpss_pci spi_pxa2xx_platform bce)

Aggiornamento del kernel e initramfs.


mkinicpio -p linux-mbp

Configurazione dell'avvio del sistema

Modifichiamo il file /boot/loader/loader.conf, eliminiamo tutto ciò che contiene e aggiungiamo quanto segue:

default arch
timeout 5
editor 1

Andate nella cartella /boot/loader/entries, create il file arch.conf e scrivete:

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

Se hai usato luks e lvm, allora

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

Riavvia in MacOS.

6. Configurazione Wi-Fi

Come si è scoperto alla fine, MacOS memorizza i file del firmware per l'adattatore Wi-Fi nella cartella /usr/condividi/firmware/wifi , e puoi prenderli da lì sotto forma di blob e inserirli nel modulo del kernel brcmfmac. Per scoprire quali file utilizza il tuo adattatore, apri un terminale in macOS e scrivi:

ioreg -l | grep C-4364

Otteniamo una lunga lista. Abbiamo bisogno solo dei file della sezione File richiesti:

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

Nel tuo caso, i nomi dei file potrebbero essere diversi. Copiateli dalla cartella /usr/share/firmware/wifi sulla chiavetta e rinominateli come segue:

    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 questo caso, l'ultimo file di testo contiene i nomi dei modelli; se il tuo modello non è macbookpro15,2, devi rinominare questo file in base al modello del tuo MacBook.

Riavviare in Arch.

Copia i file dall'unità flash nella cartella /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/

Verifica della funzionalità del modulo:


rmmod brcmfmac
modprobe brcmfmac

Ci assicuriamo che l'interfaccia di rete appaia tramite ifconfig/ip.
Configurazione Wi-Fi tramite iwctl

Attenzione. Tramite netctl, nmcli, ecc. L'interfaccia non funziona, solo tramite iwd.

Forziamo NetworkManager a utilizzare iwd. Per fare ciò, crea il file /etc/NetworkManager/NetworkManager.conf e scrivi:

[device]
wifi.backend=iwd

Avvia il servizio NetworkManager


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

7. Suono

Affinché il suono funzioni, è necessario installare Pulseaudio:


sudo pacman -S pulseaudio

Scarica tre file:

Spostiamoli:

    /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. Sospendi/Riprendi

Al momento, 16.10.2019 devi scegliere il suono o sospendere/riprendere. Stiamo aspettando che l'autore del modulo bce completi la funzionalità.

Per creare un modulo con supporto di sospensione/ripresa, è necessario effettuare le seguenti operazioni:


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

Se hai installato il modulo apple-bce già pronto dal repository anuali1, devi prima rimuoverlo e solo successivamente assemblare e installare il modulo bce con supporto per la modalità di sospensione.

Inoltre, devi aggiungere il modulo applesmc alla lista nera (se non l'hai mai fatto prima) e assicurarti che in /boot/loader/entries/arch.conf nella riga delle opzioni alla fine venga aggiunto il parametro porte_pcie=comp.

Attualmente, il driver della touchbar si blocca quando si entra in modalità di sospensione e il driver Thunderbolt a volte blocca il sistema per più di 30 secondi e per diversi minuti quando viene ripreso. Questo può essere risolto scaricando automaticamente i moduli problematici.

Crea una sceneggiatura /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

Rendilo eseguibile:

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

È tutto per ora. Il risultato è un sistema completamente funzionante, ad eccezione di alcune sfumature con sospensione/ripresa. Non sono stati osservati arresti anomali o panico del kernel durante diversi giorni di attività. Spero che nel prossimo futuro l'autore del modulo bce lo finisca e otterremo il pieno supporto per la sospensione/ripresa e l'audio.

Fonte: habr.com

Aggiungi un commento