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.

Proxecto mbp2018-bridge-drv dividido en 3 compoñentes principais:

  • 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úcleo 5.3.5-1

O que está a funcionar neste momento

  1. NVMe
  2. teclado
  3. USB-C (Thunderbolt non se probou; cando o módulo se carga automaticamente, conxela o sistema)
  4. Barra táctil (coa capacidade de activar as teclas Fn, a retroiluminación, ESC, etc.)
  5. Son (só altofalantes incorporados)
  6. Módulo Wi-Fi (a través de brcmfmac e só a través de iw)
  7. DisplayPort a través de USB-C
  8. Sensores
  9. Suspender/Reanudar (parcialmente)
  10. 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

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

2. Asignar espazo libre mediante a Utilidade de Discos

Para comodidade, asignei inmediatamente 30 GB ao disco, formatándoo en exfat na propia Utilidade de Discos. Particionar unha utilidade de disco físico.

3. Crea unha imaxe ISO

Opcións:

  1. Podes seguir o camiño sinxelo e descargar unha imaxe preparada co núcleo 5.3.5-1 e parches de aunali1 ligazón á imaxe rematada
  2. Crea unha imaxe ti mesmo mediante archlive (requírese un sistema cunha distribución Archa)

    Conxunto archiso

    pacman -S archiso

    
    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

Instala o núcleo:


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

Rexistramos thunderbolt e applesmc en /etc/modprobe.d/blacklist.conf

blacklist thunderbolt
blacklist applesmc

Teclado, barra táctil, etc

Instala 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 a barra táctil:


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

Engade módulos ao inicio: /etc/modules-load.d/apple.conf

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

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

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

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.

  1. 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)

  2. Comprobamos que apareceu unha nova entrada EFI BOOT ademais do dispositivo externo
  3. Seleccionamos arrancar desde unha unidade USB externa, como durante a primeira instalación (non esquezas especificar module_blacklist=thunderbolt)
  4. 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:

MODULES=(ext4 applespi intel_lpss_pci spi_pxa2xx_platform bce)

Actualizando o kernel e initramfs.


mkinicpio -p linux-mbp

Configurando systemd-boot

Editamos o ficheiro /boot/loader/loader.conf, eliminamos todo o que hai e engadimos o seguinte:

default arch
timeout 5
editor 1

Vaia ao cartafol /boot/loader/entries, cree o ficheiro arch.conf e escriba:

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

Se usaches luks e lvm, entón

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

Reinicie en MacOS.

6. Configuración da wifi

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:

"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>"})

No seu caso, os nomes dos ficheiros poden diferir. Cópiaos desde o cartafol /usr/share/firmware/wifi á unidade flash e renomealos como segue:

    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>

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/


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/

Comprobación da funcionalidade do módulo:


rmmod brcmfmac
modprobe brcmfmac

Asegurámonos de que a interface de rede aparece a través de ifconfig/ip.
Configurando wifi mediante iwctl

Atención. Vía netctl, nmcli, etc. A interface non funciona, só a través de iwd.

Obrigamos a NetworkManager a usar iwd. Para iso, cree o ficheiro /etc/NetworkManager/NetworkManager.conf e escriba:

[device]
wifi.backend=iwd

Inicie o servizo NetworkManager


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

7. Son

Para que o son funcione, cómpre instalar pulseaudio:


sudo pacman -S pulseaudio

Descarga tres ficheiros:

Movémolos:

    /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/Retomar

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.

Fonte: www.habr.com

Engadir un comentario