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

Houve muito hype sobre o fato de que, devido ao novo chip T2, é impossível instalar o linux no novo MacBook 2018 com uma barra de toque. Com o passar do tempo, e até o final de 2019, desenvolvedores de terceiros implementaram vários drivers e patches de kernel para interagir com o chip T2. O driver principal para os modelos MacBook 2018 e mais recentes implementa o trabalho do VHCI (a operação do toque / teclado / etc.), bem como o funcionamento do som.

O projeto mbp2018-bridge-drv está dividido em 3 componentes principais:

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

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

Também foi implementado suporte para dispositivos como wi-fi, touchpad etc. usando patches do kernel. Atualmente a versão do kernel é 5.3.5-1

O que funciona no momento


  1. NVMe
  2. Teclado
  3. USB-C (Thunderbolt não foi testado, quando o módulo é carregado automaticamente, ele suspende o sistema firmemente)
  4. Barra de toque (com a capacidade de ativar as teclas Fn, luz de fundo, ESC, etc.)
  5. Som (apenas alto-falantes embutidos)
  6. Módulo Wi-Fi (via brcmfmac e somente através do iw)
  7. DisplayPort via USB-C
  8. Sensores
  9. Suspender / retomar (parcialmente)
  10. etc ..

Este tutorial é aplicável aos macbookpro15.1 e macbookpro15.2. O artigo foi retirado de um github em inglês daqui . Nem todo este artigo funcionou, então tive que procurar uma solução por conta própria.

O que você precisa instalar


  • USB-C Adaptador de dock USB (pelo menos três entradas USB para conectar um mouse, teclado, modem USB ou telefone no modo de compartilhamento). Isso é necessário apenas nos estágios iniciais da instalação.
  • Teclado USB
  • Unidade flash USB / USB-C com pelo menos 4 GB

1. Desative a proibição de baixar 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 no disco, formatando-o para exfat no próprio Utilitário de Disco. Particionando um disco físico em partições do Utilitário de Disco .

3. Forme uma imagem iso


Opções:

  1. Você pode seguir o caminho simples e baixar a imagem finalizada com o kernel 5.3.5-1 e os patches do link aunali1 para a imagem finalizada
  2. Crie uma imagem você mesmo através do archlive (você precisa de um sistema com distribuição arca)

    Instalar o archiso

    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 

    Ignore o kernel original no pacman.conf:

     IgnorePkg = linux linux-headers 

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

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

    Altere o script para funcionar no 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!" } 

    Formamos uma imagem:

     sudo ./build.sh -v 

    Pressione Y para pular os pacotes ignorados e, em seguida, escreva 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 inserida e o teclado. Pressione as opções quando a maçã aparecer, selecione EFI BOOT.

Em seguida, você precisa pressionar a tecla "e" e escrever module_blacklist = thunderbolt no final da linha de comando. Se isso não for feito, o sistema poderá não inicializar e o erro Thunderbolt ICM falhará.

Usando o fdisk / cfdisk, encontramos nossa partição (eu tenho a nvme0n1p4), formata e instala o arch. Você pode usar as instruções oficiais ou de terceiros .

Nós não criamos a partição de inicialização, vamos escrever o carregador de inicialização em / dev / nvme0n1p1
Após o ambiente em / mnt estar totalmente formado e antes de mudar para o arch-chroot, escrevemos:

 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 

Coloque thunderbolt e applesmc em /etc/modprobe.d/blacklist.conf

 blacklist thunderbolt blacklist applesmc 

Teclado, barra de toque, etc


Instale yay:

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

Instale os módulos para a barra de toque:

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

Adicione módulos ao carregamento automático: /etc/modules-load.d/apple.conf

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

Instale os módulos do kernel para o teclado. O repositório anuali1 possui um pacote pronto, chamado apple-bce-dkms-git . Para instalá-lo, escreva no console:

 pacman -S apple-bce-dkms-git 

Nesse caso, o módulo do kernel será chamado apple-bce . No caso de auto-montagem, é chamado bce . Portanto, se você deseja registrar o módulo na seção MODULES no arquivo mkinicpio.conf, não esqueça de 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 ao carregamento automático: /etc/modules-load.d/bce.conf

 bce 

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

 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 de Inicialização


Uma vez dentro do chroot, todos os pacotes principais estão instalados, você pode prosseguir com a instalação do gerenciador de inicialização.

Eu nunca consegui fazer o grub trabalhar. Em uma unidade USB externa, o grub é inicializado, 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 inteligível para esse problema e, portanto, decidi tentar implementar a inicialização usando o systemd-boot.

  1. Lançamos

     bootctl --path=/boot install 

    e voe para o pânico do kernel. Desligue o MacBook, ligue-o novamente, clique em opções (não desative o hub usb-c com o teclado)
  2. Verifique se um novo registro EFI BOOT apareceu além do dispositivo externo
  3. Selecionamos a inicialização em uma unidade USB externa, como durante a primeira instalação (não esqueça de escrever module_blacklist = thunderbolt)
  4. Montamos nosso disco e entramos no ambiente através do 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 se a criptografia luks / dm-crypt for usada), escrevemos 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 

Configurar systemd-boot


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

 default arch timeout 5 editor 1 

Vá para a pasta / boot / loader / inputs, 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


Como se viu, o MacOS armazena os arquivos de firmware do adaptador wi-fi na pasta / usr / share / firmware / wifi , e você pode retirá-los de lá na forma de blobs e alimentá-los no módulo do kernel brcmfmac. Para descobrir exatamente quais arquivos o seu adaptador usa, abra o terminal no MacOS e escreva:

 ioreg -l | grep C-4364 

Temos uma lista longa. Precisamos apenas de arquivos da seção 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>"}) 

No seu caso, os nomes dos arquivos podem ser diferentes. Copie-os da pasta / usr / share / firmware / wifi para a unidade flash USB e renomeie-a para a seguinte exibição:

  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> 

Nesse caso, o último arquivo de texto contém o nome do modelo, se o modelo não for macbookpro15,2, será necessário renomear esse arquivo de acordo com o modelo do macbook.

Reinicie em arco.

Copie arquivos da unidade flash USB 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/ 

Verifique a saúde do módulo:

 rmmod brcmfmac modprobe brcmfmac 

Garantimos que a interface de rede apareça através do ifconfig / ip.
Configurar wifi via iwctl

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

Fazendo o NetworkManager usar o iwd. Para fazer isso, crie o arquivo /etc/NetworkManager/NetworkManager.conf e escreva:

 [device] wifi.backend=iwd 

Iniciando o serviço NetworkManager

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

7. Som


Para emitir som, você deve instalar o pulseaudio:

 sudo pacman -S pulseaudio 

Baixe três arquivos:


Mova-os:

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


No momento, 16/10/2019 , você deve escolher o som ou suspender / retomar. Estamos aguardando o autor do módulo bce concluir a funcionalidade.

Para criar um módulo com suporte para susped / resume, 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 a partir do repositório anuali1, você deve primeiro removê-lo e, em seguida, coletar 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 você não tiver feito isso antes) e verifique se pcie_ports = compat foi adicionado ao /boot/loader/entries/arch.conf na linha de opções no final.

No momento, o driver da barra de toque trava quando você entra no modo de suspensão, e o driver do raio às vezes suspende o sistema por mais de 30 segundos e, ao reiniciar, por vários minutos. Isso pode ser corrigido baixando automaticamente os módulos com problemas.

Crie o 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 

Torne executável:

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

Por enquanto é tudo. O resultado é um sistema totalmente funcional, com exceção de algumas nuances com suspensão / retomada. Nenhuma falha e pânico do kernel foram observados por vários dias em atividade. Espero que, no futuro próximo, o autor do módulo bce o finalize e tenhamos suporte total para suspender / retomar e som.

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


All Articles