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 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á , 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
Co aktuálně funguje
- NVMe
- Klávesnice
- USB-C (Thunderbolt nebyl testován, při automatickém načtení modulu zamrzá systém)
- Touch Bar (s možností aktivace kláves Fn, podsvícení, ESC atd.)
- Zvuk (pouze vestavěné reproduktory)
- Wi-Fi modul (přes brcmfmac a pouze přes iw)
- DisplayPort přes USB-C
- Senzory
- Suspend/Resume (částečně)
- 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ě . 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í.
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. .
3. Vytváříme iso obraz
Varianty:
- Můžete jít jednoduchou cestou a stáhnout hotový obraz s jádrem 5.3.5-1 a patche od
- Vytvořit obraz samostatně přes archlive (je třeba systém s distribucí Arch Linuxu)
Instalujeme
pacman -S archisocp -r /usr/share/archiso/configs/releng/ archlive cd archlivePřidáme repozitář do pacman.conf:
[mbp] Server = https://packages.aunali1.com/archlinux/$repo/$archIgnorujeme originální jádro v pacman.conf:
IgnorePkg = linux linux-headersPř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-headersUpravujeme 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 -vStiskneme 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 nebo .
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 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-gitV 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
bcePokud chcete používat výchozí tlačítka Fn, do souboru /etc/modprobe.d/apple-tb.conf napíšeme:
options apple-ib-tb fnmode=2Aktualizujeme jádro a initramfs.
mkinitcpio -p linux-mbp
Nainstalujeme iwd:
sudo pacman -S networkmanager iwd5. 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.
- Spouštíme
bootctl --path=/boot installa dostáváme kernel panic. Vypneme MacBook, zapneme znovu, stiskneme options (usb-c hub s klávesnicí nevypínáme)
- Kontrolujeme, že se objevila nová položka EFI BOOT vedle externího zařízení
- Vybereme spuštění z externího USB disku, jako při první instalaci (nezapomínejte na module_blacklist=thunderbolt)
- 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-4364Zí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 -> 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 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
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.rules8. 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
