C'è stata molta discussione riguardo al fatto che, a causa del nuovo chip T2, non sia possibile installare Linux sui nuovi MacBook del 2018 con Touch Bar. Con il passare del tempo, alla fine del 2019, sono stati realizzati da sviluppatori esterni diversi driver e patch del kernel per interagire con il chip T2. Il driver principale per i modelli di MacBook 2018 e più recenti implementa il funzionamento di VHCI (funzioni del touch/pad della tastiera/ecc.), così come il funzionamento dell'audio.
Progetto si compone di 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; tastiera, mouse e altri componenti del sistema sono forniti da questo componente (altri driver utilizzano questo controller host per garantire maggiori 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 , e implementa la possibilità di funzionamento del driver di input per la tastiera, il trackpad SPI, la Touch Bar per MacBook Pro della fine del 2016 e versioni più recenti. Parte dei driver per tastiera/trackpad è ora inclusa nel kernel, a partire dalla versione 5.3.
È stata anche implementata la compatibilità con dispositivi come wi-fi, touchpad, ecc., tramite patch del kernel. Attualmente la versione del kernel
Cosa funziona attualmente
- NVMe
- Tastiera
- USB-C (Thunderbolt non è stato testato, il caricamento automatico del modulo blocca completamente il sistema)
- Touch Bar (con possibilità di attivare i tasti Fn, retroilluminazione, ESC ecc.)
- Audio (solo altoparlanti integrati)
- Modulo Wi-Fi (attraverso brcmfmac e solo tramite iw)
- DisplayPort tramite USB-C
- Sensori
- Suspend/Resume (parziale)
- ecc..
Questo tutorial è applicabile per macbookpro15,1 e macbookpro15,2. Si basa su un articolo di GitHub in inglese . Non tutto ciò che era descritto in questo articolo ha funzionato, quindi è stato necessario cercare una soluzione da soli.
Cosa occorre per l'installazione
- Un adattatore dock USB-C a USB (almeno tre porte USB per collegare il mouse, la tastiera, il modem USB o il telefono in modalità tethering). Questo è richiesto solo nelle prime fasi dell'installazione.
- Tastiera USB
- Chiavetta USB/USB-C di almeno 4GB
1. Disattivare il divieto di avvio da dispositivi esterni
2. Allocare spazio libero utilizzando Utility Disco
Per comodità, ho subito allocato 30GB sul disco, formattandolo in exfat tramite Utility Disco. .
3. Creiamo un'immagine iso
Opzioni:
- Si può seguire un percorso semplice e scaricare un'immagine pronta con il kernel 5.3.5-1 e le patch di
- Creare l'immagine manualmente tramite archlive (è necessario un sistema con la distribuzione Arch)
Installiamo
pacman -S archisocp -r /usr/share/archiso/configs/releng/ archlive cd archliveAggiungiamo il repository in pacman.conf:
[mbp] Server = https://packages.aunali1.com/archlinux/$repo/$archIgnoriamo il kernel originale in pacman.conf:
IgnorePkg = linux linux-headersAggiungiamo i pacchetti necessari, in fondo aggiungiamo il kernel linux-mbp e linux-mbp-headers
... wvdial xl2tpd linux-mbp linux-mbp-headersModifichiamo lo script per lavorare in modalità interattiva (sostituendo 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!" }Creiamo l'immagine:
sudo ./build.sh -vClicchiamo Y per saltare i pacchetti ignorati, poi scriviamo l'immagine iso su una chiavetta usb:
sudo dd if=out/archlinux*.iso of=/dev/sdb bs=1M
4. Prima accensione
Riavviamo con la chiavetta inserita e la tastiera. Premiamo opzioni quando appare la mela, selezioniamo EFI BOOT.
Poi dobbiamo premere il tasto «e» e scrivere alla fine della linea di comando module_blacklist=thunderbolt. Se non lo facciamo, il sistema potrebbe non avviarsi, e comparirà un errore Thunderbolt ICM.
Utilizzando fdisk/cfdisk troviamo la nostra partizione (nel mio caso si tratta di nvme0n1p4), formattiamo e procederemo all'installazione di Arch. Possiamo fare riferimento alla o .
Non creiamo la partizione di avvio, installeremo il bootloader in /dev/nvme0n1p1
Una volta che l'ambiente in /mnt è completamente creato e prima di passare a arch-chroot, scriviamo:
mount /dev/nvme0n1p1 /mnt/boot
arch-chroot /mnt /bin/bash
Aggiungiamo in /etc/pacman.conf:
[mbp]
Server = https://packages.aunali1.com/archlinux/$repo/$arch
Installiamo il kernel:
sudo pacman -S linux-mbp linux-mbp-headers
sudo mkinitcpio -p linux-mbp
Scriviamo thunderbolt e applesmc in /etc/modprobe.d/blacklist.conf
blacklist thunderbolt
blacklist applesmc
Tastiera, touch bar, ecc.
Installiamo yay:
sudo pacman -S git gcc make fakeroot binutils
git clone https://aur.archlinux.org/yay.git
cd yay
makepkg -si
Installiamo i moduli per il funzionamento del touch bar:
git clone --branch mbp15 https://github.com/roadrunner2/macbook12-spi-driver.git
cd macbook12-spi-driver
make install
Aggiungiamo i moduli al caricamento automatico: /etc/modules-load.d/apple.conf
industrialio_triggered_buffer
apple-ibridge
apple-ib-tb
apple-ib-als
Installiamo i moduli del kernel per il funzionamento della tastiera. Nel repository è presente un pacchetto pronto, si chiama apple-bce-dkms-git. Per installarlo, scriviamo nel terminale:
pacman -S apple-bce-dkms-gitIn questo caso, il modulo del kernel si chiamerà apple-bce. Nel caso di una build autonoma, si chiamerà bce. Di conseguenza, se vuoi annotare il modulo nella sezione MODULES nel 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
Aggiungiamo il modulo bce o apple-bce all'avvio automatico: /etc/modules-load.d/bce.conf
bceSe desideri usare i tasti Fn per impostazione predefinita, scrivi nel file /etc/modprobe.d/apple-tb.conf:
options apple-ib-tb fnmode=2Aggiorniamo il kernel e l'initramfs.
mkinitcpio -p linux-mbp
Installa iwd:
sudo pacman -S networkmanager iwd5. Bootloader
Dopo che tutti i pacchetti principali sono stati installati all'interno del chroot, possiamo procedere con l'installazione del bootloader.
Non sono riuscito a far funzionare grub. Dal disco USB esterno grub si avvia, ma quando provo a installarlo in nvme tramite
grub-install —target=x86_64-efi —efi-directory=/boot —bootloader-id=grub
il sistema andava in kernel panic e, dopo il riavvio, la nuova voce non appariva tra le opzioni. Non ho trovato una soluzione chiara a questo problema e ho quindi deciso di provare a implementare l'avvio utilizzando systemd-boot.
- Avviamo
bootctl --path=/boot installe si va in kernel panic. Spegniamo il MacBook, riaccendiamolo, e premiamo options (non scollegare l'hub USB-C con la tastiera)
- Verifichiamo che sia comparsa una nuova voce EFI BOOT oltre al dispositivo esterno
- Selezioniamo l'avvio dal disco USB esterno, come alla prima installazione (ricordiamoci di scrivere module_blacklist=thunderbolt)
- Montiamo il nostro disco e accediamo all'ambiente tramite arch-chroot
mount /dev/nvme0n1p4 /mnt
mount /dev/nvme0n1p1 /mnt/boot
arch-chroot /mnt
Se è necessario che la tastiera funzioni fino al completo avvio del sistema (questo è necessario in caso di utilizzo di crittografia luks/dm-crypt) scriviamo nel file /etc/mkinicpio.conf nella sezione MODULES:
MODULES=(ext4 applespi intel_lpss_pci spi_pxa2xx_platform bce)
Aggiorniamo il kernel e l'initramfs.
mkinicpio -p linux-mbp
Configuriamo systemd-boot
Modifichiamo il file /boot/loader/loader.conf, cancelliamo tutto ciò che contiene e inseriamo quanto segue:
default arch
timeout 5
editor 1
Accediamo alla cartella /boot/loader/entries, creiamo il file arch.conf e scriviamo:
titolo arch
linux /vmlinuz-linux-mbp
initrd /initramfs-linux-mbp.img
opzioni root=/dev/<b>nvme0n1p4</b> rw pcie_ports=compat
Nel caso in cui sia stata utilizzata la crittografia luks e lvm,
opzioni cryptdevice=\/dev\/<b>nvme0n1p4</b>:luks root=\/dev\/mapper\/vz0-root rw pcie_ports=compat
Riavviamo in MacOS.
6. Configurazione Wi-Fi
Come si è rivelato, i file di firmware per l'adattatore Wi-Fi MacOS sono memorizzati nella cartella /usr/share/firmware/wifi , e possono essere presi da lì in forma di blob e forniti al modulo del kernel brcmfmac. Per scoprire quali file utilizza il tuo adattatore, apri il terminale in MacOS e scrivi:
ioreg -l | grep C-4364Otteniamo un lungo elenco. Abbiamo bisogno solo dei file della sezione 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>"})
Nel tuo caso, i nomi dei file potrebbero differire. Copiamoli dalla cartella /usr/share/firmware/wifi su una chiavetta e rinominiamoli nel seguente modo:
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 del modello; se il tuo modello non è macbookpro15,2, devi rinominare questo file in base al tuo modello di MacBook.
Riavviamo in arch.
Copia i file dalla chiavetta USB 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/
Verifichiamo il funzionamento del modulo:
rmmod brcmfmac
modprobe brcmfmac
Assicuriamoci che l'interfaccia di rete sia apparsa tramite ifconfig/ip.
Configuriamo il wifi tramite
Attenzione. Attraverso netctl, nmcli, ecc. l'interfaccia non funziona, solo tramite iwd.
Forziamo il NetworkManager a usare iwd. Per fare ciò, creiamo il file /etc/NetworkManager/NetworkManager.conf e scriviamo:
[device]
wifi.backend=iwd
Avviamo il servizio NetworkManager
sudo systemctl start NetworkManager.service
sudo systemctl enable NetworkManager.service
7. Suono
Per far funzionare il suono, è necessario installare pulseaudio:
sudo pacman -S pulseaudio
Scarichiamo 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.rules8. Sospensione/Ripristino
Attualmente 16.10.2019 è necessario scegliere tra suono e sospensione/ripristino. Aspettiamo che l'autore del modulo bce migliori la funzionalità.
Per assemblare il modulo con supporto per la sospensione/ripristino, è necessario eseguire quanto segue:
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 precompilato dal repository anuali1, devi prima rimuoverlo e solo dopo assemblare e installare il modulo bce con supporto per la modalità di sospensione.
Inoltre, è necessario aggiungere al blacklist il modulo applesmc (se non lo hai già fatto) e assicurarti che in /boot/loader/entries/arch.conf nella riga options sia stato aggiunto il parametro pcie_ports=compat.
Attualmente, il driver del touch bar si blocca quando si entra in modalità sospensione, e il driver Thunderbolt a volte blocca il sistema per più di 30 secondi, e al ripristino — per alcuni minuti. Questo può essere corretto scaricando automaticamente i moduli problematici.
Crea uno script /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
Rendilo eseguibile:
sudo chmod +x /lib/systemd/system-sleep/rmmod.sh Per ora è tutto. Alla fine si ottiene un sistema piuttosto funzionante, a parte alcuni dettagli con la sospensione/ripristino. Non si osservano crash o kernel panic per diversi giorni di uptime. Spero che a breve l'autore del modulo bce completi il lavoro, e avremo un supporto completo per la sospensione/ripristino e per il suono.
Fonte: habr.com
