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-1Lo que funciona en este momento
- NVMe
- Teclado
- USB-C (Thunderbolt no se probó, cuando el módulo se carga automáticamente, suspende fuertemente el sistema)
- Barra táctil (con la capacidad de encender las teclas Fn, luz de fondo, ESC, etc.)
- Sonido (solo altavoces integrados)
- Módulo Wi-Fi (a través de brcmfmac y solo a través de iw)
- DisplayPort a través de USB-C
- Sensores
- Suspender / Reanudar (parcialmente)
- 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/HT208330https://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:- 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
- 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 / nvme0n1p1Despué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.
- 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) - Compruebe que ha aparecido un nuevo registro EFI BOOT además del dispositivo externo
- Seleccionamos el arranque desde una unidad usb externa, como durante la primera instalación (no olvide escribir module_blacklist = thunderbolt)
- 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
iwctlAtencion 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.