MacBook Pro 2018 T2 meitsje wurkje mei ArchLinux (dualboot)

D'r is nochal wat hype west oer it feit dat de nije T2-chip it ûnmooglik makket om Linux te ynstallearjen op 'e nije 2018 MacBooks mei in touchbar. De tiid gie foarby, en oan 'e ein fan 2019 implementearren ûntwikkelders fan tredden in oantal bestjoerders en kernelpatches foar ynteraksje mei de T2-chip. De wichtichste stjoerprogramma foar MacBook modellen 2018 en nijer ymplemintearret VHCI operaasje (touch / toetseboerd / ensfh operaasje), likegoed as lûd operaasje.

It projekt mbp2018-bridge-drv ferdield yn 3 haadkomponinten:

  • BCE (Buffer Copy Engine) - stelt de wichtichste kommunikaasje kanaal mei T2. VHCI en Audio fereaskje dizze komponint.
  • VHCI is in USB Virtual Host Controller; it toetseboerd, de mûs en oare systeemkomponinten wurde levere troch dizze komponint (oare bestjoerders brûke dizze hostkontrôler om mear funksjonaliteit te leverjen.
  • Audio - stjoerprogramma foar de T2 audio-ynterface, stipet op it stuit allinich audioútfier fia de ynboude sprekkers fan 'e MacBook


It twadde projekt hjit macbook12-spi-bestjoerder, en it ymplementearret de mooglikheid om in ynfierbestjoerder te betsjinjen foar it toetseboerd, SPI-trackpad, en touchbar foar MacBook Pro Late 2016 en letter. Guon toetseboerd-/trackpad-bestjoerders binne no opnommen yn 'e kernel, begjinnend mei ferzje 5.3.

Stipe foar apparaten lykas wi-fi, touchpad, ensfh waard ek ymplementearre mei help fan kernel patches. Aktuele kernel ferzje 5.3.5-1

Wat wurket op it stuit

  1. NVMe
  2. Keyboard
  3. USB-C (Thunderbolt is net hifke; as de module automatysk wurdt laden, befriest it it systeem)
  4. Touchbar (mei de mooglikheid om de Fn-toetsen, efterljochting, ESC, ensfh.)
  5. Lûd (allinich ynboude sprekkers)
  6. Wi-Fi-module (fia brcmfmac en allinich fia iw)
  7. DisplayPort oer USB-C
  8. Sensoren
  9. Suspend/Resume (foar in part)
  10. etc ..

Dizze tutorial is fan tapassing foar macbookpro15,1 en macbookpro15,2. It artikel waard nommen as basis fan Github yn it Ingelsk. fan hjir. Net alles yn dit artikel wurke, dus ik moast sels in oplossing fine.

Wat jo moatte ynstallearje

  • USB-C docking-adapter nei USB (op syn minst trije USB-yngongen foar it ferbinen fan in mûs, toetseboerd, USB-modem of tillefoan yn tethering-modus). Dit is allinich nedich yn 'e earste fazen fan ynstallaasje
  • USB toetseboerd
  • USB / USB-C flash drive minimum 4GB

1. Skeakelje it ferbod op booten fan eksterne media

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

2. Tawize frije romte mei help fan Skiif Utility

Foar it gemak haw ik fuortendaliks 30GB oan 'e skiif tawiisd, it opmaak yn exfat yn Disk Utility sels. Partitioning in Physical Disk Disk Utility.

3. Meitsje in ISO-ôfbylding

Opsjes:

  1. Jo kinne de ienfâldige rûte gean en in klearmakke ôfbylding downloade mei kernel 5.3.5-1 en patches fan aunali 1 link nei de klear ôfbylding
  2. Meitsje sels in ôfbylding fia archlive (in systeem mei in Archa-distribúsje is fereaske)

    Ynstallearje archiso

    pacman -S archiso

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

    Foegje it repository ta oan pacman.conf:

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

    Wy negearje de orizjinele kernel yn pacman.conf:

    IgnorePkg   = linux linux-headers
    

    Foegje de nedige pakketten ta, foegje oan 'e ein de linux-mbp-kernel en linux-mbp-headers ta

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

    Wy feroarje it skript om te wurkjen yn ynteraktive modus (ferfange pacstrap -C mei 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!"
    }

    In ôfbylding foarmje:

    sudo ./build.sh -v

    Druk op Y om negearre pakketten oer te slaan, skriuw dan de iso-ôfbylding nei it usb-flash-drive:

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

4. Earste boot

Reboot mei de flash drive en toetseboerd ynfoege. Druk op opsjes as de appel ferskynt, selektearje EFI BOOT.

Folgjende moatte jo op de "e" kaai drukke en ynfiere oan 'e ein fan' e kommandorigel module_blacklist=thunderbolt. As dit net dien wurdt, kin it systeem net bootje en sil in Thunderbolt ICM-flater ferskine.

Mei fdisk/cfdisk fine wy ​​ús partysje (foar my is it nvme0n1p4), formatearje it en ynstallearje it argyf. Jo kinne brûke offisjele ynstruksjes of sydlings.

Wy meitsje gjin bootpartysje oan; wy sille de bootloader yn skriuwe /dev/nvme0n1p1
Nei it miljeu yn / mnt is folslein foarme en foardat jo nei arch-chroot ferpleatse, skriuw:

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

Taheakje oan /etc/pacman.conf:


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

Ynstallearje de kernel:


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

Wy registrearje thunderbolt en applesmc yn /etc/modprobe.d/blacklist.conf

blacklist thunderbolt
blacklist applesmc

Toetseboerd, touchbar, ensfh

Ynstallearje jo:


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

Ynstallaasje fan modules foar de touchbar om te wurkjen:


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

Foegje modules ta oan it opstarten: /etc/modules-load.d/apple.conf

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

Ynstallearje kernel modules foar it toetseboerd. Yn de repository jierliks ​​1 der is in klear pakket, hjit it apple-bce-dkms-git. Om it te ynstallearjen, skriuw yn 'e konsole:

pacman -S apple-bce-dkms-git

Yn dit gefal sil de kernelmodule wurde neamd appel-bce. Yn it gefal fan sels-assemblage wurdt it neamd ecb. Dêrom, as jo in module registrearje wolle yn 'e MODULES-seksje fan' e mkinicpio.conf-bestân, ferjit dan net hokker module jo ynstalleare.

Hânlieding gearstalling:


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

Foegje de bce- of apple-bce-module ta oan it opstarten: /etc/modules-load.d/bce.conf

bce

As jo ​​​​standert de Fn-knoppen brûke wolle, skriuw dan yn it /etc/modprobe.d/apple-tb.conf-bestân:

options apple-ib-tb fnmode=2

It bywurkjen fan de kernel en initramfs.


mkinitcpio -p linux-mbp

Ynstallearje iwd:

sudo pacman -S networkmanager iwd

5. Loader

Sadree't alle haadpakketten yn 'e chroot binne ynstalleare, kinne jo begjinne mei it ynstallearjen fan de bootloader.

Ik haw grub net oan it wurk krije kinnen. Grub boots fan in eksterne USB-stasjon, mar as jo besykje it te registrearjen yn nvme fia

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

it systeem gie yn kernel panyk, en nei it herstarten fan in nij item fia opsjes ferskynde net. Ik fûn gjin dúdlike oplossing foar dit probleem en besleat dêrom om te besykjen it opstarten út te fieren mei systemd-boot.

  1. Launch
    bootctl --path=/boot install

    en wy geane yn kernel panyk. Skeakelje de MacBook út, skeakelje it opnij oan, klikje op opsjes (útsette de USB-C-hub mei toetseboerd net)

  2. Wy kontrolearje dat in nije EFI BOOT-yngong is ferskynd neist it eksterne apparaat
  3. Wy selektearje om te booten fan in ekstern USB-stasjon, lykas by de earste ynstallaasje (ferjit net module_blacklist=thunderbolt op te jaan)
  4. Wy mount ús skiif en gean yn 'e omjouwing fia arch-chroot


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

As it nedich is foar it toetseboerd om te wurkjen oant it systeem folslein laden is (dit is nedich by it brûken fan luks/dm-crypt-kodearring), skriuw it dan yn it /etc/mkinicpio.conf-bestân yn 'e seksje MODULES:

MODULES=(ext4 applespi intel_lpss_pci spi_pxa2xx_platform bce)

It bywurkjen fan de kernel en initramfs.


mkinicpio -p linux-mbp

Systemd-boot ynstelle

Wy bewurkje it /boot/loader/loader.conf-bestân, wiskje alles binnen, en foegje de folgjende ta:

default arch
timeout 5
editor 1

Gean nei de map /boot/loader/entries, meitsje it arch.conf-bestân en skriuw:

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

As jo ​​​​luks en lvm brûkten, dan

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

Reboot yn MacOS.

6. Wi-Fi opset

As it úteinlik die bliken, bewarret MacOS de firmware-bestannen foar de wi-fi-adapter yn 'e map /usr/share/firmware/wifi , en do kinst nimme se út dêr yn 'e foarm fan blobs en feed se nei de brcmfmac kernel module. Om út te finen hokker bestannen jo adapter brûkt, iepenje in terminal yn MacOS en skriuw:

ioreg -l | grep C-4364

Wy krije in lange list. Wy hawwe allinich bestannen nedich fan 'e seksje Requested Files:

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

Yn jo gefal kinne de triemnammen ferskille. Kopiearje se fan 'e map /usr/share/firmware/wifi nei it flash drive en omneame se as folget:

    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>

Yn dit gefal befettet it lêste tekstbestân de modelnammen; as jo model net macbookpro15,2 is, dan moatte jo dit bestân omneame yn oerienstimming mei jo MacBook-model.

Reboot yn Arch.

Kopiearje de bestannen fan it flash-drive nei de map /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/

Kontrolearje de funksjonaliteit fan 'e module:


rmmod brcmfmac
modprobe brcmfmac

Wy soargje derfoar dat de netwurkynterface ferskynt fia ifconfig/ip.
Wifi ynstelle fia iwctl

Oandacht. Fia netctl, nmcli, ensfh. De ynterface wurket net, allinich fia iwd.

Wy twinge NetworkManager om iwd te brûken. Om dit te dwaan, meitsje de triem /etc/NetworkManager/NetworkManager.conf en skriuw:

[device]
wifi.backend=iwd

Start de NetworkManager-tsjinst


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

7. Lûd

Om it lûd te wurkjen, moatte jo pulsaudio ynstallearje:


sudo pacman -S pulseaudio

Download trije bestannen:

Litte wy se ferpleatse:

    /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 / Ferfetsje

Op dit stuit 16.10.2019 jo moatte kieze foar lûd of suspend / ferfetsje. Wy wachtsje op de skriuwer fan 'e bce-module om de funksjonaliteit te foltôgjen.

Om in module te bouwen mei stipe / resume-stipe, moatte jo it folgjende dwaan:


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

As jo ​​de klearmakke apple-bce-module ynstalleare fan 'e anuali1-repository, dan moatte jo it earst fuortsmite en pas dan de bce-module gearstalle en ynstallearje mei stipe foar suspendmodus.

Ek moatte jo de applesmc-module tafoegje oan 'e swarte list (as jo dit net earder dien hawwe) en soargje derfoar dat yn /boot/loader/entries/arch.conf yn 'e opsjesrigel oan 'e ein de parameter tafoege wurdt pcie_ports=kompat.

Op it stuit crasht de touchbar-bestjoerder by it ynfieren fan de suspendmodus, en de thunderbolt-bestjoerder befriest it systeem soms foar mear as 30 sekonden, en foar ferskate minuten by it hervatten. Dit kin wurde reparearre troch automatysk lossen problematyske modules.

Meitsje in 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

Meitsje it útfierber:

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

Dat is alles foar no. It resultaat is in folslein wurkber systeem, mei útsûndering fan guon nuânses mei suspend / resume. Gjin crashes of kernel panyk waarden waarnommen tidens ferskate dagen fan uptime. Ik hoopje dat yn 'e heine takomst de skriuwer fan' e bce-module it sil ôfmeitsje, en wy sille folsleine stipe krije foar suspend / resume en sound.

Boarne: www.habr.com

Add a comment