Ginagawang gumagana ang MacBook Pro 2018 T2 sa ArchLinux (dualboot)

Nagkaroon ng kaunting hype tungkol sa katotohanan na ang bagong T2 chip ay gagawing imposibleng i-install ang Linux sa bagong 2018 MacBooks na may touchbar. Lumipas ang oras, at sa pagtatapos ng 2019, nagpatupad ang mga third-party na developer ng ilang mga driver at kernel patch para sa pakikipag-ugnayan sa T2 chip. Ang pangunahing driver para sa mga modelo ng MacBook 2018 at mas bago ay nagpapatupad ng operasyon ng VHCI (touch/keyboard/etc. operation), pati na rin ang sound operation.

Proyekto mbp2018-bridge-drv nahahati sa 3 pangunahing bahagi:

  • BCE (Buffer Copy Engine) - nagtatatag ng pangunahing channel ng komunikasyon sa T2. Kinakailangan ng VHCI at Audio ang bahaging ito.
  • Ang VHCI ay isang USB Virtual Host Controller; ang keyboard, mouse at iba pang mga bahagi ng system ay ibinibigay ng bahaging ito (ginagamit ng ibang mga driver ang host controller na ito upang magbigay ng higit pang functionality.
  • Audio - driver para sa T2 audio interface, kasalukuyang sumusuporta lamang sa audio output sa pamamagitan ng mga built-in na speaker ng MacBook


Ang pangalawang proyekto ay tinatawag macbook12-spi-driver, at ipinapatupad nito ang kakayahang magpatakbo ng input driver para sa keyboard, SPI trackpad, at touchbar para sa MacBook Pro Late 2016 at mas bago. Ang ilang keyboard/trackpad driver ay kasama na ngayon sa kernel, simula sa bersyon 5.3.

Ang suporta para sa mga device tulad ng wi-fi, touchpad, atbp ay ipinatupad din gamit ang mga kernel patch. Kasalukuyang bersyon ng kernel 5.3.5-1

Ano ang gumagana sa ngayon

  1. NVMe
  2. keyboard
  3. USB-C (Thunderbolt ay hindi pa nasubok; kapag ang module ay awtomatikong na-load, ito ay nagyeyelo sa system)
  4. Touchbar (na may kakayahang i-on ang mga Fn key, backlight, ESC, atbp.)
  5. Tunog (built-in na speaker lang)
  6. Wi-Fi module (sa pamamagitan ng brcmfmac at sa pamamagitan lamang ng iw)
  7. DisplayPort sa USB-C
  8. Mga sensor
  9. Suspindihin/Ipagpatuloy (bahagyang)
  10. atbp ..

Ang tutorial na ito ay naaangkop para sa macbookpro15,1 at macbookpro15,2. Ang artikulo ay kinuha bilang batayan mula sa Github sa Ingles. kaya. Hindi lahat ng bagay sa artikulong ito ay gumana, kaya kinailangan kong maghanap ng solusyon sa aking sarili.

Ano ang kailangan mo para sa pag-install

  • USB-C docking adapter sa USB (hindi bababa sa tatlong USB input para sa pagkonekta ng mouse, keyboard, USB modem o telepono sa tethering mode). Ito ay kinakailangan lamang sa mga unang yugto ng pag-install
  • USB na keyboard
  • USB/USB-C flash drive na hindi bababa sa 4GB

1. Huwag paganahin ang pagbabawal sa pag-boot mula sa panlabas na media

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

2. Maglaan ng libreng espasyo gamit ang Disk Utility

Para sa kaginhawahan, agad kong inilaan ang 30GB sa disk, na-format ito sa exfat sa Disk Utility mismo. Paghahati ng Pisikal na Disk Disk Utility.

3. Gumawa ng ISO image

Mga Pagpipilian:

  1. Maaari kang pumunta sa simpleng ruta at mag-download ng isang handa na imahe na may kernel 5.3.5-1 at mga patch mula sa aunali1 link sa natapos na larawan
  2. Lumikha ng isang imahe sa pamamagitan ng archlive (kinakailangan ang isang system na may pamamahagi ng Archa)

    Itakda archiso

    pacman -S archiso

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

    Idagdag ang repository sa pacman.conf:

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

    Binabalewala namin ang orihinal na kernel sa pacman.conf:

    IgnorePkg   = linux linux-headers
    

    Idagdag ang mga kinakailangang pakete, sa dulo idagdag ang linux-mbp kernel at linux-mbp-header

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

    Binago namin ang script upang gumana sa interactive na mode (palitan ang pacstrap -C ng 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!"
    }

    Pagbubuo ng isang imahe:

    sudo ./build.sh -v

    Pindutin ang Y upang laktawan ang mga hindi pinansin na pakete, pagkatapos ay isulat ang iso image sa usb flash drive:

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

4. Unang boot

I-reboot ang flash drive at keyboard na nakapasok. Pindutin ang mga pagpipilian kapag lumitaw ang mansanas, piliin ang EFI BOOT.

Susunod, kailangan mong pindutin ang "e" key at pumasok sa dulo ng command line module_blacklist=thunderbolt. Kung hindi ito nagawa, maaaring hindi mag-boot ang system at may lalabas na Thunderbolt ICM Error.

Gamit ang fdisk/cfdisk nakita namin ang aming partition (para sa akin ito ay nvme0n1p4), i-format ito at i-install ang archive. Pwede mong gamitin opisyal na mga tagubilin o patagilid.

Hindi kami gumagawa ng boot partition; isusulat namin ang bootloader /dev/nvme0n1p1
Matapos ganap na mabuo ang kapaligiran sa /mnt at bago lumipat sa arch-chroot, isulat ang:

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

Idagdag 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

Nagrerehistro kami ng thunderbolt at applesmc sa /etc/modprobe.d/blacklist.conf

blacklist thunderbolt
blacklist applesmc

Keyboard, touchbar, atbp

I-install yay:


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

Pag-install ng mga module para gumana ang touchbar:


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

Magdagdag ng mga module sa startup: /etc/modules-load.d/apple.conf

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

Pag-install ng mga kernel module para sa keyboard. Sa repositoryo taunali1 may nakahanda na pakete, ito ay tinatawag apple-bce-dkms-git. Upang i-install ito, isulat sa console:

pacman -S apple-bce-dkms-git

Sa kasong ito, tatawagin ang kernel module mansanas-bce. Sa kaso ng self-assembly, ito ay tinatawag bce. Alinsunod dito, kung gusto mong magrehistro ng module sa seksyong MODULE ng mkinicpio.conf file, huwag kalimutan kung aling module ang iyong na-install.

Manu-manong pagpupulong:


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

Idagdag ang bce o apple-bce module sa startup: /etc/modules-load.d/bce.conf

bce

Kung gusto mong gamitin ang mga pindutan ng Fn bilang default, pagkatapos ay isulat sa /etc/modprobe.d/apple-tb.conf file:

options apple-ib-tb fnmode=2

Ina-update ang kernel at initramfs.


mkinitcpio -p linux-mbp

I-install ang iwd:

sudo pacman -S networkmanager iwd

5. Loader

Kapag ang lahat ng mga pangunahing pakete ay na-install sa loob ng chroot, maaari mong simulan ang pag-install ng bootloader.

Hindi pa ako nakakapagtrabaho ng grub. Grub boots mula sa isang panlabas na USB drive, ngunit kapag sinubukan mong irehistro ito sa nvme sa pamamagitan ng

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

ang sistema ay napunta sa kernel panic, at pagkatapos ng pag-reboot ng isang bagong item sa pamamagitan ng mga pagpipilian ay hindi lumitaw. Wala akong nakitang malinaw na solusyon sa problemang ito at samakatuwid ay nagpasya akong subukang ipatupad ang booting gamit ang systemd-boot.

  1. Ilunsad
    bootctl --path=/boot install

    at pumunta kami sa kernel panic. I-off ang MacBook, i-on itong muli, i-click ang mga opsyon (huwag i-off ang USB-C hub na may keyboard)

  2. Sinusuri namin na may lumabas na bagong entry sa EFI BOOT bilang karagdagan sa panlabas na device
  3. Pinipili naming mag-boot mula sa isang panlabas na USB drive, tulad ng sa unang pag-install (huwag kalimutang tukuyin ang module_blacklist=thunderbolt)
  4. Ini-mount namin ang aming disk at pumunta sa kapaligiran sa pamamagitan ng arch-chroot


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

Kung kinakailangan para gumana ang keyboard hanggang sa ganap na ma-load ang system (kinakailangan ito kapag gumagamit ng luks/dm-crypt encryption), pagkatapos ay isulat ito sa /etc/mkinicpio.conf file sa seksyong MODULES:

MODULES=(ext4 applespi intel_lpss_pci spi_pxa2xx_platform bce)

Ina-update ang kernel at initramfs.


mkinicpio -p linux-mbp

Pagse-set up ng systemd-boot

Ine-edit namin ang /boot/loader/loader.conf file, tanggalin ang lahat sa loob, at idagdag ang sumusunod:

default arch
timeout 5
editor 1

Pumunta sa folder na /boot/loader/entry, likhain ang arch.conf file at isulat ang:

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

Kung gumamit ka ng luks at lvm, kung gayon

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

I-reboot sa MacOS.

6. Pag-setup ng Wi-Fi

Tulad ng nangyari sa huli, iniimbak ng MacOS ang mga file ng firmware para sa wi-fi adapter sa folder /usr/share/firmware/wifi , at maaari mong kunin ang mga ito mula doon sa anyo ng mga blobs at ipakain ang mga ito sa brcmfmac kernel module. Upang malaman kung aling mga file ang ginagamit ng iyong adapter, magbukas ng terminal sa MacOS at isulat ang:

ioreg -l | grep C-4364

Kumuha kami ng mahabang listahan. Kailangan lang namin ng mga file mula sa seksyon Hiniling na 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 iyong kaso, maaaring magkaiba ang mga pangalan ng file. Kopyahin ang mga ito mula sa folder na /usr/share/firmware/wifi sa flash drive at palitan ang pangalan ng mga ito tulad ng sumusunod:

    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 kasong ito, ang huling text file ay naglalaman ng mga pangalan ng modelo; kung ang iyong modelo ay hindi macbookpro15,2, kailangan mong palitan ang pangalan ng file na ito alinsunod sa iyong modelo ng MacBook.

I-reboot sa Arch.

Kopyahin ang mga file mula sa flash drive 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/

Sinusuri ang functionality ng module:


rmmod brcmfmac
modprobe brcmfmac

Tinitiyak namin na ang interface ng network ay lilitaw sa pamamagitan ng ifconfig/ip.
Pagse-set up ng wifi sa pamamagitan ng iwctl

Pansin. Sa pamamagitan ng netctl, nmcli, atbp. Ang interface ay hindi gumagana, sa pamamagitan lamang ng iwd.

Pinipilit namin ang NetworkManager na gumamit ng iwd. Upang gawin ito, lumikha ng file /etc/NetworkManager/NetworkManager.conf at isulat ang:

[device]
wifi.backend=iwd

Simulan ang serbisyo ng NetworkManager


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

7. Tunog

Upang gumana ang tunog, kailangan mong i-install ang pulseaudio:


sudo pacman -S pulseaudio

Mag-download ng tatlong file:

Ilipat natin 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. Suspindihin/Ipagpatuloy

Sa sandaling ito 16.10.2019 kailangan mong pumili ng alinman sa tunog o suspindihin/ipagpatuloy. Kami ay naghihintay para sa may-akda ng bce module upang makumpleto ang pag-andar.

Upang makabuo ng isang module na may suportang pinagsuspinde/ipagpatuloy, dapat mong gawin ang sumusunod:


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 na-install mo ang yari na apple-bce module mula sa anuali1 repository, dapat mo munang alisin ito at pagkatapos ay i-assemble at i-install ang bce module na may suporta sa suspend mode.

Gayundin, kailangan mong idagdag ang applesmc module sa blacklist (kung hindi mo pa ito nagawa noon) at siguraduhing sa /boot/loader/entries/arch.conf sa linya ng mga opsyon sa dulo ay idinagdag ang parameter. pcie_ports=compat.

Sa kasalukuyan, ang driver ng touchbar ay nag-crash kapag pumapasok sa suspend mode, at minsan ang thunderbolt driver ay nag-freeze sa system nang higit sa 30 segundo, at sa loob ng ilang minuto kapag nagpapatuloy. Maaayos ito sa pamamagitan ng awtomatikong pag-unload ng mga may problemang module.

Gumawa ng 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

Gawin itong maipapatupad:

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

Yun lang muna. Ang resulta ay isang ganap na magagawang sistema, maliban sa ilang mga nuances na may suspendido/pagpatuloy. Walang mga pag-crash o kernel panic na naobserbahan sa ilang araw ng uptime. Umaasa ako na sa malapit na hinaharap ay matapos ito ng may-akda ng bce module, at makakakuha tayo ng buong suporta para sa pagsuspinde/pagpatuloy at tunog.

Pinagmulan: www.habr.com

Magdagdag ng komento