MacBook Pro 2018 T2 ze maachen mat ArchLinux (dualboot)

Et gouf e bëssen Hype iwwer d'Tatsaach datt den neien T2 Chip et onméiglech mécht Linux op den neien 2018 MacBooks mat enger Touchbar z'installéieren. D'Zäit ass vergaang, an um Enn vum 2019 hunn Drëtt-Partei Entwéckler eng Zuel vu Chauffeuren a Kernel Patches fir Interaktioun mam T2 Chip implementéiert. Den Haapttreiber fir MacBook Modeller 2018 a méi nei implementéiert VHCI Operatioun (Touch / Keyboard / etc. Operatioun), souwéi Tounoperatioun.

De Projet mbp2018-bridge-drv opgedeelt an 3 Haaptkomponenten:

  • BCE (Buffer Copy Engine) - etabléiert den Haaptkommunikatiounskanal mat T2. VHCI an Audio erfuerderen dës Komponent.
  • VHCI ass en USB Virtual Host Controller; d'Tastatur, d'Maus an aner Systemkomponente gi vun dëser Komponent geliwwert (aner Chauffeuren benotzen dësen Hostcontroller fir méi Funktionalitéit ze bidden.
  • Audio - Chauffer fir den T2 Audio Interface, ënnerstëtzt de Moment nëmmen Audioausgang duerch de MacBook's agebaute Spriecher


Den zweete Projet heescht macbook12-spi-driver, an et implementéiert d'Fäegkeet fir en Input Chauffer fir d'Tastatur, SPI Trackpad an Touchbar fir MacBook Pro Late 2016 a spéider ze bedreiwen. E puer Tastatur / Trackpad Treiber sinn elo am Kernel abegraff, ugefaange mat der Versioun 5.3.

Ënnerstëtzung fir Apparater wéi Wi-Fi, Touchpad, etc gouf och mat Kernel Patches implementéiert. Aktuell Kernel Versioun 5.3.5-1

Wat am Moment funktionnéiert

  1. NVMe
  2. Keyboard
  3. USB-C (Thunderbolt ass net getest ginn; wann de Modul automatesch gelueden ass, afréiert de System)
  4. Touchbar (mat der Fäegkeet fir d'Fn Schlësselen, Géigeliicht, ESC, etc.)
  5. Sound (nëmmen agebaute Spriecher)
  6. Wi-Fi Modul (iwwer brcmfmac an nëmmen iwwer iw)
  7. DisplayPort iwwer USB-C
  8. Sensoren
  9. Suspend/Resume (deelweis)
  10. etc ..

Dësen Tutorial ass applicabel fir macbookpro15,1 a macbookpro15,2. Den Artikel gouf als Basis vu Github op Englesch geholl. vun hei. Net alles an dësem Artikel huet geschafft, also hunn ech selwer eng Léisung ze fannen.

Wat Dir braucht fir ze installéieren

  • USB-C Docking Adapter op USB (op d'mannst dräi USB Inputen fir eng Maus, Tastatur, USB Modem oder Telefon am Tethering Modus ze verbannen). Dëst ass nëmmen an den éischten Etappe vun der Installatioun néideg
  • USB Tastatur
  • USB / USB-C Flash Drive Minimum 4GB

1. Desaktivéiere de Verbuet vum Booten vun externen Medien

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

2. Allokéiert fräi Plaz mat Disk Utility

Fir d'Bequemlechkeet hunn ech direkt 30GB op d'Disk zougewisen, se formatéieren an exfat am Disk Utility selwer. Partitionéiere vun engem Physical Disk Disk Utility.

3. Schafen eng ISO Bild

Optiounen:

  1. Dir kënnt den einfache Wee goen an e fäerdegt Bild mat Kernel 5.3.5-1 a Patches vun aunal 1 Link zum fäerdege Bild
  2. Erstellt e Bild selwer iwwer archlive (e System mat enger Archa Verdeelung ass erfuerderlech)

    Installéieren archiso

    pacman -S archiso

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

    Füügt de Repository op pacman.conf:

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

    Mir ignoréieren den ursprénglechen Kernel am pacman.conf:

    IgnorePkg   = linux linux-headers
    

    Füügt déi néideg Packagen un, füügt um Enn den linux-mbp-Kernel a linux-mbp-Header derbäi

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

    Mir änneren de Skript fir am interaktiven Modus ze schaffen (ersetzen pacstrap -C mat 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!"
    }

    Bild bilden:

    sudo ./build.sh -v

    Dréckt Y fir ignoréiert Packagen ze sprangen, da schreift d'ISO Bild op den USB Flash Drive:

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

4. Éischt Stiwwel

Restart mat der Flash Drive an der Tastatur agebaut. Dréckt Optiounen wann den Apel erscheint, wielt EFI BOOT.

Als nächst musst Dir den "e" Schlëssel drécken a gitt um Enn vun der Kommandozeil module_blacklist = Thunderbolt. Wann dëst net gemaach gëtt, kann de System net booten an en Thunderbolt ICM Feeler erschéngt.

Mat fdisk / cfdisk fanne mir eis Partition (fir mech ass et nvme0n1p4), formatéiert se an installéiert d'Archiv. Dir kënnt benotzen offiziell Uweisungen oder Säiteweis.

Mir kreéieren keng Bootpartition; Mir schreiwen de Bootloader an /dev/nvme0n1p1
Nodeems d'Ëmwelt am / mnt komplett geformt ass a ier Dir op Arch-Chroot plënnert, schreift:

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

Füügt op /etc/pacman.conf:


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

Installéiert de Kernel:


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

Mir registréieren Thunderbolt an Applesmc an /etc/modprobe.d/blacklist.conf

blacklist thunderbolt
blacklist applesmc

Tastatur, Touchbar, etc

Installéiert yay:


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

Installéiere vun Moduler fir d'Touchbar ze schaffen:


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

Füügt Module fir de Startup: /etc/modules-load.d/apple.conf

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

Installéiere Kernel Moduler fir d'Tastatur. Am Repository jährlech 1 et gëtt e fäerdege Pak, et heescht apple-bce-dkms-git. Fir et z'installéieren, schreift an der Konsole:

pacman -S apple-bce-dkms-git

An dësem Fall gëtt de Kernel Modul genannt apel-bce. Am Fall vun der Selbstmontage gëtt et genannt Eunapios. Deementspriechend, wann Dir e Modul an der MODULES Sektioun vun der mkinicpio.conf Datei registréiere wëllt, da vergiesst net wéi ee Modul Dir installéiert hutt.

Manuell Montage:


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

Füügt de bce- oder apple-bce-Modul fir de Start un: /etc/modules-load.d/bce.conf

bce

Wann Dir d'Fn-Knäppercher als Standard benotze wëllt, da schreift an der /etc/modprobe.d/apple-tb.conf Datei:

options apple-ib-tb fnmode=2

Aktualiséierung vum Kernel an Initramfs.


mkinitcpio -p linux-mbp

Installéieren iwd:

sudo pacman -S networkmanager iwd

5. Loader

Wann all d'Haaptpakete am Chroot installéiert sinn, kënnt Dir de Bootloader installéieren.

Ech konnt de Grub net op d'Aarbecht kréien. Grub boots vun engem externen USB Drive, awer wann Dir probéiert et an nvme ze registréieren via

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

de System ass an Kernel Panik gaangen, an no engem neien Element duerch Optiounen nei starten ass net erschéngt. Ech hunn keng kloer Léisung fir dëse Problem fonnt an hunn dofir beschloss ze probéieren de Booting mat Systemd-Boot ëmzesetzen.

  1. Lancéiere
    bootctl --path=/boot install

    a mir ginn an Kernel Panik. Maacht de MacBook aus, schalt et erëm un, klickt op Optiounen (schalt den USB-C Hub net mat Tastatur aus)

  2. Mir kontrolléieren datt en neien EFI BOOT Entrée nieft dem externen Apparat erschéngt
  3. Mir wielen fir vun engem externen USB Drive ze booten, wéi während der éischter Installatioun (vergiesst net module_blacklist = Thunderbolt ze spezifizéieren)
  4. Mir montéieren eis Disk a ginn an d'Ëmwelt iwwer Arch-Chroot


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

Wann et néideg ass datt d'Tastatur funktionnéiert bis de System voll gelueden ass (dëst ass néideg wann Dir luks/dm-crypt Verschlësselung benotzt), da schreift et an der /etc/mkinicpio.conf Datei an der MODULES Sektioun:

MODULES=(ext4 applespi intel_lpss_pci spi_pxa2xx_platform bce)

Aktualiséierung vum Kernel an Initramfs.


mkinicpio -p linux-mbp

Systemd-boot opsetzen

Mir änneren d'Datei /boot/loader/loader.conf, läschen alles dobannen, a fügen déi folgend:

default arch
timeout 5
editor 1

Gitt an den Dossier /boot/loader/entries, erstellt d'arch.conf Datei a schreift:

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

Wann Dir luks an lvm benotzt, dann

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

Restart an MacOS.

6. Wi-Fi Ariichten

Wéi et sech um Enn erausstellt, späichert MacOS d'Firmwaredateien fir de Wi-Fi Adapter am Dossier /usr/share/firmware/wifi , an Dir kënnt se vun do an der Form vu Blobs huelen an se an de brcmfmac Kernel Modul fidderen. Fir erauszefannen wéi eng Dateien Ären Adapter benotzt, öffnen en Terminal op MacOS a schreift:

ioreg -l | grep C-4364

Mir kréien eng laang Lëscht. Mir brauchen nëmmen Dateien aus der Rubrik Gefrote Dateien:

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

An Ärem Fall kënnen d'Dateiennimm ënnerscheeden. Kopéiert se aus dem /usr/share/firmware/wifi Dossier op de Flash Drive an ëmbenennen se wéi follegt:

    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>

An dësem Fall enthält déi lescht Textdatei d'Modelnamen; Wann Äre Modell net macbookpro15,2 ass, da musst Dir dës Datei am Aklang mat Ärem MacBook Modell ëmbenennen.

Restart an Arch.

Kopéiert d'Dateien vum Flash Drive an den Dossier /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/

Iwwerpréift d'Funktionalitéit vum Modul:


rmmod brcmfmac
modprobe brcmfmac

Mir suergen dofir datt d'Netzwierk Interface duerch ifconfig/ip erschéngt.
Wifi opsetzen via iwctl

Opgepasst. Iwwer netctl, nmcli, etc. D'Interface funktionnéiert net, nëmmen duerch iwd.

Mir forcéiere NetworkManager iwd ze benotzen. Fir dëst ze maachen, erstellt d'Datei /etc/NetworkManager/NetworkManager.conf a schreift:

[device]
wifi.backend=iwd

Start NetworkManager Service


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

7. Sound

Fir datt de Sound funktionnéiert, musst Dir Pulsaudio installéieren:


sudo pacman -S pulseaudio

Luet dräi Dateien erof:

Loosst eis se réckelen:

    /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

De Moment 16.10.2019 Dir musst entweder Sound oder suspendéieren / resume wielen. Mir waarden op den Auteur vum bce Modul fir d'Funktionalitéit ze kompletéieren.

Fir e Modul mat Susped / Resume Support ze bauen, musst Dir déi folgend maachen:


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

Wann Dir de fäerdege Apple-bce-Modul aus dem anuali1-Repository installéiert hutt, da musst Dir et als éischt ewechhuelen an nëmmen dann de bce-Modul mat Suspension-Modus-Ënnerstëtzung montéieren an installéieren.

Och musst Dir den Applesmc Modul op d'Schwaarzlëscht addéieren (wann Dir dat net virdru gemaach hutt) a gitt sécher datt an /boot/loader/entries/arch.conf an der Optiounslinn um Enn de Parameter derbäigesat gëtt. pcie_ports=compat.

De Moment klappt den Touchbar Chauffer wann Dir an de Suspensiounsmodus erakënnt, an den Thunderbolt Chauffer freet heiansdo de System fir méi wéi 30 Sekonnen, a fir e puer Minutten wann Dir weider geet. Dëst kann fixéiert ginn andeems se problematesch Moduler automatesch ausluede.

Erstellt e Skript /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

Maacht et ausféierbar:

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

Dat ass alles fir de Moment. D'Resultat ass e komplett funktionéierbare System, mat Ausnam vun e puer Nuancen mat Suspen / Resume. Keng Crashen oder Kernel Panik goufen während e puer Deeg Uptime observéiert. Ech hoffen, datt an der nächster Zukunft den Auteur vum bce Modul et fäerdeg bréngt, a mir wäerte voll Ënnerstëtzung fir Suspensioun / Resume an Sound kréien.

Source: will.com

Setzt e Commentaire