Ang paghimo sa MacBook Pro 2018 T2 nga magtrabaho sa ArchLinux (dualboot)

Adunay usa ka gamay nga hype bahin sa kamatuoran nga ang bag-ong T2 chip maghimo nga imposible nga i-install ang Linux sa bag-ong 2018 MacBooks nga adunay usa ka touchbar. Milabay ang panahon, ug sa katapusan sa 2019, ang mga developer sa ikatulo nga partido nagpatuman sa daghang mga drayber ug mga patch sa kernel alang sa interaksyon sa T2 chip. Ang nag-unang drayber alang sa mga modelo sa MacBook 2018 ug mas bag-o nagpatuman sa operasyon sa VHCI (paghikap / keyboard / etc. operasyon), ingon man usab sa tunog nga operasyon.

Ang proyekto mbp2018-bridge-drv gibahin ngadto sa 3 nag-unang mga sangkap:

  • BCE (Buffer Copy Engine) - nagtukod sa nag-unang channel sa komunikasyon nga adunay T2. Ang VHCI ug Audio nanginahanglan niini nga sangkap.
  • Ang VHCI usa ka USB Virtual Host Controller; ang keyboard, mouse ug uban pang mga sangkap sa sistema gihatag sa kini nga sangkap (ang ubang mga drayber naggamit niini nga tigkontrol sa host aron mahatagan ang dugang nga gamit.
  • Audio - driver alang sa T2 audio interface, sa pagkakaron nagsuporta lamang sa audio output pinaagi sa MacBook's built-in speakers


Gitawag ang ikaduhang proyekto macbook12-spi-driver, ug kini nagpatuman sa abilidad sa pag-operate sa usa ka input driver alang sa keyboard, SPI trackpad, ug touchbar alang sa Late 2016 ug sa ulahi MacBook Pros. Ang ubang mga drayber sa keyboard/trackpad naapil na karon sa kernel, sugod sa bersyon 5.3.

Ang suporta alang sa mga aparato sama sa wi-fi, touchpad, ug uban pa gipatuman usab gamit ang mga patch sa kernel. Karon nga bersyon sa kernel 5.3.5-1

Unsa ang nagtrabaho karon

  1. NVMe
  2. Keyboard
  3. USB-C (Wala pa masulayan ang Thunderbolt; sa diha nga ang module awtomatikong gikarga, kini nagyelo sa sistema)
  4. Touchbar (nga adunay kaarang nga i-on ang mga yawe sa Fn, backlight, ESC, ug uban pa)
  5. Tingog (built-in speaker lang)
  6. Wi-Fi module (pinaagi sa brcmfmac ug pinaagi lamang sa iw)
  7. DisplayPort sa USB-C
  8. Mga Sensor
  9. Suspindihon/Ipadayon (partially)
  10. ug uban pa ..

Kini nga panudlo magamit alang sa macbookpro15,1 ug macbookpro15,2. Ang artikulo gikuha isip basehan gikan sa Github sa English. gikan dinhi. Dili tanan sa kini nga artikulo nagtrabaho, busa kinahanglan nako nga mangita usa ka solusyon sa akong kaugalingon.

Unsa ang imong kinahanglan nga i-install

  • USB-C docking adapter sa USB (labing menos tulo ka USB input para sa pagkonektar sa mouse, keyboard, USB modem o telepono sa tethering mode). Kini gikinahanglan lamang sa unang mga yugto sa pag-instalar
  • USB nga keyboard
  • USB/USB-C flash drive nga minimum 4GB

1. I-disable ang pagdili sa pag-boot gikan sa external media

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

2. Paggahin ug libreng luna gamit ang Disk Utility

Alang sa kasayon, gigahin dayon nako ang 30GB sa disk, gi-format kini sa exfat sa Disk Utility mismo. Pagbahin sa usa ka Pisikal nga Disk Disk Utility.

3. Paghimo og ISO image

Mga kapilian:

  1. Mahimo ka nga moadto sa yano nga ruta ug mag-download sa usa ka andam nga imahe nga adunay kernel 5.3.5-1 ug mga patch gikan sa aunali1 link sa nahuman nga imahe
  2. Paghimo usa ka imahe sa imong kaugalingon pinaagi sa archlive (usa ka sistema nga adunay pag-apod-apod sa Archa gikinahanglan)

    Pag-instalar archiso

    pacman -S archiso

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

    Idugang ang repository sa pacman.conf:

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

    Gibalewala namo ang orihinal nga kernel sa pacman.conf:

    IgnorePkg   = linux linux-headers
    

    Idugang ang gikinahanglan nga mga pakete, sa katapusan idugang ang linux-mbp kernel ug linux-mbp-header

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

    Gibag-o namon ang script aron molihok sa interactive mode (ilisan ang pacstrap -C sa 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!"
    }

    Pagporma og imahe:

    sudo ./build.sh -v

    Pindota ang Y aron laktawan ang wala panumbalinga nga mga pakete, dayon isulat ang iso image sa usb flash drive:

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

4. Unang boot

Pag-reboot gamit ang flash drive ug keyboard nga gisulod. Pindota ang mga kapilian kung makita ang mansanas, pilia ang EFI BOOT.

Sunod, kinahanglan nimo nga ipadayon ang "e" nga yawe ug mosulod sa katapusan sa linya sa mando module_blacklist=thunderbolt. Kung wala kini nahimo, ang sistema mahimong dili mag-boot ug usa ka Thunderbolt ICM Error ang makita.

Gamit ang fdisk/cfdisk atong makita ang atong partition (para nako nvme0n1p4), i-format kini ug i-install ang archive. Mahimo nimong gamiton opisyal nga mga instruksyon o kilid.

Wala kami nagmugna og partisyon sa boot; among isulat ang bootloader sa /dev/nvme0n1p1
Human ang palibot sa / mnt hingpit nga naporma ug sa dili pa mobalhin sa arch-chroot, isulat:

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

Idugang sa /etc/pacman.conf:


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

I-install ang kernel:


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

Girehistro namo ang thunderbolt ug applesmc sa /etc/modprobe.d/blacklist.conf

blacklist thunderbolt
blacklist applesmc

Keyboard, touchbar, ug uban pa

Pag-instalar yay:


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

Pag-instalar sa mga module aron magtrabaho ang touchbar:


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

Idugang ang mga module sa pagsugod: /etc/modules-load.d/apple.conf

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

Pag-instalar sa mga module sa kernel alang sa keyboard. Sa repositoryo tuigali1 adunay usa ka andam nga hinimo nga pakete, kini gitawag apple-bce-dkms-git. Aron ma-install kini, isulat sa console:

pacman -S apple-bce-dkms-git

Sa kini nga kaso, ang kernel module tawgon mansanas-bce. Sa kaso sa self-assembly, gitawag kini ecb. Busa, kung gusto nimong magparehistro ug module sa seksyon sa MODULE sa mkininicpio.conf file, nan ayaw kalimti kung unsang module ang imong gi-install.

Manwal nga asembliya:


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

Idugang ang bce o apple-bce module sa pagsugod: /etc/modules-load.d/bce.conf

bce

Kung gusto nimong gamiton ang mga buton sa Fn sa default, dayon isulat sa /etc/modprobe.d/apple-tb.conf file:

options apple-ib-tb fnmode=2

Pag-update sa kernel ug initramfs.


mkinitcpio -p linux-mbp

I-install ang iwd:

sudo pacman -S networkmanager iwd

5. Loader

Kung ma-install na ang tanan nga mga nag-unang pakete sa sulod sa chroot, mahimo ka magsugod sa pag-install sa bootloader.

Wala ko kakuha ug grub sa trabaho. Grub boots gikan sa usa ka eksternal nga USB drive, apan sa diha nga ikaw mosulay sa pagparehistro niini sa nvme pinaagi sa

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

ang sistema nahadlok sa kernel, ug pagkahuman sa pag-reboot usa ka bag-ong butang pinaagi sa mga kapilian wala makita. Wala koy nakit-an nga klaro nga solusyon sa kini nga problema ug busa nakahukom nga sulayan nga ipatuman ang pag-boot gamit ang systemd-boot.

  1. Paglusad
    bootctl --path=/boot install

    ug moadto kami sa kernel panic. I-off ang MacBook, i-on kini pag-usab, i-klik ang mga kapilian (ayaw i-off ang USB-C hub nga adunay keyboard)

  2. Gisusi namon nga ang usa ka bag-ong entry sa EFI BOOT nagpakita dugang sa eksternal nga aparato
  3. Gipili namon ang pag-boot gikan sa usa ka eksternal nga USB drive, sama sa una nga pag-install (ayaw kalimti nga ipiho ang module_blacklist=thunderbolt)
  4. Gi-mount namo ang among disk ug moadto sa palibot pinaagi sa arch-chroot


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

Kung gikinahanglan nga mugana ang keyboard hangtod bug-os nga makarga ang sistema (kinahanglan kini kung gamiton ang luks/dm-crypt encryption), dayon isulat kini sa /etc/mkinicpio.conf file sa seksyon sa MODULE:

MODULES=(ext4 applespi intel_lpss_pci spi_pxa2xx_platform bce)

Pag-update sa kernel ug initramfs.


mkinicpio -p linux-mbp

Pag-set up sa systemd-boot

Among i-edit ang /boot/loader/loader.conf file, tangtangon ang tanan sa sulod, ug idugang ang mosunod:

default arch
timeout 5
editor 1

Adto sa /boot/loader/entry folder, paghimo sa arch.conf file ug isulat:

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

Kung gigamit nimo ang luks ug lvm, unya

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

Pag-reboot sa MacOS.

6. Pag-setup sa Wi-Fi

Ingon sa nahimo sa katapusan, gitipigan sa MacOS ang mga file sa firmware alang sa wi-fi adapter sa folder /usr/share/firmware/wifi , ug mahimo nimo kini dad-on gikan didto sa porma sa mga blobs ug ipakaon sila sa brcmfmac kernel module. Aron mahibal-an kung unsang mga file ang gigamit sa imong adapter, ablihi ang terminal sa MacOS ug isulat:

ioreg -l | grep C-4364

Nakakuha kami usa ka taas nga lista. Nagkinahanglan lang kami og mga file gikan sa seksyon Gihangyo nga mga File:

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

Sa imong kaso, ang mga ngalan sa file mahimong magkalahi. Kopyaha kini gikan sa /usr/share/firmware/wifi folder ngadto sa flash drive ug ilisan ang ngalan niini sa mosunod:

    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>

Sa kini nga kaso, ang katapusan nga text file naglangkob sa mga ngalan sa modelo; kung ang imong modelo dili macbookpro15,2, nan kinahanglan nimo nga bag-ohon kini nga file sumala sa imong modelo sa MacBook.

Pag-reboot sa Arch.

Kopyaha ang mga file gikan sa flash drive ngadto sa /lib/firmware/brcm/ folder


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/

Pagsusi sa pagpaandar sa module:


rmmod brcmfmac
modprobe brcmfmac

Gisiguro namon nga ang interface sa network makita pinaagi sa ifconfig/ip.
Pag-set up sa wifi pinaagi sa iwctl

Atensyon. Pinaagi sa netctl, nmcli, etc. Ang interface dili molihok, pinaagi lamang sa iwd.

Gipugos namo ang NetworkManager sa paggamit sa iwd. Aron mahimo kini, paghimo sa file /etc/NetworkManager/NetworkManager.conf ug isulat:

[device]
wifi.backend=iwd

Sugdi ang serbisyo sa NetworkManager


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

7. Tingog

Aron molihok ang tunog, kinahanglan nimo nga i-install ang pulseaudio:


sudo pacman -S pulseaudio

Pag-download sa tulo ka mga file:

Atong ibalhin sila:

    /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. Suspenso/Ipadayon

Sa pagkakaron 16.10.2019 kinahanglan nimo nga pilion ang tunog o pagsuspinde / pagpadayon. Naghulat kami sa tagsulat sa bce module aron makompleto ang pagpaandar.

Aron makatukod ug module nga adunay gisuspinde/resume nga suporta, kinahanglan nimong buhaton ang mosunod:


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

Kung imong gi-install ang andam na nga apple-bce module gikan sa anuali1 repository, nan kinahanglan nimo nga tangtangon una kini ug dayon i-assemble ug i-install ang bce module nga adunay suporta sa mode nga pagsuspinde.

Usab, kinahanglan nimo nga idugang ang module sa applesmc sa blacklist (kung wala nimo kini nahimo kaniadto) ug siguroha nga sa /boot/loader/entries/arch.conf sa linya sa mga kapilian sa katapusan ang parameter gidugang pcie_ports=compat.

Sa pagkakaron, ang drayber sa touchbar nahagsa sa dihang mosulod sa suspend mode, ug ang thunderbolt driver usahay mag-freeze sa sistema sulod sa kapin sa 30 ka segundos, ug sulod sa pipila ka minuto sa dihang magpadayon. Mahimo kini nga ayohon pinaagi sa awtomatiko nga pagdiskarga sa mga modulo nga adunay problema.

Paghimo og script /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

Himoa kini nga executable:

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

Kana lang sa pagkakaron. Ang resulta usa ka hingpit nga magamit nga sistema, gawas sa pipila nga mga nuances nga adunay pagsuspinde / pagpadayon. Walay mga crash o kernel panic nga naobserbahan sulod sa daghang mga adlaw sa uptime. Nanghinaut ko nga sa umaabot nga umaabot mahuman kini sa tagsulat sa module sa bce, ug makakuha kami bug-os nga suporta alang sa pagsuspinde / pagpadayon ug tunog.

Source: www.habr.com

Idugang sa usa ka comment