Rozběhnutí MacBook Pro 2018 T2 s ArchLinuxem (dualboot)

Bylo hodně povyku ohledně toho, že kvůli novému čipu T2 není možné nainstalovat Linux na nové MacBooky 2018 s Touch Barem. Čas plynul, a na konci roku 2019 byly třetími vývojáři vyvinuty různé ovladače a patche jádra pro spolupráci s čipem T2. Hlavní ovladač pro modely MacBook 2018 a novější umožňuje fungování VHCI (fungování Touch Baru/kb/atd.), a také podporu zvuku.

Projekt mbp2018-bridge-drv rozdělen na 3 hlavní komponenty:

  • BCE (Buffer Copy Engine) – vytváří hlavní komunikační kanál s T2. VHCI a Audio vyžadují tuto komponentu.
  • VHCI – to je virtuální hostitelský řadič USB; klávesnice, myš a další komponenty systému jsou poskytovány touto komponentou (jiné ovladače používají tento hostitelský řadič k zajištění větší funkčnosti.
  • Audio – ovladač pro audio rozhraní T2, v současnosti podporuje pouze výstup zvuku přes vestavěné reproduktory MacBooku.


Druhý projekt se nazývá macbook12-spi-driver, a implementuje možnost fungování ovladače vstupu pro klávesnici, trackpad SPI, Touch Bar pro MacBook Pro od konce 2016 a novější verze. Část ovladačů pro klávesnici/trackpad je nyní zahrnuta v jádře, počínaje verzí 5.3.

Byla také implementována podpora pro zařízení jako wi-fi, trackpad atd., pomocí patchů jádra. V současnosti je verze jádra 5.3.5-1

Co aktuálně funguje

  1. NVMe
  2. Klávesnice
  3. USB-C (Thunderbolt nebyl testován, při automatickém načtení modulu zamrzá systém)
  4. Touch Bar (s možností aktivace kláves Fn, 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. Suspend/Resume (částečně)
  10. atd..

Tento tutoriál je aplikovatelný pro macbookpro15,1 a macbookpro15,2. Jako základ byl použit článek z GitHubu v angličtině odsud. Ne všechno z tohoto článku fungovalo, takže bylo nutné hledat řešení samostatně.

Co bude potřeba pro instalaci

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

1. Vypneme zákaz bootování z externích médií.

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

2. Vyčleníme volné místo pomocí Disk Utility.

Pro pohodlí jsem hned vyčlenil 30GB na disk, a naformátoval ho na exfat přímo v Disk Utility. Rozdělení fyzického disku na oddíly v Disk Utility..

3. Vytváříme iso obraz

Varianty:

  1. Můžete jít jednoduchou cestou a stáhnout hotový obraz s jádrem 5.3.5-1 a patche od aunali1 odkaz na hotový obraz
  2. Vytvořit obraz samostatně přes archlive (je třeba systém s distribucí Arch Linuxu)

    Instalujeme archiso

    pacman -S archiso

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

    Přidáme repozitář do pacman.conf:

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

    Ignorujeme originální jádro v pacman.conf:

    IgnorePkg   = linux linux-headers
    

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

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

    Upravujeme skript pro práci v interaktivním režimu (nahrazujeme 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áříme obraz:

    sudo ./build.sh -v

    Stiskneme Y, abychom přeskočili ignorované balíčky, poté zapíšeme iso-obraz na USB flash disk:

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

4. První spuštění

Restartujeme se vloženým flash diskem a klávesnicí. Stiskneme options při zobrazení jablka, vybereme EFI BOOT.

Dále je třeba stisknout klávesu „e“ a napsat na konec příkazového řádku module_blacklist=thunderbolt. Pokud to neuděláte, systém se nemusí spustit a objeví se chyba Thunderbolt ICM Error.

Pomocí fdisk/cfdisk najdeme náš oddíl (u mě je to nvme0n1p4), naformátujeme a provedeme instalaci Archa. Můžete využít oficiální pokyny nebo cizí.

Zavaděcí oddíl nevytváříme, zavaděč napíšeme do /dev/nvme0n1p1
Jakmile je prostředí plně vytvořeno v /mnt a předtím, než přejdeme do arch-chroot, napíšeme:

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

Přidáme do /etc/pacman.conf:


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

Instalujeme jádro:


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

Zapíšeme thunderbolt a applesmc do /etc/modprobe.d/blacklist.conf

blacklist thunderbolt
blacklist applesmc

Klávesnice, touch bar atd.

Instalujeme yay:


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

Instalujeme moduly pro funkci touch baru:


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

Přidáváme moduly do automatického načítání: /etc/modules-load.d/apple.conf

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

Instalujeme jádrové moduly pro funkci klávesnice. V repozitáři anuali1 je k dispozici hotový balíček, jmenuje se apple-bce-dkms-git. Aby byl nainstalován, napíšeme v konzoli:

pacman -S apple-bce-dkms-git

V takovém případě se jádrový modul bude jmenovat apple-bce. V případě samostatného sestavení se jmenuje bce. Pokud tedy chcete zapsat modul do sekce MODULES v souboru mkinicpio.conf, nezapomeňte, který modul jste instalovali.

Ruční sestavení:


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řidáme modul bce nebo apple-bce do zaváděcí sekce: /etc/modules-load.d/bce.conf

bce

Pokud chcete používat výchozí tlačítka Fn, do souboru /etc/modprobe.d/apple-tb.conf napíšeme:

options apple-ib-tb fnmode=2

Aktualizujeme jádro a initramfs.


mkinitcpio -p linux-mbp

Nainstalujeme iwd:

sudo pacman -S networkmanager iwd

5. Zavaděč

Poté, co jsou v chroot nainstalovány všechny základní balíčky, můžeme přistoupit k instalaci zavaděče.

Nepodařilo se mi spustit grub. Grub se načítá z externího USB disku, ale při pokusu o jeho zápis do nvme se

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

systém dostával kernel panic a po restartu nová položka se změny neukázala. Nenašel jsem žádné jasné řešení tohoto problému, takže jsem se rozhodl zkusit spustit systém pomocí systemd-boot.

  1. Spouštíme
    bootctl --path=/boot install

    a dostáváme kernel panic. Vypneme MacBook, zapneme znovu, stiskneme options (usb-c hub s klávesnicí nevypínáme)

  2. Kontrolujeme, že se objevila nová položka EFI BOOT vedle externího zařízení
  3. Vybereme spuštění z externího USB disku, jako při první instalaci (nezapomínejte na module_blacklist=thunderbolt)
  4. Připojíme náš disk a přejdeme do prostředí pomocí arch-chroot


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

Pokud potřebujete, aby klávesnice fungovala do úplného spuštění systému (to je nutné při používání šifrování luks/dm-crypt), pak přidáme do souboru /etc/mkinicpio.conf v sekci MODULES:

MODULES=(ext4 applespi intel_lpss_pci spi_pxa2xx_platform bce)

Aktualizujeme jádro a initramfs.


mkinicpio -p linux-mbp

Nastavujeme systemd-boot

Upravíme soubor /boot/loader/loader.conf, odstraníme vše, co je uvnitř, a vložíme následující:

default arch
timeout 5
editor 1

Přejdeme do složky /boot/loader/entries, vytvoříme soubor arch.conf a napíšeme:

název arch
linux /vmlinuz-linux-mbp
initrd /initramfs-linux-mbp.img
možnosti root=/dev/<b>nvme0n1p4</b> rw pcie_ports=compat

V případě, že jste použili luks a lvm, pak

možnosti cryptdevice=\/dev\/<b>nvme0n1p4</b>:luks root=\/dev\/mapper\/vz0-root rw pcie_ports=compat

Restartujeme do MacOS.

6. Nastavení Wi-Fi

Jak se ukázalo, soubory firmwaru pro Wi-Fi adaptér MacOS jsou uloženy ve složce /usr/share/firmware/wifi , a lze je odtud vzít ve formě blobů a krmit je modulu jádra brcmfmac. Abychom zjistili, které konkrétní soubory váš adaptér používá, otevřeme terminál v MacOS a napíšeme:

ioreg -l | grep C-4364

Získáme dlouhý seznam. Potřebujeme pouze soubory z části 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>"})

Váš případ názvy souborů mohou být odlišné. Zkopírujeme je ze složky /usr/share/firmware/wifi na flash disk a přejmenujeme na následující podobu:

    maui.trx -&gt; brcmfmac4364-pcie.bin
    maui-X3.clmb -&gt; brcmfmac4364-pcie.clm_blob
    P-maui-X3_M-HRPN_V-m__m-7.7.txt -&gt; brcmfmac4364-pcie.Apple Inc.-<b>MacBookPro15,2.txt</b>

V tomto případě poslední textový soubor obsahuje názvy modelu, pokud váš model není macbookpro15,2, je nutné tento soubor přejmenovat podle vašeho modelu MacBooku.

Restartujeme do arch.

Kopírujeme 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/

Kontrolujeme funkčnost modulu:


rmmod brcmfmac
modprobe brcmfmac

Ujistěte se, že síťové rozhraní se objevilo přes ifconfig/ip.
Nastavujeme wifi přes iwctl

Pozor. Přes netctl, nmcli atd. rozhraní nefunguje, pouze přes iwd.

Donutíme NetworkManager používat iwd. K tomu vytvoříme soubor /etc/NetworkManager/NetworkManager.conf a napíšeme:

[device]
wifi.backend=iwd

Spouštíme službu NetworkManager


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

7. Zvuk

Aby zvuk fungoval, je nutné nainstalovat pulseaudio:


sudo pacman -S pulseaudio

Stahujeme tři soubory:

Přesouváme je:

    /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

V současné době 16.10.2019 musíme si vybrat buď zvuk, nebo suspend/resume. Čekáme, až autor modulu bce doplní funkčnost.

Abychom zkompilovali modul s podporou suspend/resume, musíme 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 instalovali hotový modul apple-bce z repozitáře anuali1, je třeba ho nejprve odstranit a teprve poté zkompilovat a nainstalovat modul bce s podporou suspend režimu.

Také je nutné přidat do blacklistu modul applesmc (pokud jste to dosud neudělali) a ujistit se, že v /boot/loader/entries/arch.conf je na konci řádku options přidán parametr pcie_ports=compat.

V současnosti ovladač touchbaru padá při přechodu do režimu suspend, a ovladač thunderbolt někdy visí systém více než 30 sekund, a při obnovení — na několik minut. To lze opravit automatickým vykládáním problematických modulů.

Vytvořte skript /lib/systemd/system-sleep/rmmod.sh:

#!/bin/sh
if [ "${1}" == "pre" ]; then
        rmmod thunderbolt
        rmmod apple_ib_tb
elif [ "${1}" == "post" ]; then
        modprobe apple_ib_tb
        modprobe thunderbolt
fi

Udělejte ho spustitelným:

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

Na tom zatím vše. Výsledkem je zcela funkční systém, s výjimkou některých nuancí se suspend/resume. Žádné pády a kernel panic nebyly pozorovány po několik dní uptime. Doufám, že v blízké době autor modulu bce doplní a získáme plnou podporu suspend/resume a zvuku.

Zdroj: habr.com

Koupit spolehlivý hosting pro webové stránky s ochranou proti DDoS, VPS VDS servery 🔥 Koupit spolehlivý hosting pro webové stránky s ochranou proti DDoS, VPS VDS servery | ProHoster