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

Hubo mucha expectación sobre el hecho de que debido al nuevo chip T2, es imposible instalar Linux en el nuevo MacBook 2018 con una barra táctil. A medida que pasó el tiempo, y para fines de 2019, los desarrolladores de terceros implementaron una serie de controladores y parches de kernel para interactuar con el chip T2. El controlador principal para los modelos MacBook 2018 y posteriores implementa el trabajo de VHCI (operación del tacto / teclado / etc.), así como el funcionamiento del sonido.

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

El segundo proyecto se llama macbook12-spi-driver e implementa la posibilidad del controlador de entrada para el teclado, trackpad SPI, barra táctil para MacBook Pro a finales de 2016 y versiones posteriores. Algunos controladores para el teclado / trackpad ahora están incluidos en el kernel, comenzando con la versión 5.3.

También se implementó el soporte para dispositivos como wi-fi, touchpad, etc., que usan parches de kernel. Actualmente la versión del núcleo es 5.3.5-1

Lo que funciona en este momento


  1. NVMe
  2. Teclado
  3. USB-C (Thunderbolt no se probó, cuando el módulo se carga automáticamente, suspende fuertemente el sistema)
  4. Barra táctil (con la capacidad de encender las teclas Fn, luz de fondo, 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 de un github en inglés desde aquí . No todo este artículo funcionó, así que tuve que buscar una solución por mi cuenta.

Lo que necesitas instalar


  • Adaptador de base USB-C USB (al menos tres entradas USB para conectar un mouse, teclado, módem USB o teléfono en modo de conexión). Esto solo es necesario en las primeras etapas de la instalación.
  • Teclado USB
  • Unidad flash USB / USB-C de al menos 4 GB

1. Desactive la prohibición de descargar 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 utilizando la Utilidad de Discos


Por conveniencia, inmediatamente asigné 30GB al disco, formateándolo para exfat en la Utilidad de Discos. Particionar un disco físico en particiones de Utilidad de Discos .

3. Forme una imagen iso


Opciones:

  1. Puede seguir el camino simple y descargar la imagen final con el kernel 5.3.5-1 y los parches del enlace aunali1 a la imagen final
  2. Cree una imagen usted mismo a través de archlive (necesita un sistema con distribución archa)

    Instalar 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 

    Ignora el núcleo original en pacman.conf:

     IgnorePkg = linux linux-headers 

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

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

    Cambie 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!" } 

    Formamos 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 las opciones cuando aparezca la manzana, seleccione EFI BOOT.

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

Usando fdisk / cfdisk encontramos nuestra partición (la tengo nvme0n1p4), formateamos e instalamos el arco. Puede utilizar las instrucciones oficiales o de terceros .

No creamos la 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 cambiar a arch-chroot, escribimos:

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

Añadir a /etc/pacman.conf:

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

Instala el núcleo:

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

Coloque 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 

Instale los módulos para la barra táctil:

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

Agregue módulos a la carga automática: /etc/modules-load.d/apple.conf

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

Instale los módulos del kernel para el teclado. El repositorio anuali1 tiene un paquete listo para usar , se llama apple-bce-dkms-git . Para instalarlo, escriba en la consola:

 pacman -S apple-bce-dkms-git 

En este caso, el módulo del núcleo se llamará apple-bce . En el caso del autoensamblaje, se llama bce . Por consiguiente, 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 a la carga automática: /etc/modules-load.d/bce.conf

 bce 

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

 options apple-ib-tb fnmode=2 

Actualización del kernel y initramfs.

 mkinitcpio -p linux-mbp 

Instalar iwd:

 sudo pacman -S networkmanager iwd 

5. Cargador de arranque


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

Nunca logré poner comida a trabajar. Desde una unidad usb externa, arranca grub, pero cuando intentas registrarlo en nvme a través de
grub-install --target = x86_64-efi --efi-directory = / boot --bootloader-id = grub
el sistema se estrelló en el kernel panic, y después de reiniciar un nuevo elemento a través de las opciones no apareció. No encontré ninguna solución inteligible para este problema y, por lo tanto, decidí intentar implementar el arranque usando systemd-boot.

  1. Lanzamos

     bootctl --path=/boot install 

    y volar al kernel panic. Apague la MacBook, enciéndala nuevamente, haga clic en opciones (no desactive el hub usb-c con el teclado)
  2. Compruebe que ha aparecido un nuevo registro EFI BOOT además del dispositivo externo
  3. Seleccionamos el arranque desde una unidad usb externa, como durante la primera instalación (no olvide escribir module_blacklist = thunderbolt)
  4. Montamos nuestro disco y vamos al medio ambiente 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 hasta que el sistema esté completamente cargado (esto es necesario si se usa el cifrado luks / dm-crypt), lo escribimos en el archivo /etc/mkinicpio.conf en la sección MÓDULOS:

 MODULES=(ext4 applespi intel_lpss_pci spi_pxa2xx_platform bce) 

Actualización del kernel y initramfs.

 mkinicpio -p linux-mbp 

Configurar systemd-boot


Editamos el archivo /boot/loader/loader.conf, eliminamos todo lo que contiene 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 

Reiniciar en MacOS.

6. Configuración de wifi


Al final resultó que, MacOS almacena los archivos de firmware para el adaptador de wi-fi en la carpeta / usr / share / firmware / wifi , y puede tomarlos desde allí en forma de blobs y alimentarlos al módulo del núcleo brcmfmac. Para saber exactamente qué archivos usa su adaptador, abra el terminal en MacOS y escriba:

 ioreg -l | grep C-4364 

Tenemos una larga lista. Solo necesitamos 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 diferir. Cópielos de la carpeta / usr / share / firmware / wifi a la unidad flash USB y cámbiele el nombre a la siguiente vista:

  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 el nombre del modelo, si su modelo no es macbookpro15,2, entonces debe cambiar el nombre de este archivo de acuerdo con su modelo de macbook.

Reiniciar en el arco.

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

Verifique el estado del módulo:

 rmmod brcmfmac modprobe brcmfmac 

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

Atencion Vía netctl, nmcli, etc. la interfaz no funciona, solo a través de iwd.

Hacer que NetworkManager use iwd. Para hacer esto, cree el archivo /etc/NetworkManager/NetworkManager.conf y escriba:

 [device] wifi.backend=iwd 

Inicio del servicio NetworkManager

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

7. sonido


Para hacer sonido, debe instalar pulseaudio:

 sudo pacman -S pulseaudio 

Descargue tres archivos:


Moverlos:

  /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


Por el momento, 16/10/2019 tienes que elegir entre sonido o suspender / reanudar. Estamos esperando que el autor del módulo bce termine la funcionalidad.

Para crear un módulo compatible con susped / resume, 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 ya preparado desde el repositorio anuali1, primero debe eliminarlo y solo luego recopilar e instalar el módulo bce con soporte para el modo de suspensión.

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

En este momento, el controlador de la barra táctil se bloquea cuando ingresa al modo de suspensión, y el controlador de rayo a veces suspende el sistema durante más de 30 segundos, y cuando se reanuda, durante varios minutos. Esto se puede solucionar descargando automáticamente los módulos con problemas.

Cree el 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 

Eso es todo por ahora. El resultado es un sistema completamente funcional, con la excepción de algunos matices con suspender / reanudar. No se han observado bloqueos ni pánico en el núcleo durante varios días de actividad. Espero que en el futuro cercano el autor del módulo bce lo termine, y obtengamos soporte completo para suspender / reanudar y sonar.

Source: https://habr.com/ru/post/472106/


All Articles