Houve bastante alarde sobre o fato de que, devido ao novo chip T2, não era possível instalar Linux nos novos MacBook de 2018 com touch bar. O tempo passou e, no final de 2019, desenvolvedores de terceiros implementaram uma série de drivers e patches no kernel para interagir com o chip T2. O driver principal para MacBook modelos 2018 e mais recentes implementa a funcionalidade VHCI (touch/keyboards/etc.), bem como o funcionamento do áudio.
Projeto dividido em 3 componentes principais:
- BCE (Buffer Copy Engine) — estabelece o canal principal de comunicação com o T2. VHCI e Audio requerem este componente.
- VHCI — é um controlador de host USB virtual; o teclado, o mouse e outros componentes do sistema são fornecidos por este componente (outros drivers usam este controlador de host para oferecer maior funcionalidade).
- Áudio — driver para o interface de áudio T2, atualmente suportado apenas para saída de som através dos alto-falantes integrados do MacBook.
O segundo projeto é chamado , e ele implementa a possibilidade de operação do driver de entrada para o teclado, trackpad SPI e touch bar para MacBook Pro de final de 2016 e versões posteriores. Parte dos drivers para teclado/trackpad agora está incluída no kernel, a partir da versão 5.3.
Além disso, foi implementado suporte para dispositivos como wi-fi, trackpad, etc., através de patches no kernel. Neste momento, a versão do kernel
O que está funcionando atualmente
- NVMe
- Teclado
- USB-C (Thunderbolt não foi testado, ao carregar o módulo automaticamente, o sistema trava completamente)
- Touch bar (com a possibilidade de ativar teclas Fn, retroiluminação, ESC, etc.)
- Áudio (apenas alto-falantes integrados)
- Módulo Wi-Fi (através de brcmfmac e apenas através de iw)
- DisplayPort via USB-C
- Sensores
- Suspender/Retomar (parcialmente)
- etc..
Este tutorial é aplicável para macbookpro15,1 e macbookpro15,2. Foi usada como base um artigo do GitHub em inglês . Nem tudo deste artigo funcionou, então foi necessário buscar solução por conta própria.
O que será necessário para a instalação
- Adaptador de dock USB-C para USB (pelo menos três entradas USB para conectar um mouse, teclado, modem USB ou telefone em modo tethering). Isso é necessário apenas nas primeiras etapas da instalação.
- Teclado USB
- Pen drive USB/USB-C com pelo menos 4GB
1. Desabilitar a restrição de inicialização a partir de dispositivos externos
2. Alocar espaço livre usando o Disk Utility
Para facilitar, eu aloquei imediatamente 30GB no disco, formatando-o em exfat no próprio Disk Utility. .
3. Criando a imagem ISO
Opções:
- Você pode optar pelo caminho mais simples e baixar uma imagem pronta com o kernel 5.3.5-1 e os patches de
- Criar a imagem manualmente através do archlive (é necessário ter um sistema com a distribuição Arch)
Instalando
pacman -S archisocp -r /usr/share/archiso/configs/releng/ archlive cd archliveAdicionando o repositório no pacman.conf:
[mbp] Server = https://packages.aunali1.com/archlinux/$repo/$archIgnorando o kernel original no pacman.conf:
IgnorePkg = linux linux-headersAdicionando os pacotes necessários; no final, adicionamos o kernel linux-mbp e linux-mbp-headers
... wvdial xl2tpd linux-mbp linux-mbp-headersAlterando o script para funcionar no modo interativo (substituindo 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!" }Criando a imagem:
sudo ./build.sh -vPressione Y para pular os pacotes ignorados, em seguida, grave a imagem ISO em um pen drive USB:
sudo dd if=out/archlinux*.iso of=/dev/sdb bs=1M
4. Primeiro boot
Reinicie com o pen drive e teclado inseridos. Pressione options ao aparecer a maçã, selecione EFI BOOT.
Em seguida, é necessário pressionar a tecla "e" e adicionar ao final da linha de comando module_blacklist=thunderbolt. Se não fizer isso, o sistema pode não iniciar e um erro Thunderbolt ICM Error aparecerá.
Com fdisk/cfdisk, encontramos nossa partição (para mim é nvme0n1p4), formatamos e instalamos o Arch. Você pode usar ou .
Não criaremos a partição de inicialização, o gerenciador de inicialização será instalado em /dev/nvme0n1p1
Depois que o ambiente estiver completamente configurado em /mnt e antes de entrar no arch-chroot, escreva:
mount /dev/nvme0n1p1 /mnt/boot
arch-chroot /mnt /bin/bash
Adicionar em /etc/pacman.conf:
[mbp]
Server = https://packages.aunali1.com/archlinux/$repo/$arch
Instalando o kernel:
sudo pacman -S linux-mbp linux-mbp-headers
sudo mkinitcpio -p linux-mbp
Registrar thunderbolt e applesmc em /etc/modprobe.d/blacklist.conf
blacklist thunderbolt
blacklist applesmc
Teclado, touch bar, etc.
Instalando yay:
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 do touch bar:
git clone --branch mbp15 https://github.com/roadrunner2/macbook12-spi-driver.git
cd macbook12-spi-driver
make install
Adicionando módulos na inicialização automática: /etc/modules-load.d/apple.conf
industrialio_triggered_buffer
apple-ibridge
apple-ib-tb
apple-ib-als
Instalamos os módulos do kernel para o funcionamento do teclado. No repositório há um pacote pronto chamado apple-bce-dkms-git. Para instalá-lo, escreva no terminal:
pacman -S apple-bce-dkms-gitNeste caso, o módulo do kernel será chamado apple-bce. No caso de montagem própria, ele é chamado bce. Portanto, se você quiser registrar o módulo na seção MODULES no arquivo mkinicpio.conf, não se esqueça de qual módulo você instalou.
Compilação 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
Adicionamos o módulo bce ou apple-bce à inicialização automática: /etc/modules-load.d/bce.conf
bceSe você quiser usar as teclas Fn por padrão, adicione ao arquivo /etc/modprobe.d/apple-tb.conf:
options apple-ib-tb fnmode=2Atualizando o kernel e o initramfs.
mkinitcpio -p linux-mbp
Vamos instalar o iwd:
sudo pacman -S networkmanager iwd5. Carregador de Inicialização
Depois que todos os pacotes principais estiverem instalados dentro do chroot, podemos prosseguir com a instalação do carregador de inicialização.
Eu não consegui fazer o grub funcionar. O grub carrega de um pen drive USB externo, mas ao tentar registrá-lo no nvme através de
grub-install —target=x86_64-efi —efi-directory=/boot —bootloader-id=grub
o sistema caía em panic do kernel e, após reiniciar, não aparecia a nova entrada através de options. Não encontrei uma solução clara para esse problema e, por isso, decidi tentar implementar a inicialização com o systemd-boot.
- Iniciamos
bootctl --path=/boot installe caímos em panic do kernel. Desligamos o MacBook, ligamos novamente, pressionamos options (não desconectamos o hub USB-C com o teclado)
- Verificamos se há uma nova entrada EFI BOOT além do dispositivo externo.
- Selecionamos a inicialização a partir do pen drive USB externo, como na primeira instalação (não se esqueça de adicionar module_blacklist=thunderbolt)
- Montamos nosso disco e acessamos o 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é o carregamento completo do sistema (o que é necessário ao usar criptografia luks/dm-crypt), adicionamos ao 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, removemos tudo que está dentro e inserimos o seguinte:
default arch
timeout 5
editor 1
Vamos para a pasta /boot/loader/entries, criamos o arquivo arch.conf e escrevemos:
título arch
linux /vmlinuz-linux-mbp
initrd /initramfs-linux-mbp.img
opções root=/dev/<b>nvme0n1p4</b> rw pcie_ports=compat
Caso tenha usado luks e lvm,
opções cryptdevice=\/dev\/<b>nvme0n1p4</b>:luks root=\/dev\/mapper\/vz0-root rw pcie_ports=compat
Reiniciamos no MacOS.
6. Configuração do Wi-Fi
Como descobrimos, os arquivos de firmware para o adaptador Wi-Fi do MacOS são armazenados na pasta /usr/share/firmware/wifi , e podemos pegá-los de lá como blobs e fornecê-los ao módulo do kernel brcmfmac. Para descobrir quais arquivos seu adaptador usa, abrimos o terminal no MacOS e digitamos:
ioreg -l | grep C-4364Recebemos uma longa lista. Precisamos apenas dos 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 o pen drive e renomeie no seguinte formato:
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 do modelo, se seu modelo não for macbookpro15,2, será necessário renomear esse arquivo de acordo com seu modelo de MacBook.
Reiniciamos no Arch.
Copie os arquivos do pen drive 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 funcionalidade do módulo:
rmmod brcmfmac
modprobe brcmfmac
Certifique-se de que a interface de rede apareceu através do ifconfig/ip.
Configure o wifi através de
Atenção. Através do netctl, nmcli, etc. a interface não funciona, apenas através do iwd.
Forçamos o NetworkManager a usar o iwd. Para isso, criamos o arquivo /etc/NetworkManager/NetworkManager.conf e escrevemos:
[device]
wifi.backend=iwd
Inicie o serviço NetworkManager
sudo systemctl start NetworkManager.service
sudo systemctl enable NetworkManager.service
7. Áudio
Para que o áudio funcione, é necessário 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.rules8. Suspender/Retomar
No momento 16.10.2019 temos que escolher entre áudio ou suspender/retomar. Vamos esperar até que o autor do módulo bce finalize a funcionalidade.
Para compilar o módulo com suporte a suspend/resume, será necessário executar 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, será necessário removê-lo primeiro e só então compilar e instalar o módulo bce com suporte ao modo suspend.
Além disso, é necessário adicionar o módulo applesmc à blacklist (se você não fez isso antes) e garantir que em /boot/loader/entries/arch.conf na linha de opções, o parâmetro foi adicionado no final pcie_ports=compat.
Atualmente, o driver do Touch Bar falha ao entrar no modo suspend, e o driver Thunderbolt às vezes trava o sistema por mais de 30 segundos, e ao retomar — por vários minutos. Isso pode ser corrigido através da descarregamento automático dos módulos problemáticos.
Crie um 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-o executável:
sudo chmod +x /lib/systemd/system-sleep/rmmod.sh Por enquanto é tudo. O sistema se torna totalmente funcional, exceto por alguns detalhes com suspend/resume. Não foram observadas quedas ou kernel panic ao longo de vários dias de up-time. Espero que em breve o autor do módulo bce finalize, e tenhamos suporte completo para suspend/resume e áudio.
Fonte: habr.com
