Ha habido bastante revuelo respecto a que, debido al nuevo chip T2, no es posible instalar Linux en los nuevos MacBook 2018 con Touch Bar. Con el tiempo, a finales de 2019, desarrolladores independientes implementaron una serie de controladores y parches del núcleo para interactuar con el chip T2. El controlador principal para los modelos de MacBook 2018 y posteriores implementa el funcionamiento de VHCI (operación del touch/teclado/etc.), así como la funcionalidad de audio.
Proyecto se divide en 3 componentes principales:
- BCE (Buffer Copy Engine) - establece el canal de comunicación principal con T2. VHCI y Audio requieren este componente.
- VHCI es un controlador de host USB virtual; el teclado, el ratón y otros componentes del sistema son proporcionados por este componente (otros controladores utilizan este controlador de host para ofrecer más funcionalidad).
- Audio - controlador para la interfaz de audio T2, actualmente solo admite la salida de sonido a través de los altavoces integrados del MacBook.
El segundo proyecto se llama , y permite el funcionamiento del controlador de entrada para el teclado, el trackpad SPI y el Touch Bar para el MacBook Pro de finales de 2016 y versiones posteriores. Parte de los controladores para el teclado/trackpad ahora están incluidos en el núcleo, a partir de la versión 5.3.
También se ha implementado soporte para dispositivos como Wi-Fi, trackpad, etc., mediante parches del núcleo. Actualmente, la versión del núcleo
Lo que funciona actualmente
- NVMe
- Teclado
- USB-C (Thunderbolt no ha sido probado, al cargar automáticamente el módulo cuelga el sistema por completo)
- Touch Bar (con la posibilidad de habilitar las teclas Fn, retroiluminación, ESC, etc.)
- Sonido (solo altavoces integrados)
- Módulo Wi-Fi (a través de brcmfmac y solo mediante iw)
- DisplayPort a través de USB-C
- Sensores
- Suspend/Resume (parcialmente)
- etc..
Este tutorial es aplicable para macbookpro15,1 y macbookpro15,2. Se tomó como base un artículo de GitHub en inglés . No todo en este artículo funcionó, por lo que tuve que buscar soluciones por mi cuenta.
Lo que se necesita para la instalación
- Adaptador de USB-C a USB (al menos tres puertos USB para conectar el ratón, el teclado, un módem USB o un teléfono en modo tethering). Esto es necesario solo en las primeras etapas de la instalación.
- Teclado USB
- Pen drive USB/USB-C de al menos 4GB
1. Deshabilitar la restricción de arranque desde dispositivos externos.
2. Asignar espacio libre utilizando la Utilidad de Discos.
Para mayor comodidad, asigné inmediatamente 30GB en el disco, formateándolo en exfat en la propia Utilidad de Discos. .
3. Creamos la imagen iso
Opciones:
- Podemos optar por el camino fácil y descargar una imagen lista con el núcleo 5.3.5-1 y los parches de
- Crear la imagen manualmente a través de archlive (se necesita un sistema con la distribución de Arch)
Instalamos
pacman -S archisocp -r /usr/share/archiso/configs/releng/ archlive cd archliveAgregamos el repositorio en pacman.conf:
[mbp] Server = https://packages.aunali1.com/archlinux/$repo/$archIgnoramos el núcleo original en pacman.conf:
IgnorePkg = linux linux-headersAgregamos los paquetes necesarios, al final agregamos el núcleo linux-mbp y linux-mbp-headers
... wvdial xl2tpd linux-mbp linux-mbp-headersModificamos el script para trabajar en modo interactivo (reemplazamos 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!" }Creamos la imagen:
sudo ./build.sh -vPresionamos Y para omitir los paquetes ignorados, luego escribimos la imagen iso en un USB:
sudo dd if=out/archlinux*.iso of=/dev/sdb bs=1M
4. Primer arranque
Reiniciamos con el USB insertado y el teclado. Presionamos opciones al aparecer la manzana, seleccionamos EFI BOOT.
Luego es necesario presionar la tecla «e» y escribir al final de la línea de comandos module_blacklist=thunderbolt. Si no se hace esto, el sistema puede no arrancar y aparecerá el error Thunderbolt ICM Error.
Con fdisk/cfdisk encontramos nuestra partición (en mi caso es nvme0n1p4), formateamos y realizamos la instalación de Arch. Podemos usar la o .
No creamos la partición de arranque, el gestor de arranque lo escribiremos en /dev/nvme0n1p1
Después de que el entorno en /mnt esté completamente formado y antes de pasar a arch-chroot, escribimos:
mount /dev/nvme0n1p1 /mnt/boot
arch-chroot /mnt /bin/bash
Agregamos en /etc/pacman.conf:
[mbp]
Server = https://packages.aunali1.com/archlinux/$repo/$arch
Instalamos el núcleo:
sudo pacman -S linux-mbp linux-mbp-headers
sudo mkinitcpio -p linux-mbp
Escribimos thunderbolt y applesmc en /etc/modprobe.d/blacklist.conf
blacklist thunderbolt
blacklist applesmc
Teclado, touch bar, etc.
Instalamos yay:
sudo pacman -S git gcc make fakeroot binutils
git clone https://aur.archlinux.org/yay.git
cd yay
makepkg -si
Instalamos los módulos para el funcionamiento del touch bar:
git clone --branch mbp15 https://github.com/roadrunner2/macbook12-spi-driver.git
cd macbook12-spi-driver
make install
Agregamos los módulos al inicio automático: /etc/modules-load.d/apple.conf
industrialio_triggered_buffer
apple-ibridge
apple-ib-tb
apple-ib-als
Instalamos módulos del núcleo para el funcionamiento del teclado. En el repositorio hay un paquete listo llamado apple-bce-dkms-git. Para instalarlo, escribimos en la consola:
pacman -S apple-bce-dkms-gitEn este caso, el módulo del núcleo se llamará apple-bce. En caso de compilación manual se llamará bce. Por lo tanto, si desea incluir un módulo en la sección MODULES del archivo mkinicpio.conf, no olvide qué módulo ha instalado.
Compilación 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
Agregamos el módulo bce o apple-bce al inicio automático: /etc/modules-load.d/bce.conf
bceSi desea usar las teclas Fn por defecto, escriba en el archivo /etc/modprobe.d/apple-tb.conf:
options apple-ib-tb fnmode=2Actualizamos el kernel y el initramfs.
mkinitcpio -p linux-mbp
Instalemos iwd:
sudo pacman -S networkmanager iwd5. Cargador de arranque
Después de que todos los paquetes principales estén instalados dentro de chroot, se puede proceder con la instalación del cargador de arranque.
No logré hacer funcionar grub. Desde una unidad USB externa, grub se inicia, pero al intentar instalarlo en nvme a través de
grub-install --target=x86_64-efi --efi-directory=/boot --bootloader-id=grub
el sistema caía en un kernel panic, y tras reiniciar, no aparecía la nueva entrada a través de options. No encontré una solución clara a este problema y decidí probar arrancar usando systemd-boot.
- Iniciamos
bootctl --path=/boot instally caemos en kernel panic. Apagamos el MacBook, lo encendemos de nuevo y presionamos options (no desconectamos el hub usb-c con el teclado)
- Verificamos que aparece una nueva entrada EFI BOOT además del dispositivo externo
- Seleccionamos el arranque desde la unidad USB externa, como en la primera instalación (no olvidemos agregar module_blacklist=thunderbolt)
- Montamos nuestro disco y accedemos al entorno a través de arch-chroot
mount /dev/nvme0n1p4 /mnt
mount /dev/nvme0n1p1 /mnt/boot
arch-chroot /mnt
Si es necesario que el teclado funcione antes de que el sistema arranque completamente (esto es necesario en caso de usar cifrado luks/dm-crypt), lo que debemos agregar al archivo /etc/mkinicpio.conf en la sección MODULES:
MODULES=(ext4 applespi intel_lpss_pci spi_pxa2xx_platform bce)
Actualizamos el kernel y el initramfs.
mkinicpio -p linux-mbp
Configurando systemd-boot
Editamos el archivo /boot/loader/loader.conf, eliminamos todo lo que hay dentro y ponemos lo siguiente:
default arch
timeout 5
editor 1
Nos dirigimos a la carpeta /boot/loader/entries, creamos el archivo arch.conf y escribimos:
título arch
linux /vmlinuz-linux-mbp
initrd /initramfs-linux-mbp.img
opciones root=/dev/<b>nvme0n1p4</b> rw pcie_ports=compat
En caso de haber utilizado luks y lvm, entonces
opciones cryptdevice=\/dev\/<b>nvme0n1p4</b>:luks root=\/dev\/mapper\/vz0-root rw pcie_ports=compat
Reiniciamos en MacOS.
6. Configuración de Wi-Fi
Como resultó, los archivos de firmware para el adaptador wi-fi de MacOS se almacenan en la carpeta /usr/share/firmware/wifi , y se pueden obtener de ahí en forma de blobs y alimentar al módulo del kernel brcmfmac. Para averiguar qué archivos utiliza su adaptador, abrimos la terminal en MacOS y escribimos:
ioreg -l | grep C-4364Obtenemos una larga lista. Solo necesitamos los archivos de la sección 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>"})
En su caso, los nombres de los archivos pueden variar. Los copiamos de la carpeta /usr/share/firmware/wifi a la memoria USB y los renombramos de la siguiente manera:
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>
En este caso, el último archivo de texto contiene los nombres de los modelos. Si su modelo no es macbookpro15,2, entonces debe renombrar este archivo de acuerdo con el modelo de su MacBook.
Reiniciamos en Arch.
Copiamos los archivos desde la memoria USB a la carpeta /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/
Comprobamos el funcionamiento del módulo:
rmmod brcmfmac
modprobe brcmfmac
Asegúrate de que la interfaz de red aparece a través de ifconfig/ip.
Configuramos WiFi a través de
Atención. A través de netctl, nmcli, etc. la interfaz no funciona, solo a través de iwd.
Hacemos que NetworkManager use iwd. Para ello, creamos el archivo /etc/NetworkManager/NetworkManager.conf y escribimos:
[device]
wifi.backend=iwd
Iniciamos el servicio de NetworkManager
sudo systemctl start NetworkManager.service
sudo systemctl enable NetworkManager.service
7. Sonido
Para que el sonido funcione, es necesario instalar pulseaudio:
sudo pacman -S pulseaudio
Descargamos tres archivos:
Los movemos:
/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. Suspender/Reanudar
En este momento 16.10.2019 hay que elegir entre sonido o suspender/reanudar. Esperamos a que el autor del módulo bce complete la funcionalidad.
Para compilar el módulo con soporte para suspender/reanudar, es necesario realizar lo siguiente:
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
Si instalaste el módulo apple-bce listo del repositorio anuali1, primero debes eliminarlo y solo después compilar e instalar el módulo bce con soporte para el modo de suspensión.
Además, es necesario añadir el módulo applesmc a la lista negra (si no lo hiciste antes) y asegurarte de que en /boot/loader/entries/arch.conf en la línea de opciones al final se haya añadido el parámetro pcie_ports=compat.
Actualmente, el controlador del Touch Bar falla al entrar en modo de suspensión, y el controlador de Thunderbolt a veces bloquea el sistema durante más de 30 segundos, y al reanudar — durante varios minutos. Esto se puede solucionar descargando automáticamente los módulos problemáticos.
Crea un 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
Hazlo ejecutable:
sudo chmod +x /lib/systemd/system-sleep/rmmod.sh Por ahora, eso es todo. Al final tenemos un sistema bastante funcional, a excepción de algunos matices con suspender/reanudar. No se observan fallos ni panic del kernel durante varios días de tiempo activo. Espero que en un futuro cercano el autor del módulo bce lo complete y obtengamos soporte completo para suspender/reanudar y sonido.
Fuente: habr.com
