C'è stata molta discussione riguardo al fatto che, a causa del nuovo chip T2, non fosse possibile installare Linux sui nuovi MacBook del 2018 con touch bar. Col passare del tempo, verso la fine del 2019, sono stati sviluppati da terze parti vari driver e patch del kernel per interagire con il chip T2. Il driver principale per i modelli MacBook 2018 e successivi consente il funzionamento di VHCI (touch/keyboard/etc.) e della parte audio.
Progetto è 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 USB virtuale; tastiera, mouse e altri componenti del sistema sono forniti da questo componente (altri driver utilizzano questo controller host per garantire una maggiore 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 utilizzare il driver di input per la tastiera, il trackpad SPI, e il Touch Bar per MacBook Pro della fine del 2016 e versioni successive. Parte dei driver per la tastiera/trackpad è ora inclusa nel kernel, a partire dalla versione 5.3.
È stata inoltre implementata la supporto per dispositivi come Wi-Fi, trackpad, ecc., tramite patch del kernel. Attualmente la versione del kernel
Cosa funziona al momento
- NVMe
- Tastiera
- USB-C (Thunderbolt non testato, l'autolavaggio 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
- Sospensione/Ripristino (parzialmente)
- ecc..
Questo tutorial è applicabile a macbookpro15,1 e macbookpro15,2. È stata utilizzata come base un'articolo da GitHub in inglese . Non tutto di questo articolo ha funzionato, quindi è stato necessario cercare una soluzione da soli.
Cosa è necessario per l'installazione
- Un adattatore dock USB-C a USB (almeno tre porte USB per collegare il mouse, la tastiera, un modem USB o un telefono in modalità tethering). Questo è necessario solo nelle prime fasi dell'installazione.
- Tastiera USB
- Chiavetta USB/USB-C di almeno 4GB
1. Disattiviamo il divieto di caricamento da dispositivi esterni
2. Allocchiamo spazio libero utilizzando Disk Utility
Per comodità, ho subito allocato 30 GB sul disco, formattandolo in exfat direttamente in Disk Utility. .
3. Creiamo un'immagine iso
Opzioni:
- Si può optare per la soluzione più semplice e scaricare un'immagine pronta con il kernel 5.3.5-1 e le patch da
- 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, alla fine aggiungiamo il kernel linux-mbp e linux-mbp-headers
... wvdial xl2tpd linux-mbp linux-mbp-headersModifichiamo lo script per lavorare in modalità interattiva (sostituiamo 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 -vPremiamo Y per ignorare i pacchetti, quindi scriviamo l'immagine iso su una chiavetta usb:
sudo dd if=out/archlinux*.iso of=/dev/sdb bs=1M
4. Primo avvio
Riavviamo con la chiavetta inserita e la tastiera. Premiamo options quando appare la mela, selezioniamo EFI BOOT.
Successivamente, premere il tasto «e» e aggiungere alla fine della riga di comando module_blacklist=thunderbolt. Se non lo si fa, il sistema potrebbe non avviarsi e apparirà l'errore Thunderbolt ICM Error.
Utilizzando fdisk/cfdisk, troviamo la nostra partizione (per me è nvme0n1p4), formattiamo e installiamo Arch. Possiamo fare riferimento all' o .
Non creiamo una partizione di avvio; installeremo il bootloader in /dev/nvme0n1p1
Dopo che l'ambiente è stato completamente configurato in /mnt e prima di passare a arch-chroot, scriviamo:
mount /dev/nvme0n1p1 /mnt/boot
arch-chroot /mnt /bin/bash
Aggiungiamo a /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 all'avvio automatico: /etc/modules-load.d/apple.conf
industrialio_triggered_buffer
apple-ibridge
apple-ib-tb
apple-ib-als
Installiamo i moduli del kernel per la tastiera. Nel repository c'è 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 compilazione manuale, si chiama bce. Pertanto, se vuoi registrare il modulo nella sezione MODULES del file mkinicpio.conf, non dimenticare quale modulo hai installato.
Compilazione 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 vuoi usare per default i tasti Fn, nel file /etc/modprobe.d/apple-tb.conf scrivi:
options apple-ib-tb fnmode=2Aggiorniamo il kernel e initramfs.
mkinitcpio -p linux-mbp
Installeremo iwd:
sudo pacman -S networkmanager iwd5. Bootloader
Dopo aver installato tutti i pacchetti principali all'interno di chroot, possiamo procedere con l'installazione del bootloader.
Non sono riuscito a far funzionare grub. Grub si avvia da un'unità USB esterna, ma nel tentativo di registrarlo 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 non appariva il nuovo punto attraverso options. Non ho trovato una soluzione chiara per questo problema e quindi ho deciso di provare a implementare il boot tramite systemd-boot.
- Avviamo
bootctl --path=/boot installe ci ritroviamo in kernel panic. Spegniamo il MacBook, riaccendiamolo e premere opzioni (non scollegare l'hub usb-c con la tastiera)
- Verifichiamo che ci sia una nuova voce EFI BOOT oltre al dispositivo esterno
- Selezioniamo l'avvio dal disco usb esterno, come durante la prima installazione (non dimenticate di specificare 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, affinché la tastiera funzioni fino al completo avvio del sistema (questo è necessario in caso di utilizzo della crittografia luks/dm-crypt), aggiungiamo nel file /etc/mkinicpio.conf nella sezione MODULES:
MODULES=(ext4 applespi intel_lpss_pci spi_pxa2xx_platform bce)
Aggiorniamo il kernel e initramfs.
mkinicpio -p linux-mbp
Configuriamo systemd-boot
Modifichiamo il file /boot/loader/loader.conf, cancelliamo tutto il contenuto e inseriamo quanto segue:
default arch
timeout 5
editor 1
Andiamo nella cartella /boot/loader/entries, creiamo il file arch.conf e scriviamo:
titolo arch
linux /vmlinuz-linux-mbp
initrd /initramfs-linux-mbp.img
options root=/dev/<b>nvme0n1p4</b> rw pcie_ports=compat
Nel caso in cui abbiate utilizzato 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 è scoperto, i file del firmware per l'adattatore wi-fi sono conservati nella cartella /usr/share/firmware/wifi , e possiamo prenderli da lì sotto forma di blob e fornire al modulo del kernel brcmfmac. Per scoprire quali file utilizza il tuo adattatore, apriamo il terminale in MacOS e scriviamo:
ioreg -l | grep C-4364Otteniamo un lungo elenco. Ci servono solo i file dalla 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 USB 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, dovrai 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. Tramite netctl, nmcli, ecc. l'interfaccia non funziona, solo tramite iwd.
Imponiamo a NetworkManager di usare iwd. A tal fine, 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 l'audio, è 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 si deve scegliere tra audio e sospensione/ripristino. Aspettiamo che l'autore di questo modulo completi la funzionalità.
Per compilare il modulo con il supporto per 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 dalla repository anuali1, devi prima rimuoverlo e solo dopo compilare e installare il modulo bce con supporto per la modalità di sospensione.
Inoltre, devi aggiungere il modulo applesmc alla blacklist (se non lo hai già fatto) e assicurarti che nel file /boot/loader/entries/arch.conf alla riga options sia stato aggiunto il parametro pcie_ports=compat.
Attualmente il driver della 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 risolto con il caricamento automatico dei 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 Questo è tutto per ora. In definitiva, si tratta di un sistema piuttosto funzionante, tranne per alcuni dettagli riguardanti la sospensione/ripristino. Non si osservano crash né kernel panic da diversi giorni di uptime. Spero che l'autore del modulo bce lo migliori presto, così otterremo un supporto completo per la sospensione/ripristino e l'audio.
Fonte: habr.com
