Hacer que MacBook Pro 2018 T2 funcione con ArchLinux (arranque dual)

Ha habido bastante entusiasmo sobre el hecho de que el nuevo chip T2 hará imposible instalar Linux en las nuevas MacBooks 2018 con barra táctil. Pasó el tiempo y, a finales de 2019, desarrolladores externos implementaron una serie de controladores y parches del kernel para interactuar con el chip T2. El controlador principal para los modelos de MacBook 2018 y posteriores implementa la operación VHCI (operación táctil/teclado/etc.), así como la operación de sonido.

proyecto mbp2018-puente-drv dividido 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 virtual USB; el teclado, el mouse y otros componentes del sistema los proporciona este componente (otros controladores usan este controlador de host para proporcionar más funcionalidad).
  • Audio: controlador para la interfaz de audio T2; actualmente solo admite salida de audio a través de los parlantes integrados del MacBook.


El segundo proyecto se llama macbook12-spi-drivere implementa la capacidad de operar un controlador de entrada para el teclado, el trackpad SPI y la barra táctil para MacBook Pro de finales de 2016 y posteriores. Algunos controladores de teclado/trackpad ahora están incluidos en el kernel, a partir de la versión 5.3.

También se implementó soporte para dispositivos como wi-fi, panel táctil, etc. mediante parches del kernel. Versión actual del kernel 5.3.5 - 1

¿Qué está funcionando en este momento?

  1. NVMe
  2. teclado
  3. USB-C (Thunderbolt no ha sido probado; cuando el módulo se carga automáticamente, congela el sistema)
  4. Barra táctil (con capacidad de activar las teclas Fn, retroiluminación, ESC, etc.)
  5. Sonido (solo altavoces integrados)
  6. Módulo Wi-Fi (a través de brcmfmac y solo a través de iw)
  7. DisplayPort a través de USB-C
  8. Sensores
  9. Suspender/Reanudar (parcialmente)
  10. etc ..

Este tutorial es aplicable para macbookpro15,1 y macbookpro15,2. El artículo fue tomado como base de Github en inglés. por lo tanto. No todo lo que se describe en este artículo funcionó, así que tuve que encontrar una solución yo mismo.

Que necesitas instalar

  • Adaptador de acoplamiento USB-C a USB (al menos tres entradas USB para conectar un mouse, teclado, módem USB o teléfono en modo anclaje a red). Esto sólo es necesario durante las primeras etapas de instalación.
  • teclado USB
  • Unidad flash USB/USB-C de 4 GB mínimo

1. Desactive la prohibición de arrancar desde medios externos

https://support.apple.com/en-us/HT208330
https://www.ninjastik.com/support/2018-macbook-pro-boot-from-usb/

2. Asigne espacio libre usando la Utilidad de Discos

Para mayor comodidad, inmediatamente asigné 30 GB al disco y lo formateé en exfat en la propia Utilidad de Discos. Particionar un disco físico Utilidad de disco.

3. Crea una imagen ISO

Opciones:

  1. Puede seguir la ruta simple y descargar una imagen lista para usar con el kernel 5.3.5-1 y parches de aunali1 enlace a la imagen terminada
  2. Cree una imagen usted mismo a través de archlive (se requiere un sistema con distribución Archa)

    Establecer archiso

    pacman -S archiso

    
    cp -r /usr/share/archiso/configs/releng/ archlive
    cd archlive
    

    Agregue el repositorio a pacman.conf:

    
    [mbp]
    Server = https://packages.aunali1.com/archlinux/$repo/$arch
    

    Ignoramos el kernel original en pacman.conf:

    IgnorePkg   = linux linux-headers
    

    Agregue los paquetes necesarios, al final agregue el kernel linux-mbp y linux-mbp-headers

    ...
    wvdial
    xl2tpd
    linux-mbp
    linux-mbp-headers
    

    Cambiamos el script para que funcione en modo interactivo (reemplace 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!"
    }

    Formando una imagen:

    sudo ./build.sh -v

    Presione Y para omitir los paquetes ignorados, luego escriba la imagen iso en la unidad flash USB:

    sudo dd if=out/archlinux*.iso of=/dev/sdb bs=1M

4. Primer arranque

Reinicie con la unidad flash y el teclado insertados. Presione opciones cuando aparezca la manzana, seleccione EFI BOOT.

A continuación, debe presionar la tecla "e" e ingresar al final de la línea de comando module_blacklist=rayo. Si no se hace esto, es posible que el sistema no arranque y aparecerá un error de Thunderbolt ICM.

Usando fdisk/cfdisk encontramos nuestra partición (para mí es nvme0n1p4), la formateamos e instalamos el archivo. Puedes usar instrucción oficial o oblicuo.

No estamos creando una partición de arranque; escribiremos el gestor de arranque en /dev/nvme0n1p1
Después de que el entorno en /mnt esté completamente formado y antes de pasar a arch-chroot, escriba:

mount /dev/nvme0n1p1 /mnt/boot
arch-chroot /mnt /bin/bash

Agregar a /etc/pacman.conf:


[mbp]
Server = https://packages.aunali1.com/archlinux/$repo/$arch

Instale el núcleo:


sudo pacman -S linux-mbp linux-mbp-headers
sudo mkinitcpio -p linux-mbp

Registramos Thunderbolt y Applesmc en /etc/modprobe.d/blacklist.conf

blacklist thunderbolt
blacklist applesmc

Teclado, barra táctil, etc.

Instalar yay:


sudo pacman -S git gcc make fakeroot binutils
git clone https://aur.archlinux.org/yay.git
cd yay
makepkg -si

Instalación de módulos para que funcione la barra táctil:


git clone --branch mbp15 https://github.com/roadrunner2/macbook12-spi-driver.git
cd macbook12-spi-driver
make install

Agregar módulos al inicio: /etc/modules-load.d/apple.conf

industrialio_triggered_buffer
apple-ibridge
apple-ib-tb
apple-ib-als

Instalación de módulos del kernel para el teclado. en el repositorio anuali1 hay un paquete listo para usar, se llama apple-bce-dkms-git. Para instalarlo escribe en la consola:

pacman -S apple-bce-dkms-git

En este caso, se llamará al módulo del kernel. manzana-bce. En el caso del autoensamblaje, se denomina bce. En consecuencia, si desea registrar un módulo en la sección MÓDULOS del archivo mkinicpio.conf, no olvide qué módulo instaló.

Montaje 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

Agregue el módulo bce o apple-bce al inicio: /etc/modules-load.d/bce.conf

bce

Si desea utilizar los botones Fn de forma predeterminada, escriba en el archivo /etc/modprobe.d/apple-tb.conf:

options apple-ib-tb fnmode=2

Actualizando el kernel e initramfs.


mkinitcpio -p linux-mbp

Instalar iwd:

sudo pacman -S networkmanager iwd

5. Cargador

Una vez que todos los paquetes principales estén instalados dentro del chroot, puede comenzar a instalar el gestor de arranque.

No he podido hacer que grub funcione. Grub arranca desde una unidad USB externa, pero cuando intentas registrarlo en nvme a través de

grub-install --target=x86_64-efi --efi-directory=/boot --bootloader-id=grub

el sistema entró en pánico en el kernel y, después de reiniciar, no apareció un nuevo elemento a través de las opciones. No encontré ninguna solución clara a este problema y por eso decidí intentar implementar el arranque usando systemd-boot.

  1. Lanzamos
    bootctl --path=/boot install

    y entramos en pánico. Apague la MacBook, enciéndala nuevamente, haga clic en opciones (no apague el concentrador USB-C con teclado)

  2. Comprobamos que ha aparecido una nueva entrada EFI BOOT además del dispositivo externo
  3. Seleccionamos arrancar desde una unidad USB externa, como durante la primera instalación (no olvide especificar module_blacklist=thunderbolt)
  4. Montamos nuestro disco y entramos al entorno vía arch-chroot


mount /dev/nvme0n1p4 /mnt
mount /dev/nvme0n1p1 /mnt/boot
arch-chroot /mnt

Si es necesario que el teclado funcione hasta que el sistema esté completamente cargado (esto es necesario cuando se usa el cifrado luks/dm-crypt), escríbalo en el archivo /etc/mkinicpio.conf en la sección MÓDULOS:

MODULES=(ext4 applespi intel_lpss_pci spi_pxa2xx_platform bce)

Actualizando el kernel e initramfs.


mkinicpio -p linux-mbp

Configurando el arranque del sistema

Editamos el archivo /boot/loader/loader.conf, eliminamos todo lo que hay dentro y agregamos lo siguiente:

default arch
timeout 5
editor 1

Vaya a la carpeta /boot/loader/entries, cree el archivo arch.conf y escriba:

title arch
linux /vmlinuz-linux-mbp
initrd /initramfs-linux-mbp.img
options root=/dev/<b>nvme0n1p4</b> rw pcie_ports=compat

Si usaste luks y lvm, entonces

options cryptdevice=/dev/<b>nvme0n1p4</b>:luks root=/dev/mapper/vz0-root rw pcie_ports=compat

Reinicie en MacOS.

6. Configuración de Wi-Fi

Al final resultó que, MacOS almacena los archivos de firmware para el adaptador Wi-Fi en la carpeta /usr/share/firmware/wifi , y puede tomarlos desde allí en forma de blobs y enviarlos al módulo del kernel brcmfmac. Para saber qué archivos utiliza su adaptador, abra una terminal en MacOS y escriba:

ioreg -l | grep C-4364

Obtenemos una larga lista. Solo necesitamos archivos de la sección. Archivos solicitados:

"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 diferir. Cópielos de la carpeta /usr/share/firmware/wifi a la unidad flash y cámbieles el nombre 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 deberá cambiar el nombre de este archivo de acuerdo con su modelo de MacBook.

Reinicie en Arch.

Copie los archivos de la unidad flash 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/

Comprobando la funcionalidad del módulo:


rmmod brcmfmac
modprobe brcmfmac

Nos aseguramos de que aparezca la interfaz de red a través de ifconfig/ip.
Configurar wifi a través de iwctl

Atención. A través de netctl, nmcli, etc. La interfaz no funciona, sólo a través de iwd.

Obligamos a NetworkManager a utilizar iwd. Para hacer esto, cree el archivo /etc/NetworkManager/NetworkManager.conf y escriba:

[device]
wifi.backend=iwd

Inicie el servicio NetworkManager


sudo systemctl start NetworkManager.service
sudo systemctl enable NetworkManager.service

7. Sonido

Para que el sonido funcione, necesitas instalar pulseaudio:


sudo pacman -S pulseaudio

Descarga tres archivos:

Movámoslos:

    /usr/share/alsa/cards/AppleT2.conf
    /usr/share/pulseaudio/alsa-mixer/profile-sets/apple-t2.conf
    /usr/lib/udev/rules.d/91-pulseaudio-custom.rules

8. Suspender/Reanudar

Actualmente 16.10.2019 tienes que elegir sonido o suspender/reanudar. Estamos esperando que el autor del módulo bce complete la funcionalidad.

Para crear un módulo con soporte suspendido/reanudado, debe hacer 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 instaló el módulo Apple-BCE listo para usar desde el repositorio anuali1, primero debe eliminarlo y solo luego ensamblar e instalar el módulo BCE con soporte para modo suspendido.

Además, debe agregar el módulo applesmc a la lista negra (si no lo ha hecho antes) y asegurarse de que en /boot/loader/entries/arch.conf en la línea de opciones al final se agregue el parámetro. pcie_ports=compatible.

Actualmente, el controlador de la barra táctil falla al ingresar al modo de suspensión y el controlador Thunderbolt a veces congela el sistema durante más de 30 segundos y durante varios minutos al reanudarlo. Esto se puede solucionar descargando automáticamente los 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

Hazlo ejecutable:

sudo chmod +x /lib/systemd/system-sleep/rmmod.sh

Eso es todo por ahora. El resultado es un sistema completamente viable, con la excepción de algunos matices con suspender/reanudar. No se observaron fallos ni pánicos del kernel durante varios días de funcionamiento. Espero que en un futuro próximo el autor del módulo bce lo termine y obtengamos soporte completo para suspender/reanudar y sonido.

Fuente: habr.com

Añadir un comentario