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-1O que funciona no momento
- NVMe
- Teclado
- USB-C (Thunderbolt não foi testado, quando o módulo é carregado automaticamente, ele suspende o sistema firmemente)
- Barra de toque (com a capacidade de ativar as teclas Fn, luz de fundo, ESC, etc.)
- Som (apenas alto-falantes embutidos)
- Módulo Wi-Fi (via brcmfmac e somente através do iw)
- DisplayPort via USB-C
- Sensores
- Suspender / retomar (parcialmente)
- 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/HT208330https://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:- 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
- 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 / nvme0n1p1Apó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.
- 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) - Verifique se um novo registro EFI BOOT apareceu além do dispositivo externo
- Selecionamos a inicialização em uma unidade USB externa, como durante a primeira instalação (não esqueça de escrever module_blacklist = thunderbolt)
- 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
iwctlAtençã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.