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.
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 kernel5.3.5-1
Cosa funziona in questo momento
NVMe
tastiera
USB-C (Thunderbolt non è stato testato; quando il modulo viene caricato automaticamente, blocca il sistema)
Touchbar (con la possibilità di attivare i tasti Fn, retroilluminazione, ESC, ecc.)
Suono (solo altoparlanti integrati)
Modulo Wi-Fi (tramite brcmfmac e solo tramite iw)
DisplayPort su USB-C
sensori
Sospendi/Riprendi (parzialmente)
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
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
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
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.
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)
Controlliamo che sia apparsa una nuova voce EFI BOOT oltre al dispositivo esterno
Selezioniamo l'avvio da un'unità USB esterna, come durante la prima installazione (non dimenticare di specificare module_blacklist=thunderbolt)
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:
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:
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/
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.