Saame MacBook Pro 2018 T2 tööle ArchLinuxiga (dualboot)

Palju mĂŒra on olnud selle ĂŒle, et uue T2 kiibi tĂ”ttu ei saa uusi 2018. aasta MacBooke Touchbariga Linuxile installida. Aeg on edasi lĂ€inud ja 2019. aasta lĂ”puks olid kolmandad arendajad vĂ€lja töötanud mitmeid draivereid ja kernelipatch'e T2 kiibiga suhtlemiseks. 2018. aasta ja uuematele MacBooki mudelitele mĂ”eldud peamine draiver viib ellu VHCI (töö touchpad'i/kliendi ja jne) ning ka heli toimimise.

Projekt mbp2018-bridge-drv jagatakse kolme pÔhikomponendi vahel:

  • BCE (Buffer Copy Engine) — loob peamise sidekanali T2-ga. VHCI ja Audio vajavad seda komponenti.
  • VHCI on virtuaalne USB hostkontroller; klaviatuur, hiir ja muud sĂŒsteemi komponendid on pakutud selle komponendi kaudu (teised draiverid kasutavad seda hostkontrollerit suurema funktsionaalsuse tagamiseks.
  • Audio — T2 heliliidese draiver, toetab praegu ainult heli edastamist MacBooki sisseehitatud kĂ”larite kaudu.


Teine projekt kannab nime macbook12-spi-driver, ja see rakendab klaviatuuri, puuteplaadi SPI, Touchbari draiveri töötamise vĂ”imalust 2016. aasta lĂ”pu ja hilisema MacBook Pro jaoks. Osa klaviatuuri/puuteplaadi draiveritest on nĂŒĂŒd alates versioonist 5.3 tuumas.

Samuti on rakendatud toimetuslike seadmete nagu Wi-Fi ja puuteplaadi tugi, kasutades kerneli patche. Praegu on kerneliversioon 5.3.5-1

Mis praegu töötab

  1. NVMe
  2. Keyboard
  3. USB-C (Thunderbolt ei ole testitud, automaatne laadimine hangib sĂŒsteemi tĂ€ielikult)
  4. Touchbar (Fn klahvi sisselĂŒlitamise vĂ”imalus, valgustus, ESC jne)
  5. Heli (ainult sisseehitatud kÔlarid)
  6. Wi-Fi moodul (brcmfmac kaudu ja ainult iw abil)
  7. DisplayPort USB-C kaudu
  8. Sensoreid
  9. Suspend/Resume (osaliselt)
  10. jne..

See juhend kehtib macbookpro15,1 ja macbookpro15,2. Aluseks oli ingliskeelne artikkel GithHub'is siit. Mitte kÔik sellest artiklist ei töötanud, seega tuli lahendusi ise otsida.

Mida installimiseks vaja on

  • USB-C dokkedadapter USB-le (vĂ€hemalt kolm USB pesa hiire, klaviatuuri, USB modem vĂ”i telefoni ĂŒhendamiseks tethering reĆŸiimis). See on vajalik ainult installatsiooni algsetel etappidel.
  • USB-klaviatuur
  • USB/USB-C mĂ€lupulk vĂ€hemalt 4GB

1. LĂŒlitame vĂ€lja vĂ€listest seadmetest bootimise keelu

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

2. Eraldame vaba ruumi Disk Utility abil

Mugavuse nimel eraldasin kohe 30GB ketas, vormindades selle Disk Utility's exfat. Disk Utility fĂŒĂŒsilise ketta partitsioneerimine.

3. Loome iso pildi

Valikud:

  1. VÔite minna lihtsamat teed ja allalaadida valmis pildi, millel on kernel 5.3.5-1 ja patched versioonid aunali1 valmis pildi link
  2. Looge pilt iseseisvalt lĂ€bi archlive (vajalik on sĂŒsteem Arch distsiooniga)

    Paigaldame archiso

    pacman -S archiso

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

    Lisame hoidla pacman.conf faili:

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

    Ignoreerime originaal kernelit pacman.conf failis:

    IgnorePkg   = linux linux-headers
    

    Lisame vajalikud paketid, lÔpus lisame kernel linux-mbp ja linux-mbp-headers

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

    Muudame skripti interaktiivses reĆŸiimis töötamiseks (asendame pacstrap -C 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!"
    }

    Loome pildi:

    sudo ./build.sh -v

    Vajutame Y, et vahele jÀtta ignoreeritud paketid, siis kirjutame iso-pildi USB mÀlupulgale:

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

4. Esimene kÀivitamine

TaaskĂ€ivitame ĂŒhendatud mĂ€lupulga ja klaviatuuriga. Vajutame valikute nuppu, kui Ă”unapuu kuvatakse, ja valime EFI BOOT.

SeejĂ€rel tuleb vajutada klahvi «e» ja sisestada kĂ€surea lĂ”ppu module_blacklist=thunderbolt. Kui seda ei tee, vĂ”ib sĂŒsteem mitte kĂ€ivituda ja ilmuda viga Thunderbolt ICM Error.

fdisk/cfdisk abil leiame oma partitsiooni (minu puhul on see nvme0n1p4), vormindame selle ja installime Archi. VÔib kasutada ametlikku juhendit vÔi kolmanda osapoole.

KÀivitamispartitsiooni ei loo, kÀivitaja kirjutame /dev/nvme0n1p1
PÀrast seda, kui keskkond on tÀielikult loodud /mnt-s, ja enne arch-chroot'i minemist, kirjutame:

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

Lisame /etc/pacman.conf:


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

Paigaldame kernel:


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

Kandke thunderbolt ja applesmc /etc/modprobe.d/blacklist.conf faili

blacklist thunderbolt
blacklist applesmc

Klaviatuur, Touch Bar jne

Paigaldame yay:


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

Paigaldame moodulid Touch Bari tööks:


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

Lisame moodulid automaatlaadimiseks: /etc/modules-load.d/apple.conf

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

Paigaldame kernelimoodulid klaviatuuri tööks. Repositooriumis anuali1 on valmis pakett, selle nimi on apple-bce-dkms-git. Selle paigaldamiseks kirjutame terminalis:

pacman -S apple-bce-dkms-git

Sel juhul kannab kernelimoodul nime apple-bce. Iseseisva koostamise korral kannab see nime bce. Seega, kui soovite mooduli lisada FILE mkinicpio.conf jaotises MODULES, siis Àrge unustage, millise mooduli olete installinud.

KĂ€sitsi kogumine:


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

Lisame mooduli bce vÔi apple-bce automaatlaadimisse: /etc/modules-load.d/bce.conf

bce

Kui soovite kasutada vaikimisi klahve Fn, siis kirjutage faili /etc/modprobe.d/apple-tb.conf:

options apple-ib-tb fnmode=2

Uuendame kernelit ja initramfs-i.


mkinitcpio -p linux-mbp

Paigaldame iwd:

sudo pacman -S networkmanager iwd

5. Laadija

PÀrast seda, kui chroot'is on kÔik pÔhipaketid paigaldatud, saab alustada laadija paigaldamist.

Ma ei suutnud grub'i tööle saada. VÀlistelt usb-diskilt grub kÀivitub, kuid proovides seda nvme-sse lisada lÀbi

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

sĂŒsteem lĂ€ks kernel panic'i ja pĂ€rast taaskĂ€ivitamist ei ilmunud uut punkti lĂ€bi options. Ma ei leidnud mingit arusaadavat lahendust sellele probleemile ja otsustasin proovida kĂ€ivitada sĂŒsteemiga systemd-boot.

  1. KĂ€ivitame
    bootctl --path=/boot install

    ja lĂ€heme kernel panic'i. LĂŒlitame MacBook'i vĂ€lja, lĂŒlitame sisse ja vajutame options (usb-c hub klaviatuuri ei lĂŒlita vĂ€lja)

  2. Kontrollime, et uus EFI BOOT sissekanne ilmus koos vÀlise seadmega
  3. Valime kÀivitamise vÀliselt usb-diskilt, nagu esmakordsel installimisel (Àrge unustage lisada module_blacklist=thunderbolt)
  4. Mountime meie ketta ja liigume keskkonda lÀbi arch-chroot


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

Kui soovite, et klaviatuur töötaks enne sĂŒsteemi tĂ€ielikku kĂ€ivitamist (see on vajalik luks/dm-crypt krĂŒpteerimise kasutamisel), siis kirjutage faili /etc/mkinicpio.conf jaotises MODULES:

MODULES=(ext4 applespi intel_lpss_pci spi_pxa2xx_platform bce)

Uuendame kernelit ja initramfs-i.


mkinicpio -p linux-mbp

Seadistame systemd-boot

Muudame faili /boot/loader/loader.conf, eemaldame sealt kÔik ja lisame jÀrgmise:

default arch
timeout 5
editor 1

Liigume kausta /boot/loader/entries, loome faili arch.conf ja kirjutame:

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

Kui olete kasutanud luks ja lvm, siis

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

TaaskÀivitage MacOS.

6. Wi-Fi seadistamine

Kuidas selgus, salvestab MacOS wi-fi adapteri pĂŒsivara failid kausta /usr/share/firmware/wifi , ja sealt saab neid blobidena vĂ”tta ja sĂŒĂŒa kernel moodulile brcmfmac. Selleks, et teada saada, milliseid faile teie adapter kasutab, avage MacOS-is terminal ja kirjutage:

ioreg -l | grep C-4364

Saame pikka nimekirja. Meie jaoks on vajalikud failid ainult jaotusest RequestedFiles:

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

Teie puhul vĂ”ivad failide nimed erineda. Kopeerime need kaustast /usr/share/firmware/wifi mĂ€lupulgale ja nimetame need ĂŒmber jĂ€rgmisel viisil:

    maui.trx -&gt; brcmfmac4364-pcie.bin
    maui-X3.clmb -&gt; brcmfmac4364-pcie.clm_blob
    P-maui-X3_M-HRPN_V-m__m-7.7.txt -&gt; brcmfmac4364-pcie.Apple Inc.-<b>MacBookPro15,2.txt</b>

Antud juhul sisaldab viimane tekstifail mudeli nimesid. Kui teie mudel ei ole macbookpro15,2, siis tuleb see fail ĂŒmber nimetada vastavalt teie MacBooki mudelile.

TaaskÀivitame Archi.

Kopeerime failid mÀlupulgalt kausta /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/

Kontrollime mooduli toimivust:


rmmod brcmfmac
modprobe brcmfmac

Veenduge, et vÔrguliides oleks ilmnenud kÀsu ifconfig/ip kaudu.
Seame wifi konfiiguratsiooni lÀbi iwctl

TĂ€helepanu. Netctl, nmcli jne. kaudu ei toimi liides, ainult iwd kaudu.

KĂ€ivitame NetworkManager'i iwd kasutamiseks. Selleks loome faili /etc/NetworkManager/NetworkManager.conf ja kirjutame:

[device]
wifi.backend=iwd

KĂ€ivitame NetworkManager'i teenuse


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

7. Helis

Heli tööle saamiseks tuleb installida pulseaudio:


sudo pacman -S pulseaudio

Laadime alla kolm faili:

Liigutame need:

    /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

Praegusel hetkel 16.10.2019 peame valima kas heli vÔi suspend/resume. Ootame, kuni mooduli autor bce lÔpptöötluse teeb.

Et koguda moodulit susped/resume toetuseks, tuleb teha jÀrgmist:


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

Kui olete installinud valmis mooduli apple-bce registrist anuali1, tuleb see eelnevalt eemaldada ja alles siis koguda ja installida bce moodul suspendi reĆŸiimi toetamiseks.

Samuti tuleb lisada musta nimekirja moodul applesmc (kui te seda varem ei teinud) ja veenduda, et /boot/loader/entries/arch.conf failis on lÔpus lisatud parameeter pcie_ports=compat.

Praegu katkeb touchbar'i draiver riputamise reĆŸiimi sisenemisel, ja thunderbolti draiver mĂ”nikord hangib sĂŒsteemi rohkem kui 30 sekundiks ning taaskĂ€ivitamisel - mitmeks minutiks. Seda saab parandada probleemsete moodulite automaatse eemaldamisega.

Looge skript /lib/systemd/system-sleep/rmmod.sh:

#!/bin/sh
if [ "${1}" == "pre" ]; then
        rmmod thunderbolt
        rmmod apple_ib_tb
elif [ "${1}" == "post" ]; then
        modprobe apple_ib_tb
        modprobe thunderbolt
fi

Tehke see teostatavaks:

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

Sellega kĂ”ik. LĂ”ppkokkuvĂ”ttes saame ĂŒsna toimiva sĂŒsteemi, vĂ€lja arvatud mĂ”ned nĂŒansid suspendi/resume osas. Ükski vĂ€ljalange ja kernel panic ei ole tĂ€heldatud mitme pĂ€eva jooksul, kui sĂŒsteem on töödel. Loodan, et peagi tĂ€iendab mooduli autor bce-d, ja saame tĂ€ieliku toe suspend/resume ja heli jaoks.

Allikas: habr.com

Osta usaldusvÀÀrne hostimine veebilehtede jaoks DDoS-i kaitsega, VPS VDS serverid đŸ”„ Osta usaldusvÀÀrne hostimine veebilehtede jaoks DDoS-i kaitsega, VPS VDS serverid | ProHoster