Jak zajistit, aby MacBook Pro 2018 T2 fungoval s ArchLinuxem (dualboot)

O tom, že nový čip T2 znemožní instalaci Linuxu na nové MacBooky 2018 s dotykovou lištou, se udělal docela velký humbuk. Čas plynul a na konci roku 2019 vývojáři třetích stran implementovali řadu ovladačů a záplat jádra pro interakci s čipem T2. Hlavní ovladač pro modely MacBook 2018 a novější implementuje ovládání VHCI (dotykové/klávesnice/atd. ovládání), stejně jako ovládání zvuku.

projekt mbp2018-bridge-drv rozdělena na 3 hlavní složky:

  • BCE (Buffer Copy Engine) - vytváří hlavní komunikační kanál s T2. VHCI a Audio tuto komponentu vyžadují.
  • VHCI je USB Virtual Host Controller; klávesnice, myš a další systémové komponenty jsou poskytovány touto komponentou (jiné ovladače používají tento hostitelský řadič k poskytování více funkcí.
  • Audio - ovladač pro audio rozhraní T2, aktuálně podporuje pouze audio výstup přes vestavěné reproduktory MacBooku


Druhý projekt se nazývá Ovladač pro macbook12-spia implementuje schopnost ovládat vstupní ovladač pro klávesnici, trackpad SPI a touchbar pro MacBooky Pro z konce roku 2016 a novější. Některé ovladače klávesnice/trackpadu jsou nyní součástí jádra, počínaje verzí 5.3.

Podpora pro zařízení jako wi-fi, touchpad atd. byla také implementována pomocí záplat jádra. Aktuální verze jádra 5.3.5-1

Co v tuto chvíli funguje

  1. NVMe
  2. klávesnice
  3. USB-C (Thunderbolt nebyl testován, při automatickém načtení modulu dojde k zamrznutí systému)
  4. Touchbar (s možností zapnout Fn klávesy, podsvícení, ESC atd.)
  5. Zvuk (pouze vestavěné reproduktory)
  6. Wi-Fi modul (přes brcmfmac a pouze přes iw)
  7. DisplayPort přes USB-C
  8. Senzory
  9. Pozastavit/obnovit (částečně)
  10. atd..

Tento tutoriál je použitelný pro macbookpro15,1 a macbookpro15,2. Článek byl převzat jako základ z Githubu v angličtině. proto. Ne vše v tomto článku fungovalo, takže jsem musel najít řešení sám.

Co potřebujete nainstalovat

  • USB-C dokovací adaptér na USB (alespoň tři USB vstupy pro připojení myši, klávesnice, USB modemu nebo telefonu v režimu tetheringu). To je nutné pouze během prvních fází instalace
  • USB klávesnice
  • USB/USB-C flash disk minimálně 4 GB

1. Vypněte zákaz spouštění z externího média

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

2. Přidělte volné místo pomocí Disk Utility

Pro pohodlí jsem na disk okamžitě přidělil 30 GB a naformátoval jsem jej exfat v samotné Diskové utilitě. Rozdělení fyzického disku Disk Utility.

3. Vytvořte obraz ISO

Možnosti jsou následující:

  1. Můžete jít jednoduchou cestou a stáhnout si hotový obraz s jádrem 5.3.5-1 a záplatami z aunali1 odkaz na hotový obrázek
  2. Vytvořte si obrázek sami přes archivlive (je vyžadován systém s distribucí Archa)

    Sada archiso

    pacman -S archiso

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

    Přidejte úložiště do pacman.conf:

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

    Ignorujeme původní jádro v pacman.conf:

    IgnorePkg   = linux linux-headers
    

    Přidejte potřebné balíčky, na konci přidejte jádro linux-mbp a linux-mbp-headers

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

    Změníme skript tak, aby pracoval v interaktivním režimu (nahraďte pacstrap -C za 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áření obrazu:

    sudo ./build.sh -v

    Stisknutím Y přeskočte ignorované balíčky a poté zapište obraz iso na USB flash disk:

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

4. První spuštění

Restartujte s vloženou jednotkou flash a klávesnicí. Stiskněte možnosti, když se objeví jablko, vyberte EFI BOOT.

Dále musíte stisknout klávesu „e“ a zadat na konci příkazového řádku module_blacklist=blesk blesku. Pokud tak neučiníte, systém se nemusí spustit a objeví se chyba Thunderbolt ICM Error.

Pomocí fdisk/cfdisk najdeme náš oddíl (pro mě je to nvme0n1p4), naformátujeme jej a nainstalujeme archiv. Můžeš použít oficiální pokyny nebo bokem.

Nevytváříme spouštěcí oddíl, zapíšeme bootloader / dev / nvme0n1p1
Po úplném vytvoření prostředí v /mnt a před přechodem na arch-chroot napište:

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

Přidat do /etc/pacman.conf:


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

Nainstalujte jádro:


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ávesnice, dotykový panel atd

Nainstalujte yay:


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

Instalace modulů, aby touchbar fungoval:


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

Přidejte moduly ke spuštění: /etc/modules-load.d/apple.conf

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

Instalace modulů jádra pro klávesnici. V úložišti anual1 existuje hotový balíček, říká se tomu apple-bce-dkms-git. Chcete-li jej nainstalovat, napište do konzole:

pacman -S apple-bce-dkms-git

V tomto případě bude zavolán modul jádra jablko-bce. V případě svépomocné montáže je to tzv bce. Pokud tedy chcete zaregistrovat modul v sekci MODULES souboru mkinicpio.conf, nezapomeňte, který modul jste nainstalovali.

Ruční 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

Přidejte modul bce nebo apple-bce do spuštění: /etc/modules-load.d/bce.conf

bce

Pokud chcete standardně používat tlačítka Fn, zapište do souboru /etc/modprobe.d/apple-tb.conf:

options apple-ib-tb fnmode=2

Aktualizace jádra a initramfs.


mkinitcpio -p linux-mbp

Nainstalovat iwd:

sudo pacman -S networkmanager iwd

5. Nakladač

Jakmile jsou všechny hlavní balíčky nainstalovány do chrootu, můžete začít instalovat bootloader.

Nepodařilo se mi dostat gruba do práce. Grub bootuje z externího USB disku, ale při pokusu o registraci v nvme přes

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

systém přešel do jaderné paniky a po restartu se nová položka prostřednictvím voleb neobjevila. Nenašel jsem žádné jasné řešení tohoto problému, a proto jsem se rozhodl zkusit implementovat bootování pomocí systemd-boot.

  1. Běh
    bootctl --path=/boot install

    a přecházíme do jaderné paniky. Vypněte MacBook, znovu jej zapněte, klikněte na možnosti (nevypínejte rozbočovač USB-C s klávesnicí)

  2. Zkontrolujeme, zda se kromě externího zařízení objevila nová položka EFI BOOT
  3. Vybereme bootování z externího USB disku, jako při první instalaci (nezapomeňte zadat module_blacklist=thunderbolt)
  4. Připojíme náš disk a přejdeme do prostředí přes arch-chroot


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

Pokud je nutné, aby klávesnice fungovala až do úplného načtení systému (toto je nutné při použití šifrování luks/dm-crypt), pak to zapište do souboru /etc/mkinicpio.conf v sekci MODULES:

MODULES=(ext4 applespi intel_lpss_pci spi_pxa2xx_platform bce)

Aktualizace jádra a initramfs.


mkinicpio -p linux-mbp

Nastavení systemd-boot

Upravíme soubor /boot/loader/loader.conf, odstraníme vše uvnitř a přidáme následující:

default arch
timeout 5
editor 1

Přejděte do složky /boot/loader/entries, vytvořte soubor arch.conf a napište:

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

Pokud jste použili luks a lvm, pak

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

Restartujte do MacOS.

6. Nastavení Wi-Fi

Jak se nakonec ukázalo, MacOS ukládá soubory firmwaru pro wi-fi adaptér do složky /usr/share/firmware/wifi , a odtud je můžete vzít ve formě blobů a nasměrovat je do modulu jádra brcmfmac. Chcete-li zjistit, které soubory váš adaptér používá, otevřete terminál v MacOS a napište:

ioreg -l | grep C-4364

Dostáváme dlouhý seznam. Potřebujeme pouze soubory ze sekce 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>"})

Ve vašem případě se názvy souborů mohou lišit. Zkopírujte je ze složky /usr/share/firmware/wifi na flash disk a přejmenujte je následovně:

    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 případě poslední textový soubor obsahuje názvy modelů; pokud váš model není macbookpro15,2, musíte tento soubor přejmenovat podle modelu vašeho MacBooku.

Restartujte do Arch.

Zkopírujte soubory z flash disku do složky /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

Zajistíme, aby se síťové rozhraní zobrazilo přes ifconfig/ip.
Nastavení wifi přes iwctl

Pozornost. Přes netctl, nmcli atd. Rozhraní nefunguje, pouze přes iwd.

Nutíme NetworkManager používat iwd. Chcete-li to provést, vytvořte soubor /etc/NetworkManager/NetworkManager.conf a napište:

[device]
wifi.backend=iwd

Spusťte službu NetworkManager


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

7. Zvuk

Aby zvuk fungoval, musíte nainstalovat pulseaudio:


sudo pacman -S pulseaudio

Stáhněte si tři soubory:

Pojďme je přesunout:

    /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. Pozastavit/Obnovit

V současné době 16.10.2019 musíte zvolit zvuk nebo pozastavení/obnovení. Čekáme, až autor modulu bce dokončí funkcionalitu.

Chcete-li vytvořit modul s podporou pozastavení/obnovení, musíte provést následující:


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

Pokud jste nainstalovali hotový modul apple-bce z úložiště anuali1, musíte jej nejprve odstranit a teprve poté sestavit a nainstalovat modul bce s podporou režimu spánku.

Také musíte přidat modul applesmc na černou listinu (pokud jste to ještě neudělali) a ujistěte se, že v /boot/loader/entries/arch.conf v řádku voleb na konci je parametr přidán pcie_ports=compat.

V současné době ovladač dotykové lišty selže při přechodu do režimu spánku a ovladač thunderbolt někdy zamrzne systém na více než 30 sekund a při obnovení na několik minut. To lze opravit automatickým vyjmutím problematických modulů.

Vytvořte 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

Udělejte to spustitelným:

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

To je prozatím vše. Výsledkem je zcela funkční systém, s výjimkou některých nuancí s pozastavením/obnovením. Během několika dnů provozu nebyly pozorovány žádné pády nebo panika jádra. Doufám, že v dohledné době to autor modulu bce dokončí a dostaneme plnou podporu pro uspání/obnovení a zvuk.

Zdroj: www.habr.com

Přidat komentář