Fà chì MacBook Pro 2018 T2 funziona cù ArchLinux (dualboot)

Ci hè statu un pocu di hype annantu à u fattu chì u novu chip T2 farà impussibile installà Linux nantu à i novi MacBooks 2018 cù una touchbar. U tempu passava, è à a fine di u 2019, i sviluppatori di terzu anu implementatu una quantità di drivers è patch di kernel per l'interazzione cù u chip T2. U mutore principale per i mudelli MacBook 2018 è più recenti implementa l'operazione VHCI (funzionamentu toccu / teclatu / etc.), è ancu u funziunamentu di u sonu.

U prugettu mbp2018-bridge-drv divisu in 3 cumpunenti principali:

  • BCE (Buffer Copy Engine) - stabilisce u canali di cumunicazione principale cù T2. VHCI è Audio necessitanu stu cumpunente.
  • VHCI — это виртуальный хост-контроллер USB; клавиатура, мышь и другие компоненты системы предоставляются этим компонентом (другие драйверы используют этот хост-контроллер для обеспечения большей функциональности.
  • Audio — драйвер для аудиоинтерфейса T2, в настоящее время поддерживается только вывод звука через встроенные динамики MacBook


U secondu prughjettu hè chjamatu macbook12-spi-driver, и он реализует возможность работы драйвера ввода для клавиатуры, трекпада SPI, тачбара для MacBook Pro конца 2016 г. и более поздних версий. Часть драйверов для клавиатуры/трекпада теперь включена в ядро, начиная с версии 5.3.

Также была реализована поддержка таких устройств, как wi-fi, тачпад, etc, с помощью патчей ядра. На текущий момент версия ядра 5.3.5-1

Ciò chì travaglia in u mumentu

  1. NVMe
  2. Tutu
  3. USB-C (Thunderbolt ùn hè micca statu pruvatu; quandu u modulu hè caricatu automaticamente, congela u sistema)
  4. Touchbar (cù a capacità di accende i tasti Fn, retroilluminazione, ESC, etc.)
  5. Sonu (solu parlanti integrati)
  6. Modulu Wi-Fi (via brcmfmac è solu via iw)
  7. DisplayPort nantu à USB-C
  8. Sensori
  9. Suspende / Riprendu (parzialmente)
  10. etc.

Stu tutoriale hè applicabile per macbookpro15,1 è macbookpro15,2. L'articulu hè statu pigliatu cum'è una basa da Github in inglese. da quì. Micca tuttu in questu articulu hà travagliatu, cusì aghju avutu à truvà una suluzione per mè stessu.

Ciò chì avete bisognu per a stallazione

  • Adattatore di docking USB-C à USB (almenu trè ingressi USB per cunnette un mouse, tastiera, modem USB o telefunu in modu di tethering). Questu hè necessariu solu durante i primi fasi di a stallazione
  • Tastiera USB
  • USB/USB-C флешка минимум на 4Гб

1. Disable a prohibizione di booting da i media esterni

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

2. Allocate spaziu liberu usendu Utilità di discu

Для удобства я сразу выделил 30Гб на диск, отформатировав его в exfat в самом Disk Utility. Particionà una Utilità di discu di discu fisicu.

3. Формируем iso образ

Opzioni:

  1. Pudete andà à a strada simplice è scaricate una maghjina pronta cù u kernel 5.3.5-1 è patches da aunali1 ligame à l'imagine finita
  2. Crea una maghjina sè stessu via archlive (hè necessariu un sistema cù una distribuzione Archa)

    Stallà archisu

    pacman -S archiso

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

    Добавляем репозиторий в pacman.conf:

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

    Игнорируем оригинальное ядро в pacman.conf:

    IgnorePkg   = linux linux-headers
    

    Aghjunghjite i pacchetti necessarii, à a fine aghjunghje u kernel linux-mbp è linux-mbp-headers

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

    Cambiamu u script per travaglià in modu interattivu (sustituisci pacstrap -C cù 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!"
    }

    Formazione di l'imaghjini:

    sudo ./build.sh -v

    Pulsà Y per saltà i pacchetti ignorati, dopu scrivite l'imaghjini iso à u drive flash USB:

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

4. Prima boot

Reboot cù u flash drive è u teclatu inseriti. Pulse l'opzioni quandu a mela appare, selezziunate EFI BOOT.

Dopu, avete bisognu di appughjà a chjave "e" è entre à a fine di a linea di cumanda module_blacklist=thunderbolt. Se questu ùn hè micca fattu, u sistema ùn pò micca boot è un Errore ICM Thunderbolt appariscerà.

Utilizendu fdisk / cfdisk truvamu a nostra partizione (per mè hè nvme0n1p4), formate è installate l'archiviu. Pudete aduprà istruzioni ufficiali o di latu.

Загрузочный раздел не создаем, загрузчик будем писать в /dev/nvme0n1p1
После того, как полностью сформировано окружение в /mnt и перед тем, как перейти в arch-chroot, пишем:

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

Aghjunghjite à /etc/pacman.conf:


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

Installa u kernel:


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

Registramu thunderbolt è applesmc in /etc/modprobe.d/blacklist.conf

blacklist thunderbolt
blacklist applesmc

Tastiera, touchbar, etc

Installa yay:


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

Installazione di moduli per a touchbar per travaglià:


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

Добавляем модули в автозагрузку: /etc/modules-load.d/apple.conf

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

Installazione di moduli di kernel per u teclatu. In u repository anuali1 ci hè un pacchettu ready-made, si chjama apple-bce-dkms-git. Чтобы его установить, пишем в консоли:

pacman -S apple-bce-dkms-git

In questu casu, u modulu kernel serà chjamatu mela-bce. In u casu di self-assemblea, hè chjamatu ecb. Соответственно, если вы хотите прописать модуль в раздел MODULES в файл mkinicpio.conf, то не забудьте, какой модуль вы устанавливали.

Assemblage 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

Aghjunghjite u modulu bce o apple-bce à l'iniziu: /etc/modules-load.d/bce.conf

bce

Se vulete usà i buttoni Fn per automaticamente, allora scrivite in u schedariu /etc/modprobe.d/apple-tb.conf:

options apple-ib-tb fnmode=2

Aghjurnà u kernel è initramfs.


mkinitcpio -p linux-mbp

Installa iwd:

sudo pacman -S networkmanager iwd

5. Loader

Una volta chì tutti i pacchetti principali sò stallati in u chroot, pudete inizià a stallazione di u bootloader.

Ùn aghju micca pussutu mette grub à travaglià. Grub boots da una unità USB esterna, ma quandu pruvate à registrà in nvme via

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

u sistema hè andatu in u panicu di u kernel, è dopu avè riavviatu un novu articulu per l'opzioni ùn hè micca apparsu. Ùn aghju micca trovu una suluzione chjara à stu prublema è dunque decisu di pruvà à implementà u booting cù systemd-boot.

  1. Lanciari
    bootctl --path=/boot install

    и улетаем в kernel panic. Выключаем MacBook, включаем заново, жмем options (usb-c хаб с клавиатурой не отключаем)

  2. Avemu verificatu chì una nova entrata EFI BOOT hè apparsu in più di u dispositivu esternu
  3. Выбираем загрузку с внешнего usb-диска, как при первой установке (не забываем прописать module_blacklist=thunderbolt)
  4. Монтируем наш диск и переходим в окружение через arch-chroot


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

Se hè necessariu per u teclatu per travaglià finu à chì u sistema hè cumplettamente caricatu (questu hè necessariu quandu si usa l'encryption luks/dm-crypt), allora scrivite in u schedariu /etc/mkinicpio.conf in a sezione MODULI:

MODULES=(ext4 applespi intel_lpss_pci spi_pxa2xx_platform bce)

Aghjurnà u kernel è initramfs.


mkinicpio -p linux-mbp

Configurazione di systemd-boot

Editemu u schedariu /boot/loader/loader.conf, sguassate tuttu ciò chì dentru, è aghjunghje i seguenti:

default arch
timeout 5
editor 1

Andà à u cartulare /boot/loader/entries, crea u schedariu arch.conf è scrivite:

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

В случае, если использовали luks и lvm, то

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

Reboot in MacOS.

6. Setup Wi-Fi

Cum'è a fine, MacOS guarda i schedarii di firmware per l'adattatore wi-fi in u cartulare /usr/share/firmware/wifi , è pudete piglià da quì in forma di blobs è alimentate à u modulu di kernel brcmfmac. Per sapè quale fugliali usa u vostru adattatore, apre un terminal in MacOS è scrivite:

ioreg -l | grep C-4364

Avemu una longa lista. Avemu bisognu solu i schedari da a sezione Requested Files:

"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>"})

In u vostru casu, i nomi di i schedari ponu differisce. Copia da u cartulare /usr/share/firmware/wifi à u flash drive è rinominali cum'è seguitu:

    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>

In questu casu, l'ultimu schedariu di testu cuntene i nomi di mudelli se u vostru mudellu ùn hè micca macbookpro15,2, allora avete bisognu di rinominà stu schedariu in cunfurmità cù u vostru mudellu MacBook.

Riavvia in Arch.

Copia i schedari da u flash drive à u cartulare /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/

Verificate a funziunalità di u modulu:


rmmod brcmfmac
modprobe brcmfmac

Avemu sicuru chì l'interfaccia di a reta cumparisce attraversu ifconfig/ip.
Configurazione di u wifi via iwctl

Внимание. Через netctl, nmcli, etc. интерфейс не работает, только через iwd.

Заставляем NetworkManager использовать iwd. Для этого создаем файл /etc/NetworkManager/NetworkManager.conf и пишем:

[device]
wifi.backend=iwd

Cumincià u serviziu NetworkManager


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

7. Sonu

Per fà u sonu per travaglià, avete bisognu di stallà pulseaudio:


sudo pacman -S pulseaudio

Scaricate trè file:

Movemu li:

    /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. Suspend/Resume

A stu mumentu 16.10.2019 duvete sceglie u sonu o sospende / riprende. Aspittemu chì l'autore di u modulu bce compie a funziunalità.

Per custruisce un modulu cù supportu suspettu / currículum, duvete fà e seguenti:


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 avete installatu u modulu apple-bce ready-made da u repository anuali1, allora duvete prima sguassate è solu dopu assemble è installate u modulu bce cù u supportu di modu di sospensione.

Также, необходимо добавить в blacklist модуль applesmc (если вы этого не сделали ранее) и убедиться, что в /boot/loader/entries/arch.conf в строке options в конце добавлен параметр pcie_ports=compat.

На текущий момент драйвер тачбара вылетает при входе в режим suspend, а драйвер thunderbolt иногда подвешивает систему более чем на 30 секунд, а при возобновлении — на несколько минут. Это можно исправить путем автоматической выгрузки проблемных модулей.

Создайте скрипт /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

Сделайте его исполняемым:

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

Hè tuttu per avà. U risultatu hè un sistema cumpletamente funzionale, cù l'eccezzioni di qualchi sfumature cù suspend / currículum. Nisun crash o panic di kernel sò stati osservati durante parechji ghjorni di uptime. Spergu chì in un futuru vicinu l'autore di u modulu bce finisce, è averemu un supportu tutale per suspend / resume è sonu.

Source: www.habr.com

Add a comment