Fazendo o MacBook Pro 2018 T2 funcionar com ArchLinux (dualboot)

Tem havido muito entusiasmo sobre o fato de que o novo chip T2 tornará impossível a instalação do Linux nos novos MacBooks 2018 com touchbar. O tempo passou e, no final de 2019, desenvolvedores terceirizados implementaram vários drivers e patches de kernel para interação com o chip T2. O driver principal para modelos de MacBook 2018 e mais recentes implementa operação VHCI (operação de toque/teclado/etc.), bem como operação de som.

Projeto mbp2018-bridge-drv dividido em 3 componentes principais:

  • BCE (Buffer Copy Engine) - estabelece o principal canal de comunicação com T2. VHCI e Áudio requerem este componente.
  • VHCI é um controlador de host virtual USB; o teclado, mouse e outros componentes do sistema são fornecidos por este componente (outros drivers usam este controlador host para fornecer mais funcionalidade.
  • Áudio - driver para a interface de áudio T2, atualmente suporta apenas saída de áudio através dos alto-falantes integrados do MacBook


O segundo projeto é denominado driver macbook12-spie implementa a capacidade de operar um driver de entrada para teclado, trackpad SPI e touchbar para MacBook Pro final de 2016 e posterior. Alguns drivers de teclado/trackpad agora estão incluídos no kernel, começando com a versão 5.3.

O suporte para dispositivos como wi-fi, touchpad, etc. também foi implementado usando patches do kernel. Versão atual do kernel 5.3.5-1

O que está funcionando no momento

  1. NVMe
  2. teclado
  3. USB-C (Thunderbolt não foi testado; quando o módulo é carregado automaticamente, ele congela o sistema)
  4. Touchbar (com a capacidade de ativar as teclas Fn, luz de fundo, ESC, etc.)
  5. Som (somente alto-falantes integrados)
  6. Módulo Wi-Fi (via brcmfmac e somente via iw)
  7. DisplayPort por USB-C
  8. Sensores
  9. Suspender/Retomar (parcialmente)
  10. etc ..

Este tutorial é aplicável para macbookpro15,1 e macbookpro15,2. O artigo foi retirado do Github em inglês. por isso. Nem tudo neste artigo funcionou, então tive que encontrar uma solução sozinho.

O que você precisa para instalar

  • Adaptador de acoplamento USB-C para USB (pelo menos três entradas USB para conectar mouse, teclado, modem USB ou telefone no modo tethering). Isso só é necessário durante os primeiros estágios de instalação
  • Teclado USB
  • Unidade flash USB/USB-C mínimo de 4 GB

1. Desative a proibição de inicialização a partir de mídia externa

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

2. Aloque espaço livre usando o Utilitário de Disco

Por conveniência, aloquei imediatamente 30 GB para o disco, formatando-o em exfat no próprio Utilitário de Disco. Particionando um Utilitário de Disco Físico.

3. Crie uma imagem ISO

Opções:

  1. Você pode seguir o caminho simples e baixar uma imagem pronta com kernel 5.3.5-1 e patches em aunali1 link para a imagem finalizada
  2. Crie você mesmo uma imagem via archlive (é necessário um sistema com distribuição Archa)

    Conjunto arquiso

    pacman -S archiso

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

    Adicione o repositório ao pacman.conf:

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

    Ignoramos o kernel original em pacman.conf:

    IgnorePkg   = linux linux-headers
    

    Adicione os pacotes necessários, no final adicione o kernel linux-mbp e linux-mbp-headers

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

    Alteramos o script para funcionar em modo interativo (substitua 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!"
    }

    Formando uma imagem:

    sudo ./build.sh -v

    Pressione Y para pular pacotes ignorados e, em seguida, grave a imagem iso na unidade flash USB:

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

4. Primeira inicialização

Reinicie com a unidade flash e o teclado inseridos. Pressione opções quando a maçã aparecer, selecione EFI BOOT.

Em seguida, você precisa pressionar a tecla “e” e digitar no final da linha de comando module_blacklist = raio. Se isso não for feito, o sistema poderá não inicializar e um erro Thunderbolt ICM aparecerá.

Usando fdisk/cfdisk encontramos nossa partição (para mim é nvme0n1p4), formatamos e instalamos o arquivo. Você pode usar instrução oficial ou lateralmente.

Não estamos criando uma partição de boot; vamos escrever o bootloader em /dev/nvme0n1p1
Depois que o ambiente em /mnt estiver completamente formado e antes de passar para o arch-chroot, escreva:

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

Adicione ao /etc/pacman.conf:


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

Instale o kernel:


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

Registramos Thunderbolt e Applesmc em /etc/modprobe.d/blacklist.conf

blacklist thunderbolt
blacklist applesmc

Teclado, barra de toque, etc.

Instale sim:


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

Instalando módulos para o funcionamento da touchbar:


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

Adicione módulos à inicialização: /etc/modules-load.d/apple.conf

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

Instalando módulos do kernel para o teclado. No repositório anuali1 existe um pacote pronto, chama-se apple-bce-dkms-git. Para instalá-lo, escreva no console:

pacman -S apple-bce-dkms-git

Neste caso, o módulo do kernel será chamado maçã-bce. No caso de automontagem, é denominado bce. Assim, se você deseja registrar um módulo na seção MODULES do arquivo mkinicpio.conf, não esqueça qual módulo você instalou.

Montagem 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

Adicione o módulo bce ou apple-bce à inicialização: /etc/modules-load.d/bce.conf

bce

Se você quiser usar os botões Fn por padrão, escreva no arquivo /etc/modprobe.d/apple-tb.conf:

options apple-ib-tb fnmode=2

Atualizando o kernel e o initramfs.


mkinitcpio -p linux-mbp

Instale o iWD:

sudo pacman -S networkmanager iwd

5. Carregador

Depois que todos os pacotes principais estiverem instalados dentro do chroot, você poderá começar a instalar o bootloader.

Não consegui fazer o grub funcionar. O Grub inicializa a partir de uma unidade USB externa, mas quando você tenta registrá-lo no nvme via

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

o sistema entrou em pânico no kernel e, após a reinicialização, um novo item por meio de opções não apareceu. Não encontrei nenhuma solução clara para este problema e, portanto, decidi tentar implementar a inicialização usando systemd-boot.

  1. Lançamos
    bootctl --path=/boot install

    e entramos em pânico no kernel. Desligue o MacBook, ligue-o novamente, clique em opções (não desligue o hub USB-C com teclado)

  2. Verificamos se uma nova entrada EFI BOOT apareceu além do dispositivo externo
  3. Optamos por inicializar a partir de uma unidade USB externa, como durante a primeira instalação (não se esqueça de especificar module_blacklist=thunderbolt)
  4. Montamos nosso disco e entramos no ambiente via arch-chroot


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

Se for necessário que o teclado funcione até que o sistema esteja totalmente carregado (isso é necessário ao usar a criptografia luks/dm-crypt), escreva-o no arquivo /etc/mkinicpio.conf na seção MODULES:

MODULES=(ext4 applespi intel_lpss_pci spi_pxa2xx_platform bce)

Atualizando o kernel e o initramfs.


mkinicpio -p linux-mbp

Configurando o systemd-boot

Editamos o arquivo /boot/loader/loader.conf, excluímos tudo dentro e adicionamos o seguinte:

default arch
timeout 5
editor 1

Vá para a pasta /boot/loader/entries, crie o arquivo arch.conf e escreva:

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

Se você usou luks e lvm, então

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

Reinicie no MacOS.

6. Configuração de Wi-Fi

No final das contas, o MacOS armazena os arquivos de firmware do adaptador wi-fi na pasta /usr/share/firmware/wi-fi , e você pode pegá-los de lá na forma de blobs e alimentá-los no módulo do kernel brcmfmac. Para descobrir quais arquivos seu adaptador usa, abra um terminal no MacOS e escreva:

ioreg -l | grep C-4364

Temos uma longa lista. Precisamos apenas de arquivos da seção Arquivos 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 arquivos podem ser diferentes. Copie-os da pasta /usr/share/firmware/wifi para a unidade flash e renomeie-os da seguinte forma:

    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 arquivo de texto contém os nomes dos modelos; se o seu modelo não for macbookpro15,2, você precisará renomear este arquivo de acordo com o modelo do seu MacBook.

Reinicie no Arch.

Copie os arquivos da unidade flash para a pasta /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/

Verificando a funcionalidade do módulo:


rmmod brcmfmac
modprobe brcmfmac

Garantimos que a interface de rede apareça através de ifconfig/ip.
Configurando wi-fi via iwctl

Atenção. Via netctl, nmcli, etc. A interface não funciona, apenas através do iwd.

Forçamos o NetworkManager a usar o iwd. Para fazer isso, crie o arquivo /etc/NetworkManager/NetworkManager.conf e escreva:

[device]
wifi.backend=iwd

Inicie o serviço NetworkManager


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

7. Som

Para que o som funcione, você precisa instalar o pulseaudio:


sudo pacman -S pulseaudio

Baixe três arquivos:

Vamos movê-los:

    /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 você deve escolher som ou suspender/continuar. Estamos aguardando que o autor do módulo bce conclua a funcionalidade.

Para construir um módulo com suporte para suspensão/retomada, você deve fazer 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 você instalou o módulo apple-bce pronto do repositório anuali1, primeiro você deve removê-lo e só então montar e instalar o módulo bce com suporte ao modo de suspensão.

Além disso, você precisa adicionar o módulo applesmc à lista negra (se ainda não tiver feito isso) e certificar-se de que em /boot/loader/entries/arch.conf na linha de opções no final o parâmetro seja adicionado pcie_ports = compatibilidade.

Atualmente, o driver da barra de toque trava ao entrar no modo de suspensão, e o driver Thunderbolt às vezes congela o sistema por mais de 30 segundos e por vários minutos ao reiniciar. Isso pode ser corrigido descarregando automaticamente módulos problemáticos.

Crie um roteiro /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

Torne-o executável:

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

É tudo por agora. O resultado é um sistema completamente funcional, com exceção de algumas nuances com suspensão/retomada. Nenhuma falha ou kernel panic foi observado durante vários dias de atividade. Espero que em um futuro próximo o autor do módulo bce o conclua e obtenhamos suporte total para suspensão/retomada e som.

Fonte: habr.com

Adicionar um comentário