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.
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ądra5.3.5-1
Co w tej chwili działa
NVMe
klawiatura
USB-C (Thunderbolt nie był testowany; gdy moduł ładuje się automatycznie, zawiesza system)
Touchbar (z możliwością włączenia klawiszy Fn, podświetlenia, ESC itp.)
Dźwięk (tylko wbudowane głośniki)
Moduł Wi-Fi (przez brcmfmac i tylko przez iw)
DisplayPort przez USB-C
Czujniki
Zawieś/Wznów (częściowo)
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
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
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
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.
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ą)
Sprawdzamy, czy oprócz urządzenia zewnętrznego pojawił się nowy wpis EFI BOOT
Wybieramy rozruch z zewnętrznego dysku USB, tak jak podczas pierwszej instalacji (nie zapomnij podać module_blacklist=thunderbolt)
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:
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:
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/
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.