MacBook Pro 2018 T2 működésbe állítása ArchLinux-szal (dualboot)

Sokáig sok beszéd folyt arról, hogy az új T2 chip miatt nem lehet Linuxot telepíteni a 2018-as Touch Bar-os MacBookokra. Az idő múlásával, 2019 végére külső fejlesztők sorozatnyi meghajtót és kerneljavítást készítettek a T2 chippel való együttműködéshez. A 2018-as és újabb MacBook modellekhez készült alapvető meghajtó az VHCI működését valósítja meg (touch, billentyűzet stb.), valamint a hang működését is.

Projekt mbp2018-bridge-drv három fő komponensre van felosztva:

  • BCE (Buffer Copy Engine) – beállítja a fő kommunikációs csatornát a T2-höz. Az VHCI és az Audio igényli ezt az komponenst.
  • VHCI – ez egy virtuális USB gazda vezérlő; a billentyűzet, az egér és a rendszer egyéb komponensei ezt az komponenst igénylik (más meghajtók használják ezt a gazda vezérlőt a további funkciók biztosításához).
  • Audio – a T2 audio interfészéhez készült meghajtó, jelenleg csak a beépített MacBook hangszórók kimenetének támogatásával.


A második projekt neve macbook12-spi-driver, és lehetővé teszi a billentyűzet, az SPI trackpad és a 2016 végi és újabb MacBook Pro touch bar meghajtójának működését. A billentyűzet/trackpad meghajtók egy része mostantól a 5.3-as verziójú kernelbe be van építve.

A kerneljavítások segítségével a wifi, trackpad stb. eszközök támogatása is megvalósult. Jelenleg a kernel verziója 5.3.5-1

Jelenleg működő dolgok

  1. NVMe
  2. Billentyűzet
  3. USB-C (a Thunderbolt nem volt tesztelve, a modul automatikus betöltése lefagyasztja a rendszert)
  4. Touch Bar (az Fn billentyűk aktiválásának lehetőségével, háttérvilágítással, ESC stb.)
  5. Hang (csak a beépített hangszórók)
  6. Wi-Fi modul (a brcmfmac segítségével és csak iw-n keresztül)
  7. DisplayPort USB-C-n keresztül
  8. Érzékelők
  9. Felfüggesztés/Ébresztés (részben)
  10. stb.

Ez a tutorial a macbookpro15,1 és a macbookpro15,2 modellekre vonatkozik. Az alapját egy angol nyelvű GitHub cikk adta. innenNem minden, ami ebben a cikkben szerepel, működött, ezért magamnak kellett megoldást keresnem.

Mi szükséges a telepítéshez

  • USB-C dokkoló adapter USB-re (legalább három USB port a mouse, billentyűzet, USB modem vagy tethering módban működő telefon csatlakoztatásához). Erre csak a telepítés első lépéseiben van szükség.
  • USB billentyűzet
  • USB/USB-C flash meghajtó minimum 4GB kapacitással

1. Kapcsolja ki a külső médiáról való bootolás tilalmát.

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

2. A Disk Utility segítségével szabad területet képzünk.

A kényelem kedvéért azonnal 30GB-ot elkülönítettem és exfat formátumra formázva a Disk Utility-ben. A fizikai lemez partíciókba osztása a Disk Utility segítségével..

3. Az ISO kép létrehozása

Változatok:

  1. Egyszerű módon letölthetjük az 5.3.5-1 kernelhez készült kész képet a aunali1 kész képre mutató hivatkozást
  2. Készítsd el a képet saját magad az archlive segítségével (szükséges egy Arch disztribúcióval rendelkező rendszer)

    Telepítünk archiso

    pacman -S archiso

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

    Hozd hozzá a tárolót a pacman.conf fájlhoz:

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

    Figyelmen kívül hagyjuk az eredeti kernelt a pacman.conf fájlban:

    IgnorePkg   = linux linux-headers
    

    Hozzáadjuk a szükséges csomagokat, a végén hozzátesszük a linux-mbp és linux-mbp-headers kernelt.

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

    Módosítjuk a szkriptet az interaktív működés érdekében (cseréljük ki a pacstrap -C-t pacstrap -i -C-ra):

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

    Kép létrehozása:

    sudo ./build.sh -v

    Nyomj Y-t, hogy kihagyd az ignorált csomagokat, majd írd az ISO képet az USB flash meghajtóra:

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

4. Első indítás

Indítsd újra a csatlakoztatott flash meghajtóval és billentyűzettel. Nyomj options a logó megjelenésekor, válaszd az EFI BOOT-ot.

Ezután meg kell nyomnunk az 'e' gombot és beírnunk a parancssor végére, module_blacklist=thunderbolt. Ha ezt nem teszed meg, lehet, hogy a rendszer nem töltődik be, és thunderbolt ICM hiba lép fel.

A fdisk/cfdisk segítségével keresd meg a partíciódat (nekem ez nvme0n1p4), formázd meg, és telepítsd az Arch-ot. Használhatod az hivatalos útmutatót vagy harmadik fél által készített.

A boot partíciót nem hozzuk létre, a bootloader-t létrehozásához /dev/nvme0n1p1
Miután teljesen elkészült a környezet a /mnt alatt, és mielőtt átmenne az arch-chroot-ba, írjuk:

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

Hozzáadjuk a /etc/pacman.conf fájlhoz:


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

Telepítjük a kernelt:


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

Tartsuk nyilván a thunderbolt-ot és az applesmc-t a /etc/modprobe.d/blacklist.conf fájlban

blacklist thunderbolt
blacklist applesmc

Billentyűzet, touch bar, stb.

Telepítjük a yay-t:


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

Telepítjük a touch bar működéséhez szükséges modulokat:


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

Hozzáadjuk a modulokat az automatikus indításhoz: /etc/modules-load.d/apple.conf

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

Telepítjük a billentyűzet működéséhez szükséges kernel modulokat. A tárolóban anuali1 van egy kész csomag, a neve apple-bce-dkms-git. A telepítéshez írd be a konzolba:

pacman -S apple-bce-dkms-git

Ebben az esetben a kernel modul neve apple-bce. Ha te magad állítod össze, akkor a neve bce. Tehát, ha szeretnéd felvenni a modult a MODULES részbe a mkinicpio.conf fájlban, ne felejtsd el, melyik modult telepítetted.

Kézi összeszerelés:


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

Adjuk hozzá a bce vagy apple-bce modult az automatikus indításhoz: /etc/modules-load.d/bce.conf

bce

Ha az Fn gombokat alapértelmezetten szeretnénk használni, akkor a /etc/modprobe.d/apple-tb.conf fájlba írjuk:

options apple-ib-tb fnmode=2

Frissítjük a kernelt és az initramfs-t.


mkinitcpio -p linux-mbp

Telepítjük az iwd-t:

sudo pacman -S networkmanager iwd

5. Betöltő

Miután a chroot-on belül az összes alapvető csomag telepítve van, elkezdhetjük a betöltő telepítését.

Nem tudtam működésre bírni a grub-ot. Külső usb meghajtóról a grub betöltődik, de a nvme-re való telepítésekor

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

a rendszer kernel panicba esett, és újraindítás után az új lehetőség nem jelent meg az options között. Nem találtam világos megoldást erre a problémára, ezért úgy döntöttem, hogy megpróbálom a betöltést a systemd-boot segítségével.

  1. Indítás
    bootctl --path=/boot install

    és kernel panicba esünk. Kikapcsoljuk a MacBook-ot, újra bekapcsoljuk, megnyomjuk az options-t (az usb-c hubot a billentyűzettel nem húzzuk ki)

  2. Ellenőrizzük, hogy megjelent egy új EFI BOOT bejegyzés a külső eszköz mellett
  3. Válasszuk a külső usb meghajtóról való indítást, mint az első telepítéskor (ne felejtsük el megadni a module_blacklist=thunderbolt-ot)
  4. Csatlakoztatjuk a meghajtónk és átmegyünk a környezetbe az arch-chroot segítségével


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

Ha szükséges, hogy a billentyűzet működjön a rendszer teljes betöltése előtt (ez szükséges a luks/dm-crypt titkosítás használatakor), akkor az /etc/mkinicpio.conf fájl MODULES részébe írjuk:

MODULES=(ext4 applespi intel_lpss_pci spi_pxa2xx_platform bce)

Frissítjük a kernelt és az initramfs-t.


mkinicpio -p linux-mbp

Beállítjuk a systemd-boot-ot

Szerkesztjük a /boot/loader/loader.conf fájlt, eltávolítjuk mindent, ami belül van, és a következőt írjuk be:

default arch
timeout 5
editor 1

Átmegyünk a /boot/loader/entries mappába, létrehozzuk az arch.conf fájlt és írunk:

cím arch
linux /vmlinuz-linux-mbp
initrd /initramfs-linux-mbp.img
opciók root=/dev/<b>nvme0n1p4</b> rw pcie_ports=compat

Ha használtuk a luks-ot és a lvm-et, akkor

opciók cryptdevice=\/dev\/<b>nvme0n1p4</b>:luks root=\/dev\/mapper\/vz0-root rw pcie_ports=kompatibilis

Újraindítunk MacOS-ba.

6. Wi-Fi beállítása

Mint kiderült, a MacOS a wi-fi adapter firmware fájljait a következő mappában tárolja: /usr/share/firmware/wifi , és innen át tudjuk venni blob formájában és bele tudjuk adni a brcmfmac kernel modulnak. Annak érdekében, hogy megtudjuk, hogy az adaptered milyen fájlokat használ, nyissuk meg a terminált a MacOS-en és írjuk be:

ioreg -l | grep C-4364

Hosszú listát kapunk. Csak a következő részről vannak szükségünk fájlokra: 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>"})

A te esetedben a fájlnevek eltérhetnek. Másoljuk át a fájlokat a /usr/share/firmware/wifi mappából egy flash meghajtóra és nevezzük át a következő módon:

    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>

Ebben az esetben az utolsó szöveges fájl a modell nevét tartalmazza. Ha a modelled nem macbookpro15,2, akkor át kell nevezned ezt a fájlt a MacBookod modellje szerint.

Újraindítunk archban.

Fájlokat másolunk a flashről a /lib/firmware/brcm/ mappába.


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/

Ellenőrizzük a modul működését:


rmmod brcmfmac
modprobe brcmfmac

Biztosítjuk, hogy a hálózati interfész megjelenik az ifconfig/ip parancsokkal.
WiFi beállítások az iwctl segítségével.

Figyelem. A netctl, nmcli stb. interfész nem működik, csak az iwd-vel.

Kényszerítjük a NetworkManager-t, hogy használja az iwd-t. Ehhez létrehozunk egy fájlt a /etc/NetworkManager/NetworkManager.conf alatt és beírjuk:

[device]
wifi.backend=iwd

Elindítjuk a NetworkManager szolgáltatást.


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

7. Hang

A hang működéséhez telepíteni kell a pulseaudio-t:


sudo pacman -S pulseaudio

Három fájlt töltünk le:

Áthelyezzük őket:

    /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

Jelenleg 16.10.2019 Választani kell a hang és a suspend/resume között. Várunk, amíg a modul készítője befejezi a funkciót.

A suspend/resume funkcióval rendelkező modul összegyűjtéséhez a következőket kell végrehajtani:


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

Ha telepítetted az apple-bce modult az anuali1 repóból, először azt el kell távolítani, és csak ezután kell összegyűjteni és telepíteni a suspend módot támogató bce modult.

Ezen kívül hozzá kell adni az applesmc modult a blacklisthez (ha korábban ezt nem tetted) és ellenőrizni, hogy a /boot/loader/entries/arch.conf fájl options sorában hozzá van adva a paraméter: pcie_ports=compat.

Jelenleg a Touch Bar drivere lefagy, amikor belép a suspend módba, és a Thunderbolt driver néha több mint 30 másodpercig felfüggeszti a rendszert, és a folytatáskor több percig tart. Ezt automatizált problémás modulok deaktiválásával lehet orvosolni.

Hozz létre egy scriptet. /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

Tedd végrehajthatóvá:

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

Ez eddig rendben van. Végül egy teljesen működőképes rendszert kapunk, néhány felfüggesztésre / folytatásra vonatkozó részletet kivéve. Az elmúlt napok működési ideje alatt nem tapasztaltam fagyásokat és kernel pánikokat. Remélem, hogy a bce modul készítője hamarosan befejezi, és teljes körű támogatást kapunk a suspend/resume és hang tekintetében.

Forrás: habr.com

Megbízható hosting vásárlása weboldalak számára, DDoS védelemmel, VPS VDS szerverek. 🔥 Megbízható webtárhely vásárlása DDoS védelemmel, VPS VDS szerverek | ProHoster