Natjerati MacBook Pro 2018 T2 da radi s ArchLinuxom (dvostruko pokretanje)

Bilo je dosta pompe oko činjenice da će novi T2 čip onemogućiti instaliranje Linuxa na nove MacBookove iz 2018. s trakom osjetljivom na dodir. Vrijeme je prolazilo, a krajem 2019. programeri trećih strana implementirali su brojne upravljačke programe i zakrpe za kernel za interakciju s T2 čipom. Glavni upravljački program za MacBook modele 2018. i novije implementira VHCI rad (operacija dodirom/tipkovnicom/itd.), kao i rad zvuka.

Projekt mbp2018-most-drv podijeljen u 3 glavne komponente:

  • BCE (Buffer Copy Engine) - uspostavlja glavni komunikacijski kanal s T2. VHCI i Audio zahtijevaju ovu komponentu.
  • VHCI je USB virtualni host kontroler; tipkovnica, miš i ostale komponente sustava osiguravaju se pomoću ove komponente (drugi upravljački programi koriste ovaj glavni upravljač za pružanje više funkcionalnosti.
  • Audio - upravljački program za T2 audio sučelje, trenutno podržava samo audio izlaz kroz MacBook ugrađene zvučnike


Drugi projekt je tzv macbook12-spi-upravljački program, i implementira mogućnost upravljanja ulaznim drajverom za tipkovnicu, SPI trackpad i touchbar za MacBook Pro krajem 2016. i kasnije. Neki upravljački programi za tipkovnicu/trackpad sada su uključeni u kernel, počevši od verzije 5.3.

Podrška za uređaje kao što su wi-fi, touchpad itd. također je implementirana pomoću zakrpa kernela. Trenutna verzija kernela 5.3.5-1

Što radi u ovom trenutku

  1. NVMe
  2. tastatura
  3. USB-C (Thunderbolt nije testiran; kada se modul automatski učitava, zamrzava sustav)
  4. Touchbar (s mogućnošću uključivanja Fn tipki, pozadinskog osvjetljenja, ESC-a itd.)
  5. Zvuk (samo ugrađeni zvučnici)
  6. Wi-Fi modul (putem brcmfmac i samo putem iw)
  7. DisplayPort preko USB-C
  8. Senzori
  9. Obustavi/nastavi (djelomično)
  10. itd ..

Ovaj vodič je primjenjiv za macbookpro15,1 i macbookpro15,2. Članak je preuzet kao osnova s ​​Githuba na engleskom jeziku. stoga. Nije sve u ovom članku funkcioniralo, pa sam morao sam pronaći rješenje.

Što trebate instalirati

  • USB-C docking adapter na USB (najmanje tri USB ulaza za povezivanje miša, tipkovnice, USB modema ili telefona u modu povezivanja). Ovo je potrebno samo tijekom prvih faza instalacije
  • USB tipkovnica
  • USB/USB-C flash disk od najmanje 4 GB

1. Onemogućite zabranu dizanja s vanjskog medija

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

2. Dodijelite slobodan prostor koristeći Disk Utility

Radi praktičnosti, odmah sam dodijelio 30 GB disku, formatirajući ga u exfat u samom Disk Utility-u. Uslužni program za particioniranje fizičkog diska.

3. Napravite ISO sliku

opcije:

  1. Možete ići jednostavnim putem i preuzeti gotovu sliku s kernelom 5.3.5-1 i zakrpama s aunali1 link na gotovu sliku
  2. Sami izradite sliku putem archlivea (potreban je sustav s Archa distribucijom)

    Postaviti archiso

    pacman -S archiso

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

    Dodajte repozitorij u pacman.conf:

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

    Zanemarujemo originalni kernel u pacman.conf:

    IgnorePkg   = linux linux-headers
    

    Dodajte potrebne pakete, na kraju dodajte linux-mbp kernel i linux-mbp-headers

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

    Mijenjamo skriptu da radi u interaktivnom načinu (zamijenite pacstrap -C s 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!"
    }

    Formiranje slike:

    sudo ./build.sh -v

    Pritisnite Y da preskočite zanemarene pakete, zatim zapišite iso sliku na USB flash pogon:

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

4. Prvo dizanje

Ponovno pokrenite s umetnutim flash pogonom i tipkovnicom. Pritisnite opcije kada se pojavi jabučica, odaberite EFI BOOT.

Zatim morate pritisnuti tipku "e" i enter na kraju naredbenog retka modul_blacklist=thunderbolt. Ako se to ne učini, sustav se možda neće pokrenuti i pojavit će se Thunderbolt ICM Error.

Pomoću fdisk/cfdisk nalazimo našu particiju (kod mene je to nvme0n1p4), formatiramo je i instaliramo arhivu. Možeš koristiti službene upute ili postrance.

Ne stvaramo particiju za pokretanje; u nju ćemo upisati bootloader /dev/nvme0n1p1
Nakon što je okruženje u /mnt potpuno formirano i prije prelaska na arch-chroot, napišite:

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

Dodajte u /etc/pacman.conf:


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

Instalirajte kernel:


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

Registriramo thunderbolt i applesmc u /etc/modprobe.d/blacklist.conf

blacklist thunderbolt
blacklist applesmc

Tipkovnica, dodirna traka itd

Instalirajte jura:


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

Instaliranje modula za rad dodirne trake:


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

Dodajte module za pokretanje: /etc/modules-load.d/apple.conf

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

Instaliranje kernel modula za tipkovnicu. U spremištu godišnji1 postoji gotov paket, zove se jabuka-bce-dkms-git. Da biste ga instalirali, upišite u konzolu:

pacman -S apple-bce-dkms-git

U ovom slučaju bit će pozvan kernel modul jabuka-bce. U slučaju samomontaže, tzv prije Krista. Sukladno tome, ako želite registrirati modul u odjeljku MODULI datoteke mkinicpio.conf, nemojte zaboraviti koji ste modul instalirali.

Ručna montaža:


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

Dodajte bce ili apple-bce modul pokretanju: /etc/modules-load.d/bce.conf

bce

Ako želite koristiti tipke Fn prema zadanim postavkama, upišite u datoteku /etc/modprobe.d/apple-tb.conf:

options apple-ib-tb fnmode=2

Ažuriranje kernela i initramfs-a.


mkinitcpio -p linux-mbp

Instalirajte iwd:

sudo pacman -S networkmanager iwd

5. Utovarivač

Nakon što su svi glavni paketi instalirani unutar chroota, možete početi instalirati bootloader.

Nisam uspio natjerati grubo da radi. Grub se pokreće s vanjskog USB pogona, ali kada ga pokušate registrirati u nvme putem

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

sustav je upao u kernel paniku, a nakon ponovnog pokretanja nije se pojavila nova stavka kroz opcije. Nisam našao nikakvo jasno rješenje za ovaj problem i stoga sam odlučio pokušati implementirati dizanje pomoću systemd-boot.

  1. Pokreni
    bootctl --path=/boot install

    i ulazimo u kernel paniku. Isključite MacBook, ponovno ga uključite, kliknite opcije (nemojte isključiti USB-C čvorište s tipkovnicom)

  2. Provjeravamo je li se uz vanjski uređaj pojavio novi EFI BOOT unos
  3. Odabiremo pokretanje s vanjskog USB pogona, kao tijekom prve instalacije (ne zaboravite navesti module_blacklist=thunderbolt)
  4. Montiramo naš disk i idemo u okruženje putem arch-chroota


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

Ako je potrebno da tipkovnica radi dok se sustav potpuno ne učita (ovo je potrebno kada koristite luks/dm-crypt enkripciju), tada to upišite u datoteku /etc/mkinicpio.conf u odjeljku MODULI:

MODULES=(ext4 applespi intel_lpss_pci spi_pxa2xx_platform bce)

Ažuriranje kernela i initramfs-a.


mkinicpio -p linux-mbp

Postavljanje systemd-boot-a

Uređujemo datoteku /boot/loader/loader.conf, brišemo sve unutra i dodajemo sljedeće:

default arch
timeout 5
editor 1

Idite u mapu /boot/loader/entries, kreirajte datoteku arch.conf i napišite:

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

Ako ste koristili luks i lvm, onda

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

Ponovno pokrenite MacOS.

6. Wi-Fi postavljanje

Kako se na kraju ispostavilo, MacOS pohranjuje datoteke firmvera za wi-fi adapter u mapu /usr/share/firmware/wifi , a možete ih uzeti odatle u obliku mrljica i ubaciti ih u brcmfmac kernel modul. Da biste saznali koje datoteke koristi vaš adapter, otvorite terminal u MacOS-u i napišite:

ioreg -l | grep C-4364

Dobivamo dugačak popis. Trebamo samo datoteke iz odjeljka Tražene datoteke:

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

U vašem slučaju nazivi datoteka mogu se razlikovati. Kopirajte ih iz mape /usr/share/firmware/wifi na flash pogon i preimenujte ih na sljedeći način:

    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>

U ovom slučaju, posljednja tekstualna datoteka sadrži nazive modela; ako vaš model nije macbookpro15,2, tada morate preimenovati ovu datoteku u skladu s modelom vašeg MacBooka.

Ponovno pokrenite Arch.

Kopirajte datoteke s flash pogona u mapu /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/

Provjera funkcionalnosti modula:


rmmod brcmfmac
modprobe brcmfmac

Osiguravamo da se mrežno sučelje pojavljuje kroz ifconfig/ip.
Postavljanje wifi putem iwctl

Pažnja. Preko netctl, nmcli itd. Sučelje ne radi, samo preko iwd.

Prisiljavamo NetworkManager da koristi iwd. Da biste to učinili, kreirajte datoteku /etc/NetworkManager/NetworkManager.conf i napišite:

[device]
wifi.backend=iwd

Pokrenite uslugu NetworkManager


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

7. Zvuk

Da bi zvuk radio potrebno je instalirati pulseaudio:


sudo pacman -S pulseaudio

Preuzmite tri datoteke:

Premjestimo ih:

    /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. Obustavi/nastavi

U ovom trenutku 16.10.2019 morate odabrati zvuk ili obustaviti/nastaviti. Čekamo da autor bce modula dovrši funkcionalnost.

Da biste izgradili modul s podrškom za obustavu/nastavljanje, morate učiniti sljedeće:


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

Ako ste instalirali gotov apple-bce modul iz repozitorija anuali1, tada ga prvo morate ukloniti i tek onda sastaviti i instalirati bce modul s podrškom za suspend mod.

Također, trebate dodati applesmc modul na crnu listu (ako to niste učinili prije) i provjerite je li u /boot/loader/entries/arch.conf u retku opcija na kraju dodan parametar pcie_ports=compat.

Trenutačno se upravljački program dodirne trake ruši prilikom ulaska u stanje mirovanja, a upravljački program thunderbolt ponekad zamrzne sustav na više od 30 sekundi, a pri nastavku na nekoliko minuta. To se može popraviti automatskim uklanjanjem problematičnih modula.

Napravite skriptu /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

Neka bude izvršna:

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

To je sve za sada. Rezultat je potpuno funkcionalan sustav, s izuzetkom nekih nijansi s obustavom/nastavkom. Tijekom nekoliko dana neprekidnog rada nisu primijećeni nikakvi padovi ili panike u kernelu. Nadam se da će u bliskoj budućnosti autor bce modula to dovršiti, te ćemo dobiti punu podršku za suspend/resume i sound.

Izvor: www.habr.com

Dodajte komentar