Facendo que MacBook Pro 2018 T2 funcione con ArchLinux (arranque dual)
Houbo bastante entusiasmo sobre o feito de que o novo chip T2 fará imposible instalar Linux nos novos MacBooks 2018 cunha barra táctil. Pasou o tempo e, a finais de 2019, desenvolvedores de terceiros implementaron unha serie de controladores e parches do núcleo para a interacción co chip T2. O controlador principal para os modelos de MacBook 2018 e posteriores implementa a operación VHCI (operación táctil/teclado/etc.), así como a operación de son.
BCE (Buffer Copy Engine) - establece a canle de comunicación principal con T2. VHCI e audio requiren este compoñente.
VHCI é un controlador de host virtual USB; o teclado, o rato e outros compoñentes do sistema son proporcionados por este compoñente (outros controladores usan este controlador de host para ofrecer máis funcionalidades.
Audio: controlador para a interface de audio T2, actualmente só admite a saída de audio a través dos altofalantes integrados do MacBook
O segundo proxecto chámase controlador de macbook12-spi, e implementa a capacidade de operar un controlador de entrada para o teclado, o panel táctil SPI e a barra táctil para o MacBook Pro de finais de 2016 e posteriores. Algúns controladores de teclado / trackpad agora están incluídos no núcleo, comezando coa versión 5.3.
Tamén se implementou soporte para dispositivos como wi-fi, touchpad, etc. mediante parches do núcleo. Versión actual do núcleo5.3.5-1
O que está a funcionar neste momento
NVMe
teclado
USB-C (Thunderbolt non se probou; cando o módulo se carga automaticamente, conxela o sistema)
Barra táctil (coa capacidade de activar as teclas Fn, a retroiluminación, ESC, etc.)
Son (só altofalantes incorporados)
Módulo Wi-Fi (a través de brcmfmac e só a través de iw)
DisplayPort a través de USB-C
Sensores
Suspender/Reanudar (parcialmente)
etc ..
Este tutorial é aplicable para macbookpro15,1 e macbookpro15,2. O artigo foi tomado como base de Github en inglés. por iso. Non todo o que aparece neste artigo funcionou, polo que tiven que atopar eu mesmo unha solución.
O que cómpre instalar
Adaptador de acoplamento USB-C a USB (polo menos tres entradas USB para conectar un rato, un teclado, un módem USB ou un teléfono en modo de conexión). Isto só é necesario durante as primeiras etapas da instalación
Teclado USB
Unidade flash USB/USB-C de 4 GB como mínimo
1. Desactive a prohibición de arrincar desde medios externos
cp -r /usr/share/archiso/configs/releng/ archlive
cd archlive
Engade o repositorio a pacman.conf:
[mbp]
Server = https://packages.aunali1.com/archlinux/$repo/$arch
Ignoramos o núcleo orixinal en pacman.conf:
IgnorePkg = linux linux-headers
Engade os paquetes necesarios, ao final engade o núcleo linux-mbp e as cabeceiras linux-mbp
...
wvdial
xl2tpd
linux-mbp
linux-mbp-headers
Cambiamos o script para que funcione en modo interactivo (substitúe pacstrap -C por 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ón dunha imaxe:
sudo ./build.sh -v
Preme Y para omitir paquetes ignorados e, a continuación, escribe a imaxe iso na unidade flash USB:
sudo dd if=out/archlinux*.iso of=/dev/sdb bs=1M
4. Primeiro arranque
Reinicie coa unidade flash e o teclado inseridos. Preme opcións cando apareza a mazá, selecciona EFI BOOT.
A continuación, cómpre premer a tecla "e" e ingresar ao final da liña de comandos module_blacklist=rabo. Se non se fai isto, é posible que o sistema non se inicie e aparecerá un erro de Thunderbolt ICM.
Usando fdisk/cfdisk atopamos a nosa partición (para min é nvme0n1p4), formatámola e instalamos o arquivo. Podes usar instrucións oficiais ou de lado.
Non estamos creando unha partición de arranque; escribiremos o cargador de arranque /dev/nvme0n1p1
Despois de que o ambiente en /mnt estea completamente formado e antes de pasar a arch-chroot, escribe:
mount /dev/nvme0n1p1 /mnt/boot
arch-chroot /mnt /bin/bash
Engadir a /etc/pacman.conf:
[mbp]
Server = https://packages.aunali1.com/archlinux/$repo/$arch
Instalación de módulos do núcleo para o teclado. No repositorio anual 1 hai un paquete preparado, chámase apple-bce-dkms-git. Para instalalo, escriba na consola:
pacman -S apple-bce-dkms-git
Neste caso, chamarase ao módulo do núcleo mazá-bce. No caso da automontaxe, denomínase ecb. En consecuencia, se quere rexistrar un módulo na sección MÓDULOS do ficheiro mkinicpio.conf, non esqueza que módulo instalou.
Montaxe 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
Engade o módulo bce ou apple-bce ao inicio: /etc/modules-load.d/bce.conf
bce
Se queres usar os botóns Fn por defecto, escribe no ficheiro /etc/modprobe.d/apple-tb.conf:
options apple-ib-tb fnmode=2
Actualizando o kernel e initramfs.
mkinitcpio -p linux-mbp
Instalar iwd:
sudo pacman -S networkmanager iwd
5. Cargador
Unha vez que todos os paquetes principais estean instalados dentro do chroot, pode comezar a instalar o cargador de arranque.
Non puiden poñer a grub a traballar. Grub arranca desde unha unidade USB externa, pero cando intentas rexistralo en nvme mediante
o sistema entrou en pánico do núcleo, e despois de reiniciar un novo elemento a través de opcións non apareceu. Non atopei ningunha solución clara a este problema e, polo tanto, decidín tentar implementar o arranque mediante systemd-boot.
Lanzamento
bootctl --path=/boot install
e entramos no pánico do núcleo. Apague o MacBook, acéndeo de novo, faga clic en opcións (non apague o concentrador USB-C co teclado)
Comprobamos que apareceu unha nova entrada EFI BOOT ademais do dispositivo externo
Seleccionamos arrancar desde unha unidade USB externa, como durante a primeira instalación (non esquezas especificar module_blacklist=thunderbolt)
Montamos o noso disco e entramos no entorno mediante arch-chroot
mount /dev/nvme0n1p4 /mnt
mount /dev/nvme0n1p1 /mnt/boot
arch-chroot /mnt
Se é necesario que o teclado funcione ata que o sistema estea completamente cargado (isto é necesario cando se utiliza o cifrado luks/dm-crypt), escríbeo no ficheiro /etc/mkinicpio.conf na sección MÓDULOS:
Como resultou ao final, MacOS almacena os ficheiros de firmware para o adaptador wi-fi no cartafol /usr/share/firmware/wifi , e pode levalos desde alí en forma de blobs e alimentalos ao módulo do núcleo brcmfmac. Para saber que ficheiros usa o seu adaptador, abra un terminal en MacOS e escriba:
ioreg -l | grep C-4364
Temos unha longa lista. Só necesitamos ficheiros da sección Ficheiros solicitados:
Neste caso, o último ficheiro de texto contén os nomes dos modelos; se o teu modelo non é macbookpro15,2, terás que cambiar o nome deste ficheiro de acordo co modelo do teu MacBook.
Reinicie en Arch.
Copie os ficheiros da unidade flash ao cartafol /lib/firmware/brcm/
Neste momento 16.10.2019 tes que escoller o son ou suspender/reanudar. Estamos á espera de que o autor do módulo bce complete a funcionalidade.
Para crear un módulo con soporte suspendido/reanudar, debes facer o seguinte:
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 instalou o módulo apple-bce preparado desde o repositorio anuali1, primeiro debes eliminalo e só despois montar e instalar o módulo bce con soporte para o modo de suspensión.
Ademais, cómpre engadir o módulo applesmc á lista negra (se non o fixo antes) e asegurarse de que en /boot/loader/entries/arch.conf na liña de opcións ao final se engade o parámetro. pcie_ports=compat.
Actualmente, o controlador da barra táctil falla ao entrar no modo de suspensión e, ás veces, o controlador do raio conxela o sistema durante máis de 30 segundos e durante varios minutos cando se reanuda. Isto pódese solucionar descargando automaticamente módulos problemáticos.
Crear un guión /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
Faino executable:
sudo chmod +x /lib/systemd/system-sleep/rmmod.sh
Iso é todo por agora. O resultado é un sistema completamente viable, con excepción dalgúns matices con suspender/reanudar. Non se observaron fallos nin pánicos do núcleo durante varios días de tempo de actividade. Espero que nun futuro próximo o autor do módulo bce o remate e teñamos soporte total para suspender/reanudar e sonar.