Faceți ca MacBook Pro 2018 T2 să funcționeze cu ArchLinux (dualboot)

A existat destul de mult hype cu privire la faptul că noul cip T2 va face imposibilă instalarea Linux pe noile MacBook-uri 2018 cu o bară tactilă. Timpul a trecut, iar la sfârșitul anului 2019, dezvoltatorii terți au implementat o serie de drivere și corecții ale nucleului pentru interacțiunea cu cipul T2. Driverul principal pentru modelele MacBook 2018 și mai noi implementează funcționarea VHCI (operare la atingere/tastatură/etc.), precum și operarea sunetului.

Proiect mbp2018-bridge-drv împărțit în 3 componente principale:

  • BCE (Buffer Copy Engine) - stabilește principalul canal de comunicare cu T2. VHCI și audio necesită această componentă.
  • VHCI este un USB Virtual Host Controller; tastatura, mouse-ul și alte componente ale sistemului sunt furnizate de această componentă (alte drivere folosesc acest controler gazdă pentru a oferi mai multe funcționalități.
  • Audio - driver pentru interfața audio T2, în prezent acceptă numai ieșirea audio prin difuzoarele încorporate ale MacBook-ului


Al doilea proiect se numește macbook12-spi-driverși implementează capacitatea de a opera un driver de intrare pentru tastatură, trackpad SPI și bara tactilă pentru MacBook Pro Late 2016 și ulterioare. Unele drivere de tastatură/trackpad sunt acum incluse în nucleu, începând cu versiunea 5.3.

Suportul pentru dispozitive precum wi-fi, touchpad etc. a fost implementat, de asemenea, folosind patch-uri de kernel. Versiunea actuală a nucleului 5.3.5-1

Ce funcționează în acest moment

  1. NVMe
  2. claviatură
  3. USB-C (Thunderbolt nu a fost testat; atunci când modulul este încărcat automat, acesta îngheață sistemul)
  4. Touchbar (cu capacitatea de a activa tastele Fn, iluminarea de fundal, ESC etc.)
  5. Sunet (numai difuzoarele încorporate)
  6. Modul Wi-Fi (prin brcmfmac și numai prin iw)
  7. DisplayPort prin USB-C
  8. Senzori
  9. Suspendare/Reluare (parțial)
  10. etc ..

Acest tutorial este aplicabil pentru macbookpro15,1 și macbookpro15,2. Articolul a fost luat ca bază din Github în limba engleză. prin urmare. Nu totul din acest articol a funcționat, așa că a trebuit să găsesc singur o soluție.

Ce trebuie să instalați

  • Adaptor de andocare USB-C la USB (cel puțin trei intrări USB pentru conectarea unui mouse, tastatură, modem USB sau telefon în modul tethering). Acest lucru este necesar doar în primele etape de instalare
  • Tastatura USB
  • Unitate flash USB/USB-C de minim 4 GB

1. Dezactivați interdicția de pornire de pe medii externe

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

2. Alocați spațiu liber folosind Disk Utility

Pentru comoditate, am alocat imediat 30 GB pe disc, formatându-l în exfat în Utilitarul de disc. Partiționarea unui Utilitar de disc fizic.

3. Creați o imagine ISO

opțiuni:

  1. Puteți merge pe calea simplă și puteți descărca o imagine gata făcută cu kernel 5.3.5-1 și patch-uri de la aunali1 link către imaginea finalizată
  2. Creați singur o imagine prin archlive (este necesar un sistem cu o distribuție Archa)

    Set archiso

    pacman -S archiso

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

    Adăugați depozitul la pacman.conf:

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

    Ignorăm nucleul original în pacman.conf:

    IgnorePkg   = linux linux-headers
    

    Adăugați pachetele necesare, la sfârșit adăugați nucleul linux-mbp și anteturile linux-mbp

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

    Schimbăm scriptul pentru a funcționa în modul interactiv (înlocuim pacstrap -C cu 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!"
    }

    Formarea unei imagini:

    sudo ./build.sh -v

    Apăsați Y pentru a sări peste pachetele ignorate, apoi scrieți imaginea ISO pe unitatea flash USB:

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

4. Prima pornire

Reporniți cu unitatea flash și tastatura introduse. Apăsați opțiuni când apare mărul, selectați EFI BOOT.

Apoi, trebuie să apăsați tasta „e” și să introduceți la sfârșitul liniei de comandă module_blacklist=traznet. Dacă acest lucru nu se face, este posibil ca sistemul să nu pornească și va apărea o eroare Thunderbolt ICM.

Folosind fdisk/cfdisk găsim partiția noastră (pentru mine este nvme0n1p4), o formatăm și instalăm arhiva. Poți să folosești instrucțiuni oficiale sau lateral.

Nu creăm o partiție de boot; vom scrie bootloader-ul /dev/nvme0n1p1
După ce mediul din /mnt este complet format și înainte de a trece la arch-chroot, scrieți:

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

Adăugați în /etc/pacman.conf:


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

Instalați nucleul:


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

Înregistrăm thunderbolt și applesmc în /etc/modprobe.d/blacklist.conf

blacklist thunderbolt
blacklist applesmc

Tastatură, bară tactilă etc

Instaleaza yay:


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

Instalarea modulelor pentru ca bara tactilă să funcționeze:


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

Adăugați module la pornire: /etc/modules-load.d/apple.conf

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

Instalarea modulelor kernel pentru tastatură. În depozit anuali1 există un pachet gata făcut, se numește apple-bce-dkms-git. Pentru a-l instala, scrieți în consolă:

pacman -S apple-bce-dkms-git

În acest caz, modulul kernel va fi apelat măr-bce. În cazul auto-asamblarii, se numește ecb. În consecință, dacă doriți să înregistrați un modul în secțiunea MODULE din fișierul mkinicpio.conf, atunci nu uitați ce modul ați instalat.

Asamblare manuala:


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

Adăugați modulul bce sau apple-bce la pornire: /etc/modules-load.d/bce.conf

bce

Dacă doriți să utilizați butoanele Fn în mod implicit, atunci scrieți în fișierul /etc/modprobe.d/apple-tb.conf:

options apple-ib-tb fnmode=2

Actualizarea nucleului și a initramfs.


mkinitcpio -p linux-mbp

Instalați iwd:

sudo pacman -S networkmanager iwd

5. Încărcător

Odată ce toate pachetele principale sunt instalate în chroot, puteți începe instalarea bootloader-ului.

Nu am reușit să-l pun pe Grub la muncă. Grub pornește de pe o unitate USB externă, dar când încercați să îl înregistrați în nvme prin

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

sistemul a intrat în panică de kernel și, după repornire, nu a apărut un nou element prin opțiuni. Nu am găsit nicio soluție clară la această problemă și, prin urmare, am decis să încerc să implementez pornirea folosind systemd-boot.

  1. Lansa
    bootctl --path=/boot install

    și intrăm în panică nucleului. Opriți MacBook-ul, porniți-l din nou, faceți clic pe opțiuni (nu opriți hub-ul USB-C cu tastatură)

  2. Verificăm dacă pe lângă dispozitivul extern a apărut o nouă intrare EFI BOOT
  3. Selectăm să pornim de pe o unitate USB externă, ca și în timpul primei instalări (nu uitați să specificați module_blacklist=thunderbolt)
  4. Ne montem discul și intrăm în mediu prin arch-chroot


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

Dacă este necesar ca tastatura să funcționeze până când sistemul este încărcat complet (acest lucru este necesar când utilizați criptarea luks/dm-crypt), atunci scrieți-o în fișierul /etc/mkinicpio.conf din secțiunea MODULE:

MODULES=(ext4 applespi intel_lpss_pci spi_pxa2xx_platform bce)

Actualizarea nucleului și a initramfs.


mkinicpio -p linux-mbp

Configurarea systemd-boot

Edităm fișierul /boot/loader/loader.conf, ștergem totul din interior și adăugăm următoarele:

default arch
timeout 5
editor 1

Accesați folderul /boot/loader/entries, creați fișierul arch.conf și scrieți:

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

Dacă ai folosit luks și lvm, atunci

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

Reporniți în MacOS.

6. Configurare Wi-Fi

După cum sa dovedit în cele din urmă, MacOS stochează fișierele firmware pentru adaptorul wi-fi în folder /usr/share/firmware/wifi , și le puteți lua de acolo sub formă de blob și le puteți alimenta în modulul kernel brcmfmac. Pentru a afla ce fișiere folosește adaptorul dvs., deschideți un terminal în MacOS și scrieți:

ioreg -l | grep C-4364

Primim o listă lungă. Avem nevoie doar de fișiere din secțiune 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>"})

În cazul dvs., numele fișierelor pot diferi. Copiați-le din folderul /usr/share/firmware/wifi pe unitatea flash și redenumiți-le după cum urmează:

    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>

În acest caz, ultimul fișier text conține numele modelului; dacă modelul dvs. nu este macbookpro15,2, atunci trebuie să redenumiți acest fișier în conformitate cu modelul dvs. MacBook.

Reporniți în Arch.

Copiați fișierele de pe unitatea flash în folderul /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/

Verificarea funcționalității modulului:


rmmod brcmfmac
modprobe brcmfmac

Ne asigurăm că interfața de rețea apare prin ifconfig/ip.
Configurarea wifi prin iwctl

Atenţie. Prin netctl, nmcli etc. Interfața nu funcționează, doar prin iwd.

Forțăm NetworkManager să folosească iwd. Pentru a face acest lucru, creați fișierul /etc/NetworkManager/NetworkManager.conf și scrieți:

[device]
wifi.backend=iwd

Porniți serviciul NetworkManager


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

7. Sunetul

Pentru ca sunetul să funcționeze, trebuie să instalați pulseaudio:


sudo pacman -S pulseaudio

Descărcați trei fișiere:

Să le mutăm:

    /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. Suspendare/Reluare

În prezent 16.10.2019 trebuie să alegeți fie sunet, fie suspendare/reluare. Așteptăm ca autorul modulului bce să finalizeze funcționalitatea.

Pentru a construi un modul cu suport suspendat/reluat, trebuie să faceți următoarele:


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

Dacă ați instalat modulul apple-bce gata făcut din depozitul anuali1, atunci trebuie mai întâi să îl eliminați și abia apoi să asamblați și să instalați modulul bce cu suport pentru modul suspendare.

De asemenea, trebuie să adăugați modulul applesmc la lista neagră (dacă nu ați făcut acest lucru înainte) și să vă asigurați că în /boot/loader/entries/arch.conf în linia de opțiuni de la sfârșit este adăugat parametrul pcie_ports=compat.

În prezent, driverul touchbar se blochează când intră în modul suspendare, iar driverul thunderbolt uneori îngheață sistemul pentru mai mult de 30 de secunde și câteva minute la reluare. Acest lucru poate fi rezolvat prin descărcarea automată a modulelor problematice.

Creați un script /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

Faceți-l executabil:

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

Asta este tot pentru acum. Rezultatul este un sistem complet funcțional, cu excepția unor nuanțe cu suspendare/reluare. Nu au fost observate blocări sau panică ale nucleului pe parcursul mai multor zile de funcționare. Sper că în viitorul apropiat autorul modulului bce îl va termina și vom obține suport complet pentru suspendare/reluare și sunet.

Sursa: www.habr.com

Adauga un comentariu