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.
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 kernel5.3.5-1
O que está funcionando no momento
NVMe
teclado
USB-C (Thunderbolt não foi testado; quando o módulo é carregado automaticamente, ele congela o sistema)
Touchbar (com a capacidade de ativar as teclas Fn, luz de fundo, ESC, etc.)
Som (somente alto-falantes integrados)
Módulo Wi-Fi (via brcmfmac e somente via iw)
DisplayPort por USB-C
Sensores
Suspender/Retomar (parcialmente)
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
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
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
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.
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)
Verificamos se uma nova entrada EFI BOOT apareceu além do dispositivo externo
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)
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:
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:
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:
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/
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.