Współpraca MacBooka Pro 2018 T2 z ArchLinux (dualboot)

Niemało szumu narosło w związku z faktem, że nowy układ T2 uniemożliwi instalację Linuksa na nowych MacBookach 2018 z panelem dotykowym. Czas mijał i pod koniec 2019 roku zewnętrzni programiści wdrożyli szereg sterowników i poprawek do jądra umożliwiających interakcję z chipem T2. Główny sterownik dla modeli MacBooka 2018 i nowszych implementuje obsługę VHCI (obsługa dotykowa/klawiatura/itp.), a także obsługa dźwięku.

Projekt mbp2018-bridge-drv podzielony na 3 główne elementy:

  • BCE (Buffer Copy Engine) - ustanawia główny kanał komunikacji z T2. VHCI i audio wymagają tego komponentu.
  • VHCI to wirtualny kontroler hosta USB; klawiatura, mysz i inne komponenty systemu są dostarczane przez ten komponent (inne sterowniki korzystają z tego kontrolera hosta, aby zapewnić większą funkcjonalność.
  • Audio - sterownik interfejsu audio T2, obecnie obsługuje tylko wyjście audio przez wbudowane głośniki MacBooka


Drugi projekt to tzw sterownik macbook12-spii implementuje możliwość obsługi sterownika wejściowego dla klawiatury, gładzika SPI i paska dotykowego dla MacBooka Pro z końca 2016 r. i nowszych. Niektóre sterowniki klawiatury/gładzika są teraz zawarte w jądrze, począwszy od wersji 5.3.

Za pomocą poprawek jądra zaimplementowano także obsługę urządzeń takich jak Wi-Fi, touchpad itp. Aktualna wersja jądra 5.3.5-1

Co w tej chwili działa

  1. NVMe
  2. klawiatura
  3. USB-C (Thunderbolt nie był testowany; gdy moduł ładuje się automatycznie, zawiesza system)
  4. Touchbar (z możliwością włączenia klawiszy Fn, podświetlenia, ESC itp.)
  5. Dźwięk (tylko wbudowane głośniki)
  6. Moduł Wi-Fi (przez brcmfmac i tylko przez iw)
  7. DisplayPort przez USB-C
  8. Czujniki
  9. Zawieś/Wznów (częściowo)
  10. itp..

Ten samouczek dotyczy komputerów macbookpro15,1 i macbookpro15,2. Artykuł został wzięty za podstawę z Githuba w języku angielskim. stąd. Nie wszystko w tym artykule zadziałało, więc musiałem sam znaleźć rozwiązanie.

Czego potrzebujesz do instalacji

  • Adapter dokujący USB-C na USB (co najmniej trzy wejścia USB do podłączenia myszy, klawiatury, modemu USB lub telefonu w trybie tetheringu). Jest to konieczne tylko podczas pierwszych etapów instalacji
  • Klawiatura USB
  • Pamięć flash USB/USB-C o pojemności co najmniej 4 GB

1. Wyłącz zakaz uruchamiania z nośników zewnętrznych

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

2. Przydziel wolne miejsce za pomocą Narzędzia dyskowego

Dla wygody od razu przydzieliłem 30 GB na dysk, formatując go w exfat w samym Narzędziu dyskowym. Partycjonowanie dysku fizycznego Narzędzie dyskowe.

3. Utwórz obraz ISO

Opcje:

  1. Możesz pójść prostą drogą i pobrać gotowy obraz z jądrem 5.3.5-1 i łatkami z aunali1 link do gotowego obrazu
  2. Stwórz samodzielnie obraz poprzez archlive (wymagany system z dystrybucją Archa)

    zainstalować Archizo

    pacman -S archiso

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

    Dodaj repozytorium do pacman.conf:

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

    Ignorujemy oryginalne jądro w pacman.conf:

    IgnorePkg   = linux linux-headers
    

    Dodaj niezbędne pakiety, na koniec dodaj jądro linux-mbp i nagłówki linux-mbp

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

    Zmieniamy skrypt tak, aby działał w trybie interaktywnym (zamień pacstrap -C na 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!"
    }

    Tworzenie obrazu:

    sudo ./build.sh -v

    Naciśnij Y, aby pominąć ignorowane pakiety, a następnie zapisz obraz ISO na dysku flash USB:

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

4. Pierwsze uruchomienie

Uruchom ponownie z włożonym dyskiem flash i klawiaturą. Naciśnij opcje, gdy pojawi się jabłko, wybierz EFI BOOT.

Następnie należy nacisnąć klawisz „e” i wpisać na końcu wiersza poleceń moduł_czarna lista=piorun. Jeśli nie zostanie to zrobione, system może nie uruchomić się i pojawi się błąd Thunderbolt ICM.

Za pomocą fdisk/cfdisk odnajdujemy naszą partycję (u mnie jest to nvme0n1p4), formatujemy ją i instalujemy archiwum. Możesz użyć oficjalna instrukcja lub bokiem.

Nie tworzymy partycji rozruchowej; zapiszemy w niej program ładujący /dev/nvme0n1p1
Po całkowitym utworzeniu środowiska w /mnt i przed przejściem do arch-chroot, napisz:

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

Dodaj do /etc/pacman.conf:


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

Zainstaluj jądro:


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

Rejestrujemy Thunderbolt i applesmc w pliku /etc/modprobe.d/blacklist.conf

blacklist thunderbolt
blacklist applesmc

Klawiatura, pasek dotykowy itp

Zainstaluj tak:


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

Instalowanie modułów, aby pasek dotykowy działał:


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

Dodaj moduły do ​​uruchamiania: /etc/modules-load.d/apple.conf

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

Instalowanie modułów jądra dla klawiatury. W repozytorium roczny1 istnieje gotowy pakiet, nazywa się to apple-bce-dkms-git. Aby go zainstalować wpisz w konsoli:

pacman -S apple-bce-dkms-git

W takim przypadku zostanie wywołany moduł jądra jabłko-bce. W przypadku samodzielnego montażu jest to tzw bce. Odpowiednio, jeśli chcesz zarejestrować moduł w sekcji MODUŁY pliku mkinicpio.conf, nie zapomnij, który moduł zainstalowałeś.

Montaż ręczny:


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

Dodaj moduł bce lub apple-bce do uruchamiania: /etc/modules-load.d/bce.conf

bce

Jeżeli chcesz domyślnie korzystać z przycisków Fn to w pliku /etc/modprobe.d/apple-tb.conf napisz:

options apple-ib-tb fnmode=2

Aktualizacja jądra i initramfs.


mkinitcpio -p linux-mbp

Zainstaluj iwd:

sudo pacman -S networkmanager iwd

5. Ładowarka

Po zainstalowaniu wszystkich głównych pakietów w chroot, możesz rozpocząć instalację bootloadera.

Nie udało mi się zmusić Gruba do pracy. Grub uruchamia się z zewnętrznego dysku USB, ale przy próbie zarejestrowania go w nvme przez

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

system wpadł w panikę jądra i po ponownym uruchomieniu nowego elementu opcje nie pojawiły się. Nie znalazłem żadnego jasnego rozwiązania tego problemu i dlatego zdecydowałem się spróbować zaimplementować uruchamianie przy użyciu systemd-boot.

  1. Biegnij
    bootctl --path=/boot install

    i wpadamy w panikę jądra. Wyłącz MacBooka, włącz go ponownie, kliknij opcje (nie wyłączaj koncentratora USB-C z klawiaturą)

  2. Sprawdzamy, czy oprócz urządzenia zewnętrznego pojawił się nowy wpis EFI BOOT
  3. Wybieramy rozruch z zewnętrznego dysku USB, tak jak podczas pierwszej instalacji (nie zapomnij podać module_blacklist=thunderbolt)
  4. Montujemy nasz dysk i wchodzimy do środowiska poprzez arch-chroot


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

Jeżeli konieczna jest praca klawiatury do czasu pełnego obciążenia systemu (jest to konieczne w przypadku korzystania z szyfrowania luks/dm-crypt), to wpisz to w pliku /etc/mkinicpio.conf w sekcji MODUŁY:

MODULES=(ext4 applespi intel_lpss_pci spi_pxa2xx_platform bce)

Aktualizacja jądra i initramfs.


mkinicpio -p linux-mbp

Konfigurowanie systemd-boot

Edytujemy plik /boot/loader/loader.conf, usuwamy wszystko z niego i dodajemy:

default arch
timeout 5
editor 1

Przejdź do folderu /boot/loader/entries, utwórz plik arch.conf i napisz:

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

Jeśli użyłeś luksa i lvm, to

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

Uruchom ponownie system MacOS.

6. Konfiguracja Wi-Fi

Jak się ostatecznie okazało, MacOS przechowuje w folderze pliki oprogramowania sprzętowego adaptera Wi-Fi /usr/share/firmware/wifi i możesz je stamtąd pobrać w postaci obiektów typu blob i przekazać do modułu jądra brcmfmac. Aby dowiedzieć się, jakich plików używa Twój adapter, otwórz terminal w systemie MacOS i napisz:

ioreg -l | grep C-4364

Dostajemy długą listę. Potrzebujemy tylko plików z sekcji Żądane pliki:

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

W Twoim przypadku nazwy plików mogą się różnić. Skopiuj je z folderu /usr/share/firmware/wifi na dysk flash i zmień ich nazwę w następujący sposób:

    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>

W tym przypadku ostatni plik tekstowy zawiera nazwy modeli; jeśli Twój model to inny niż macbookpro15,2, musisz zmienić nazwę tego pliku zgodnie z modelem MacBooka.

Uruchom ponownie Archa.

Skopiuj pliki z pendrive'a do folderu /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/

Sprawdzanie funkcjonalności modułu:


rmmod brcmfmac
modprobe brcmfmac

Dbamy o to, aby interfejs sieciowy pojawił się poprzez ifconfig/ip.
Konfigurowanie Wi-Fi przez iwctl

Uwaga. Przez netctl, nmcli itp. Interfejs nie działa, tylko poprzez iwd.

Zmuszamy NetworkManagera do używania iwd. W tym celu utwórz plik /etc/NetworkManager/NetworkManager.conf i napisz:

[device]
wifi.backend=iwd

Uruchom usługę NetworkManager


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

7. Dźwięk

Aby dźwięk działał musisz zainstalować pulsaudio:


sudo pacman -S pulseaudio

Pobierz trzy pliki:

Przesuńmy 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. Zawieś/Wznów

Obecnie 16.10.2019 musisz wybrać dźwięk lub zawieszenie/wznowienie. Czekamy, aż autor modułu bce uzupełni funkcjonalność.

Aby zbudować moduł z obsługą zawieszenia/wznowienia, musisz wykonać następujące czynności:


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

Jeżeli zainstalowałeś gotowy moduł apple-bce z repozytorium anuali1, to musisz go najpierw usunąć, a dopiero potem zmontować i zainstalować moduł bce z obsługą trybu zawieszenia.

Musisz także dodać moduł applesmc do czarnej listy (jeśli nie robiłeś tego wcześniej) i upewnić się, że w /boot/loader/entries/arch.conf w linii opcji na końcu dodano parametr pcie_ports=kompatybilny.

Obecnie sterownik paska dotykowego ulega awarii po wejściu w tryb wstrzymania, a sterownik Thunderbolt czasami zawiesza system na ponad 30 sekund i na kilka minut po wznowieniu. Można to naprawić, automatycznie rozładowując problematyczne moduły.

Utwórz skrypt /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

Ustaw jako wykonywalny:

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

To wszystko na teraz. Rezultatem jest w pełni funkcjonalny system, z wyjątkiem pewnych niuansów związanych z zawieszeniem/wznowieniem. W ciągu kilku dni nieprzerwanej pracy nie zaobserwowano żadnych awarii ani błędów jądra. Mam nadzieję, że w niedalekiej przyszłości autor modułu bce go dokończy i otrzymamy pełne wsparcie dla zawieszenia/wznowienia i dźwięku.

Źródło: www.habr.com

Dodaj komentarz