Kufanya MacBook Pro 2018 T2 kufanya kazi na ArchLinux (dualboot)

Kumekuwa na hype kidogo juu ya ukweli kwamba chip mpya ya T2 itafanya kuwa haiwezekani kusakinisha Linux kwenye MacBooks mpya za 2018 na upau wa kugusa. Muda ulipita, na mwisho wa 2019, watengenezaji wa wahusika wengine walitekeleza idadi ya viendeshi na viraka vya kernel kwa mwingiliano na chip ya T2. Dereva kuu ya mifano ya MacBook 2018 na mpya zaidi hutumia uendeshaji wa VHCI (operesheni ya kugusa / kibodi / nk), pamoja na uendeshaji wa sauti.

Mradi mbp2018-daraja-drv imegawanywa katika sehemu kuu 3:

  • BCE (Injini ya Nakala ya Buffer) - huanzisha njia kuu ya mawasiliano na T2. VHCI na Sauti zinahitaji sehemu hii.
  • VHCI ni USB Virtual Host Controller; kibodi, kipanya na vipengele vingine vya mfumo hutolewa na sehemu hii (viendeshi vingine hutumia kidhibiti hiki cha mwenyeji ili kutoa utendaji zaidi.
  • Sauti - kiendeshi cha kiolesura cha sauti cha T2, kwa sasa kinaauni pato la sauti kupitia spika zilizojengewa ndani za MacBook


Mradi wa pili unaitwa macbook12-spi-dereva, na hutekelezea uwezo wa kuendesha kiendeshi cha ingizo kwa kibodi, padi ya kufuatilia ya SPI, na upau wa mguso wa MacBook Pro Late 2016 na baadaye. Baadhi ya viendeshi vya kibodi/padi ya kufuatilia sasa vimejumuishwa kwenye kernel, kuanzia toleo la 5.3.

Usaidizi wa vifaa kama vile wi-fi, touchpad, n.k pia ulitekelezwa kwa kutumia viraka vya kernel. Toleo la sasa la kernel 5.3.5-1

Nini kinafanya kazi kwa sasa

  1. NVMe
  2. keyboard
  3. USB-C (Radi haijajaribiwa; moduli inapopakiwa kiotomatiki, inasimamisha mfumo)
  4. Upau wa kugusa (wenye uwezo wa kuwasha funguo za Fn, taa ya nyuma, ESC, n.k.)
  5. Sauti (spika zilizojengewa ndani pekee)
  6. Moduli ya Wi-Fi (kupitia bcmfmac na kupitia iw pekee)
  7. DisplayPort juu ya USB-C
  8. Sensorer
  9. Sitisha/Rejesha (sehemu)
  10. nk ..

Mafunzo haya yanatumika kwa macbookpro15,1 na macbookpro15,2. Nakala hiyo ilichukuliwa kama msingi kutoka kwa Github kwa Kiingereza. hivyo. Sio kila kitu katika nakala hii kilifanya kazi, kwa hivyo nililazimika kutafuta suluhisho mwenyewe.

Nini unahitaji kufunga

  • Adapta ya kuunganisha ya USB-C kwa USB (angalau pembejeo tatu za USB za kuunganisha kipanya, kibodi, modemu ya USB au simu katika hali ya kuunganisha). Hii ni muhimu tu katika hatua za kwanza za ufungaji
  • Kibodi ya USB
  • USB/USB-C flash drive kima cha chini cha 4GB

1. Zima marufuku ya uanzishaji kutoka kwa media ya nje

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

2. Tenga nafasi ya bure kwa kutumia Disk Utility

Kwa urahisi, mara moja nilitenga 30GB kwa diski, nikiibadilisha kwa exfat katika Utumiaji wa Disk yenyewe. Kugawanya Utumiaji wa Diski ya Kimwili.

3. Unda picha ya ISO

Chaguo:

  1. Unaweza kwenda kwa njia rahisi na kupakua picha iliyotengenezwa tayari na kernel 5.3.5-1 na viraka kutoka. aunali1 kiungo kwa picha iliyokamilishwa
  2. Unda picha mwenyewe kupitia archlive (mfumo ulio na usambazaji wa Archa unahitajika)

    Weka archiso

    pacman -S archiso

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

    Ongeza hazina kwa pacman.conf:

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

    Tunapuuza kernel asili katika pacman.conf:

    IgnorePkg   = linux linux-headers
    

    Ongeza vifurushi muhimu, mwisho ongeza kernel ya linux-mbp na vichwa vya linux-mbp.

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

    Tunabadilisha hati kufanya kazi katika hali ya maingiliano (badilisha pacstrap -C na 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!"
    }

    Kuunda picha:

    sudo ./build.sh -v

    Bonyeza Y kuruka vifurushi vilivyopuuzwa, kisha uandike picha ya iso kwenye kiendeshi cha usb flash:

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

4. Boot ya kwanza

Fungua upya na gari la flash na keyboard iliyoingizwa. Bonyeza chaguzi wakati apple inaonekana, chagua EFI BOOT.

Ifuatayo, unahitaji kushinikiza kitufe cha "e" na uingie mwisho wa mstari wa amri module_blacklist=ngurumo. Hili lisipofanyika, mfumo hauwezi kuwasha na Hitilafu ya ICM ya Thunderbolt itaonekana.

Kwa kutumia fdisk/cfdisk tunapata kizigeu chetu (kwangu ni nvme0n1p4), kiumbize na usakinishe kumbukumbu. Unaweza kutumia maagizo rasmi au kando.

Hatutengenezi kizigeu cha buti; tutaandika bootloader ndani /dev/nvme0n1p1
Baada ya mazingira katika /mnt kuunda kabisa na kabla ya kuhamia arch-chroot, andika:

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

Ongeza kwa /etc/pacman.conf:


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

Sakinisha kernel:


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

Tunasajili radi na applesmc katika /etc/modprobe.d/blacklist.conf

blacklist thunderbolt
blacklist applesmc

Kibodi, upau wa kugusa, n.k

Sakinisha yay:


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

Kufunga moduli za upau wa kugusa kufanya kazi:


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

Ongeza moduli ili kuanza: /etc/modules-load.d/apple.conf

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

Inasakinisha moduli za kernel kwa kibodi. Katika hazina anuali1 kuna kifurushi kilichopangwa tayari, kinaitwa apple-bce-dkms-git. Ili kuiweka, andika kwenye koni:

pacman -S apple-bce-dkms-git

Katika kesi hii, moduli ya kernel itaitwa apple-bce. Katika kesi ya kujitegemea, inaitwa ecb. Ipasavyo, ikiwa unataka kusajili moduli katika sehemu ya MODULES ya faili ya mkinicpio.conf, basi usisahau ni moduli gani uliyosakinisha.

Mkusanyiko wa mwongozo:


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

Ongeza moduli ya bce au apple-bce ili kuanza: /etc/modules-load.d/bce.conf

bce

Ikiwa ungependa kutumia vitufe vya Fn kwa chaguo-msingi, basi andika kwenye /etc/modprobe.d/apple-tb.conf faili:

options apple-ib-tb fnmode=2

Kusasisha kernel na initramfs.


mkinitcpio -p linux-mbp

Sakinisha iwd:

sudo pacman -S networkmanager iwd

5. Kipakiaji

Mara tu vifurushi vyote kuu vimewekwa ndani ya chroot, unaweza kuanza kusakinisha bootloader.

Sijaweza kupata grub kufanya kazi. Boti za grub kutoka kwa kiendeshi cha nje cha USB, lakini unapojaribu kusajili katika nvme kupitia

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

mfumo uliingia kwenye hofu ya kernel, na baada ya kuwasha tena kipengee kipya kupitia chaguzi hazikuonekana. Sikupata suluhisho lolote wazi la shida hii na kwa hivyo niliamua kujaribu kutekeleza uanzishaji kwa kutumia systemd-boot.

  1. Uzinduzi
    bootctl --path=/boot install

    na tunaingia kwenye hofu ya kernel. Zima MacBook, iwashe tena, bonyeza chaguo (usizima kitovu cha USB-C na kibodi)

  2. Tunaangalia kuwa kiingilio kipya cha EFI BOOT kimeonekana pamoja na kifaa cha nje
  3. Tunachagua boot kutoka kwa gari la nje la USB, kama wakati wa usakinishaji wa kwanza (usisahau kutaja module_blacklist=thunderbolt)
  4. Tunapanda diski yetu na kwenda kwenye mazingira kupitia arch-chroot


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

Ikiwa ni muhimu kwa kibodi kufanya kazi hadi mfumo upakie kikamilifu (hii ni muhimu unapotumia usimbaji fiche wa luks/dm-crypt), kisha uandike kwenye faili ya /etc/mkinicpio.conf katika sehemu ya MODULES:

MODULES=(ext4 applespi intel_lpss_pci spi_pxa2xx_platform bce)

Kusasisha kernel na initramfs.


mkinicpio -p linux-mbp

Kuanzisha systemd-boot

Tunahariri /boot/loader/loader.conf faili, kufuta kila kitu ndani, na kuongeza zifuatazo:

default arch
timeout 5
editor 1

Nenda kwenye folda ya /boot/loader/entries, unda faili ya arch.conf na uandike:

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

Ikiwa ulitumia luks na lvm, basi

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

Anzisha tena kwenye MacOS.

6. Usanidi wa Wi-Fi

Kama ilivyotokea mwishoni, MacOS huhifadhi faili za firmware kwa adapta ya wi-fi kwenye folda /usr/share/firmware/wifi , na unaweza kuzichukua kutoka hapo kwa namna ya matone na kuzilisha kwa moduli ya kernel ya bcmfmac. Ili kujua ni faili gani adapta yako hutumia, fungua terminal katika MacOS na uandike:

ioreg -l | grep C-4364

Tunapata orodha ndefu. Tunahitaji faili kutoka kwa sehemu tu Files zilizoombwa:

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

Kwa upande wako, majina ya faili yanaweza kutofautiana. Nakili kutoka /usr/share/firmware/wifi folda hadi kwenye kiendeshi cha flash na uzipe jina jipya kama ifuatavyo:

    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>

Katika kesi hii, faili ya maandishi ya mwisho ina majina ya mfano; ikiwa mfano wako sio macbookpro15,2, basi unahitaji kubadilisha jina la faili hii kwa mujibu wa mtindo wako wa MacBook.

Anzisha tena kwenye Arch.

Nakili faili kutoka kwa kiendeshi cha flash hadi /lib/firmware/brcm/ folda


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/

Kuangalia utendaji wa moduli:


rmmod brcmfmac
modprobe brcmfmac

Tunahakikisha kuwa kiolesura cha mtandao kinaonekana kupitia ifconfig/ip.
Kuweka wifi kupitia iwctl

Tahadhari. Kupitia nettl, nmcli, nk. Kiolesura haifanyi kazi, tu kupitia iwd.

Tunalazimisha NetworkManager kutumia iwd. Ili kufanya hivyo, unda faili /etc/NetworkManager/NetworkManager.conf na uandike:

[device]
wifi.backend=iwd

Anzisha huduma ya NetworkManager


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

7. Sauti

Ili sauti ifanye kazi, unahitaji kusakinisha pulseaudio:


sudo pacman -S pulseaudio

Pakua faili tatu:

Wacha tuzihamishe:

    /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. Sitisha/Rejesha

Kwa wakati huu 16.10.2019 inabidi uchague ama sauti au kusimamisha/kuendelea. Tunasubiri mwandishi wa moduli ya bce kukamilisha utendakazi.

Ili kuunda moduli na usaidizi uliosimamishwa / kuanza tena, lazima ufanye yafuatayo:


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

Ikiwa umesakinisha moduli iliyotengenezwa tayari ya apple-bce kutoka kwenye hifadhi ya anuali1, basi lazima kwanza uiondoe na kisha tu kukusanya na kusakinisha moduli ya bce na usaidizi wa modi ya kusimamisha.

Pia, unahitaji kuongeza moduli ya applesmc kwenye orodha nyeusi (ikiwa haujafanya hivi hapo awali) na uhakikishe kuwa katika /boot/loader/entries/arch.conf kwenye mstari wa chaguzi mwishoni parameta imeongezwa. pcie_bandari=compati.

Hivi sasa, dereva wa upau wa kugusa huanguka wakati wa kuingia katika hali ya kusimamisha, na dereva wa radi wakati mwingine hufungia mfumo kwa sekunde zaidi ya 30, na kwa dakika kadhaa wakati wa kuanza tena. Hili linaweza kurekebishwa kwa kupakua kiotomatiki moduli zenye matatizo.

Unda hati /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

Ifanye iweze kutekelezwa:

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

Ni hayo tu kwa sasa. Matokeo yake ni mfumo unaoweza kufanya kazi kabisa, isipokuwa nuances kadhaa na kusimamisha / kuanza tena. Hakuna ajali au hofu ya kernel ilizingatiwa wakati wa siku kadhaa za uptime. Natumai kuwa katika siku za usoni mwandishi wa moduli ya bce ataimaliza, na tutapata usaidizi kamili wa kusimamisha / kuanza tena na sauti.

Chanzo: mapenzi.com

Kuongeza maoni