Zabezpečenie fungovania MacBooku Pro 2018 T2 s ArchLinuxom (dualboot)

Okolo toho, že nový čip T2 znemožní inštaláciu Linuxu na nové MacBooky 2018 s dotykovým panelom, sa vytvoril pomerne veľký humbuk. Čas plynul a na konci roka 2019 vývojári tretích strán implementovali množstvo ovládačov a záplat jadra na interakciu s čipom T2. Hlavný ovládač pre modely MacBook 2018 a novšie implementuje ovládanie VHCI (ovládanie dotykom/klávesnicou/atď.), ako aj ovládanie zvuku.

Projekt mbp2018-bridge-drv rozdelené na 3 hlavné zložky:

  • BCE (Buffer Copy Engine) - vytvára hlavný komunikačný kanál s T2. VHCI a Audio vyžadujú tento komponent.
  • VHCI je USB Virtual Host Controller; klávesnica, myš a ďalšie systémové komponenty sú poskytované týmto komponentom (iné ovládače používajú tento hostiteľský radič na poskytovanie ďalších funkcií.
  • Audio – ovládač pre audio rozhranie T2, v súčasnosti podporuje iba zvukový výstup cez vstavané reproduktory MacBooku


Druhý projekt je tzv ovládač pre macbook12-spia implementuje schopnosť ovládať vstupný ovládač pre klávesnicu, trackpad SPI a dotykový panel pre MacBooky Pro z konca roka 2016 a novšie. Niektoré ovládače klávesnice/trackpadu sú teraz zahrnuté v jadre, počnúc verziou 5.3.

Podpora zariadení ako wi-fi, touchpad atď. bola implementovaná aj pomocou záplat jadra. Aktuálna verzia jadra 5.3.5-1

Čo momentálne funguje

  1. NVMe
  2. klávesnica
  3. USB-C (Thunderbolt nebol testovaný, keď sa modul automaticky načíta, systém zamrzne)
  4. Touchbar (s možnosťou zapnúť klávesy Fn, podsvietenie, ESC atď.)
  5. Zvuk (iba vstavané reproduktory)
  6. Wi-Fi modul (cez brcmfmac a iba cez iw)
  7. DisplayPort cez USB-C
  8. Senzory
  9. Pozastaviť/Obnoviť (čiastočne)
  10. atď ..

Tento tutoriál je použiteľný pre macbookpro15,1 a macbookpro15,2. Článok bol prevzatý ako základ z Githubu v angličtine. preto. Nie všetko v tomto článku fungovalo, takže som musel nájsť riešenie sám.

Čo je potrebné nainštalovať

  • USB-C dokovací adaptér na USB (najmenej tri USB vstupy na pripojenie myši, klávesnice, USB modemu alebo telefónu v režime tetheringu). Toto je potrebné iba počas prvých fáz inštalácie
  • USB klávesnica
  • USB/USB-C flash disk minimálne 4 GB

1. Vypnite zákaz zavádzania z externého média

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

2. Prideľte voľné miesto pomocou Disk Utility

Pre pohodlie som okamžite pridelil 30 GB na disk a naformátoval som ho v exfate v samotnej Disk Utility. Rozdelenie nástroja na fyzický disk disku.

3. Vytvorte obraz ISO

možnosti:

  1. Môžete ísť jednoduchou cestou a stiahnuť si hotový obrázok s jadrom 5.3.5-1 a záplatami z aunali1 odkaz na hotový obrázok
  2. Vytvorte si obrázok sami cez archív (vyžaduje sa systém s distribúciou Archa)

    Sada archiso

    pacman -S archiso

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

    Pridajte úložisko do pacman.conf:

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

    Ignorujeme pôvodné jadro v pacman.conf:

    IgnorePkg   = linux linux-headers
    

    Pridajte potrebné balíčky, na koniec pridajte jadro linux-mbp a hlavičky linux-mbp

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

    Zmeníme skript, aby pracoval v interaktívnom režime (nahradiť pacstrap -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!"
    }

    Vytváranie obrazu:

    sudo ./build.sh -v

    Stlačením Y preskočíte ignorované balíčky a potom zapíšete obraz iso na USB flash disk:

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

4. Prvé spustenie

Reštartujte s vloženou jednotkou Flash a klávesnicou. Keď sa objaví jablko, stlačte options a vyberte EFI BOOT.

Ďalej musíte stlačiť kláves „e“ a zadať na konci príkazového riadku module_blacklist=blesk blesku. Ak tak neurobíte, systém sa nemusí spustiť a zobrazí sa chyba Thunderbolt ICM Error.

Pomocou fdisk/cfdisk nájdeme náš oddiel (pre mňa je to nvme0n1p4), naformátujeme ho a nainštalujeme archív. Môžeš použiť oficiálne pokyny alebo bokom.

Nevytvárame zavádzací oddiel, zapíšeme bootloader /dev/nvme0n1p1
Po úplnom vytvorení prostredia v /mnt a pred prechodom na arch-chroot napíšte:

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

Pridať do /etc/pacman.conf:


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

Nainštalujte jadro:


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

Thunderbolt a applesmc registrujeme v /etc/modprobe.d/blacklist.conf

blacklist thunderbolt
blacklist applesmc

Klávesnica, dotykový panel atď

Nainštalujte yay:


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

Inštalácia modulov, aby touchbar fungoval:


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

Pridajte moduly do spustenia: /etc/modules-load.d/apple.conf

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

Inštalácia modulov jadra pre klávesnicu. V úložisku anual1 je tam hotový balík, je to tzv apple-bce-dkms-git. Ak ho chcete nainštalovať, napíšte do konzoly:

pacman -S apple-bce-dkms-git

V tomto prípade sa zavolá modul jadra jablko-bce. V prípade svojpomocnej montáže je to tzv BCE. Preto, ak chcete zaregistrovať modul v sekcii MODULES súboru mkinicpio.conf, nezabudnite, ktorý modul ste nainštalovali.

Manuálna montáž:


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

Pridajte modul bce alebo apple-bce do spustenia: /etc/modules-load.d/bce.conf

bce

Ak chcete štandardne používať tlačidlá Fn, napíšte do súboru /etc/modprobe.d/apple-tb.conf:

options apple-ib-tb fnmode=2

Aktualizácia jadra a initramfs.


mkinitcpio -p linux-mbp

Nainštalovať iwd:

sudo pacman -S networkmanager iwd

5. Nakladač

Po nainštalovaní všetkých hlavných balíkov do chrootu môžete začať inštalovať bootloader.

Nepodarilo sa mi dostať gruba do práce. Grub bootuje z externého USB disku, ale pri pokuse o registráciu v nvme cez

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

systém prešiel do jadrovej paniky a po reštarte sa nová položka cez možnosti neobjavila. Nenašiel som žiadne jasné riešenie tohto problému a preto som sa rozhodol skúsiť implementovať bootovanie pomocou systemd-boot.

  1. Spustiť
    bootctl --path=/boot install

    a prechádzame do jadrovej paniky. Vypnite MacBook, znova ho zapnite, kliknite na možnosti (nevypínajte rozbočovač USB-C s klávesnicou)

  2. Skontrolujeme, či sa okrem externého zariadenia objavila aj nová položka EFI BOOT
  3. Vyberieme bootovanie z externého USB disku, ako pri prvej inštalácii (nezabudnite zadať module_blacklist=thunderbolt)
  4. Pripojíme náš disk a ideme do prostredia cez arch-chroot


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

Ak je potrebné, aby klávesnica fungovala až do úplného načítania systému (je to potrebné pri použití šifrovania luks/dm-crypt), tak to zapíšte do súboru /etc/mkinicpio.conf v sekcii MODULES:

MODULES=(ext4 applespi intel_lpss_pci spi_pxa2xx_platform bce)

Aktualizácia jadra a initramfs.


mkinicpio -p linux-mbp

Nastavenie systemd-boot

Upravíme súbor /boot/loader/loader.conf, vymažeme všetko v ňom a pridáme nasledovné:

default arch
timeout 5
editor 1

Prejdite do priečinka /boot/loader/entries, vytvorte súbor arch.conf a napíšte:

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

Ak ste použili luks a lvm, potom

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

Reštartujte do MacOS.

6. Nastavenie Wi-Fi

Ako sa nakoniec ukázalo, MacOS ukladá súbory firmvéru pre wi-fi adaptér do priečinka /usr/share/firmware/wifi , a môžete ich odtiaľ vziať vo forme blobov a nasmerovať ich do modulu jadra brcmfmac. Ak chcete zistiť, ktoré súbory používa váš adaptér, otvorte terminál v systéme MacOS a napíšte:

ioreg -l | grep C-4364

Dostávame dlhý zoznam. Potrebujeme iba súbory zo sekcie Požadované súbory:

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

Vo vašom prípade sa názvy súborov môžu líšiť. Skopírujte ich z priečinka /usr/share/firmware/wifi na flash disk a premenujte ich takto:

    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>

V tomto prípade posledný textový súbor obsahuje názvy modelov; ak váš model nie je macbookpro15,2, musíte tento súbor premenovať podľa modelu vášho MacBooku.

Reštartujte do Arch.

Skopírujte súbory z flash disku do priečinka /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/

Kontrola funkčnosti modulu:


rmmod brcmfmac
modprobe brcmfmac

Zabezpečíme, aby sa sieťové rozhranie zobrazilo cez ifconfig/ip.
Nastavenie wifi cez iwctl

Pozornosť. Cez netctl, nmcli atď. Rozhranie nefunguje, iba cez iwd.

Nútime NetworkManager používať iwd. Ak to chcete urobiť, vytvorte súbor /etc/NetworkManager/NetworkManager.conf a napíšte:

[device]
wifi.backend=iwd

Spustite službu NetworkManager


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

7. Zvuk

Aby zvuk fungoval, musíte nainštalovať pulseaudio:


sudo pacman -S pulseaudio

Stiahnite si tri súbory:

Presuňme ich:

    /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. Pozastaviť/Obnoviť

V súčasnosti 16.10.2019 musíte si vybrať zvuk alebo pozastavenie/obnovenie. Čakáme, kým autor modulu bce dokončí funkcionalitu.

Ak chcete vytvoriť modul s podporou pozastavenia/obnovenia, musíte urobiť nasledovné:


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

Ak ste nainštalovali hotový modul apple-bce z úložiska anuali1, musíte ho najskôr odstrániť a až potom zostaviť a nainštalovať modul bce s podporou režimu spánku.

Tiež musíte pridať modul applesmc na čiernu listinu (ak ste to ešte neurobili) a uistite sa, že v /boot/loader/entries/arch.conf v riadku volieb na konci je pridaný parameter pcie_ports=compat.

V súčasnosti ovládač touchbaru pri prechode do režimu pozastavenia zlyhá a ovládač blesku niekedy zamrzne systém na viac ako 30 sekúnd a pri opätovnom spustení aj na niekoľko minút. Dá sa to vyriešiť automatickým vyložením problematických modulov.

Vytvorte skript /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

Urobte to spustiteľné:

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

To je zatiaľ všetko. Výsledkom je úplne funkčný systém, s výnimkou niektorých nuancií s pozastavením/obnovením. Počas niekoľkých dní prevádzky neboli pozorované žiadne pády ani paniky jadra. Dúfam, že v blízkej budúcnosti to autor modulu bce dokončí a dostaneme plnú podporu pre pozastavenie/obnovenie a zvuk.

Zdroj: hab.com

Pridať komentár