Lieku strādāt MacBook Pro 2018 T2 ar ArchLinux (dualboot)

Ir bija diezgan daudz troksnis par to, ka jaunais T2 mikroshēma apgrūtina Linux instalēšanu jaunajos 2018. gada MacBook ar tačbāru. Laikam ritot, un līdz 2019. gada beigām trešo pušu izstrādātāji izstrādāja vairākus draiverus un kodu labojumus, lai nodrošinātu mijiedarbību ar T2 mikroshēmu. Galvenais draiveris jaunajiem MacBook modeļiem nodrošina VHCI darbību (tačbāra/kursoru u.c. darbs), kā arī skaņas funkcionalitāti.

Projekts mbp2018-bridge-drv ir sadalīts trīs galvenajos komponentos:

  • BCE (Buffer Copy Engine) — nodrošina galveno saziņas kanālu ar T2. VHCI un Audio prasa šo komponentu.
  • VHCI ir virtuālais USB hosta kontrolieris; tastatūru, peli un citus sistēmas komponentus nodrošina šis components (citi draiveri izmanto šo hosta kontrolieri, lai nodrošinātu papildu funkcionalitāti).
  • Audio — T2 audio interfeisa draiveris, pašlaik atbalsta tikai skaņas izeju caur iebūvētajiem MacBook skaļruņiem.


Otrais projekts saucas macbook12-spi-driver, un tas nodrošina iespēju izmantot ieslēgšanas draiveri tastatūrai, SPI skārienpaliktnim, tačbāram MacBook Pro, sākot no 2016. gada beigām un jaunākām versijām. Daļa draiveru tastatūrai/skārienpaliktnim tagad ir iekļauta kodā, sākot no versijas 5.3.

Tika īstenota arī atbalsts tādām ierīcēm kā wi-fi, skārienpaliktnis utt., izmantojot kodu labojumus. Pašreizējā kodu versija 5.3.5-1

Kas šobrīd darbojas

  1. NVMe
  2. Tastatūra
  3. USB-C (Thunderbolt nav pārbaudīts, automātiskā moduļa ielādēšana var sistēmu pilnībā aizsprostot)
  4. Tačbārs (ar iespēju ieslēgt Fn taustiņus, apgaismojums, ESC utt.)
  5. Skaņa (tikai iebūētie skaļruņi)
  6. Wi-Fi modulis (caur brcmfmac un tikai caur iw)
  7. DisplayPort caur USB-C
  8. Sensori
  9. Suspendēt/Atjaunot (daļēji)
  10. utt..

Šis pamācība ir piemērojama macbookpro15,1 un macbookpro15,2. Pamats tika ņemts no raksta GitHub angļu valodā no šejienes. Ne viss šajā rakstā strādāja, tāpēc bija jāmeklē risinājums pašam.

Kas nepieciešams instalācijai

  • USB-C doks uz USB (vismaz trīs USB pieslēgvietas, lai pieslēgtu peli, tastatūru, USB modemu vai telefonu tethering režīmā). Tas nepieciešams tikai pirmajos instalācijas posmos.
  • USB tastatūra
  • USB/USB-C zibatmiņa vismaz 4GB

1. Atspējojiet aizliegumu ielādēt no ārējiem nesējiem

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

2. Izveidojiet brīvu vietu, izmantojot Disk Utility

Manai ērtībai es nekavējoties izveidoju 30GB vietu diskā, formatējot to exfat Disk Utility. Fiziskā diska sadalīšana Disk Utility.

3. Izveidojiet iso attēlu

Iespējas:

  1. Var iet vienkāršo ceļu un lejupielādēt gatavu attēlu ar kodolu 5.3.5-1 un plāksteriem no aunali1 saite uz gatavo attēlu
  2. Izveidot attēlu pašiem, izmantojot archlive (nepieciešama sistēma ar arch Linux distribūciju)

    Uzstādam archiso

    pacman -S archiso

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

    Pievienojam repozitoriju pacman.conf:

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

    Ignorējam oriģinālo kodolu pacman.conf:

    IgnorePkg   = linux linux-headers
    

    Pievienojam nepieciešamos pakotnes, beigās pievienojam kodolu linux-mbp un linux-mbp-headers

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

    Mainām skriptu darbībai interaktīvajā režīmā (aizvietojam pacstrap -C ar 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!"
    }

    Izveidojam attēlu:

    sudo ./build.sh -v

    Nospiežam Y, lai ignorētu ignorētās pakotnes, tad rakstām iso-attēlu uz USB zibatmiņas:

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

4. Pirmais palaidiens

Pārstartējamies ar ieliktu zibatmiņu un tastatūru. Nospiežam options, kad parādās ābola simbols, izvēlamies EFI BOOT.

Tālāk nepieciešams nospiest taustiņu «e» un ierakstīt komandu rindas beigās module_blacklist=thunderbolt. Ja to neizdarīsiet, sistēma var neielādēties, un parādīsies kļūda Thunderbolt ICM Error.

Izmantojot fdisk/cfdisk, atrodam mūsu nodaļu (man tā ir nvme0n1p4), formatējam un veicam arch uzstādīšanu. Var izmantot oficiālo instrukciju vai trešās puses.

Nekrītam izveidot ielādēšanas nodaļu, ielādētāju rakstīsim /dev/nvme0n1p1
Pēc tam, kad pilnībā izveidota vide /mnt un pirms pāriešanas uz arch-chroot, rakstām:

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

Pievienojam /etc/pacman.conf:


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

Uzstādam kodolu:


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

Ierakstām thunderbolt un applesmc /etc/modprobe.d/blacklist.conf

blacklist thunderbolt
blacklist applesmc

Tastatūra, taču poga, utt.

Uzstādam yay:


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

Uzstādam moduļus taču poga darbībai:


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

Pievienojam moduļus autostartā: /etc/modules-load.d/apple.conf

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

Uzstādam kodolu moduļus tastatūras darbībai. Repozitorijā anuali1 ir gatava pakotne, tās nosaukums ir apple-bce-dkms-git. Lai to uzstādītu, rakstām konsolē:

pacman -S apple-bce-dkms-git

Šajā gadījumā kodola modulis tiks saukts apple-bce. Pašizveidošanas gadījumā tas tiek saukts bce. Attiecīgi, ja vēlaties ierakstīt moduli sadaļā MODULES failā mkinicpio.conf, neaizmirstiet, kuru moduli esat instalējuši.

Rokasgrāmatas būvniecība:


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

Pievienojam moduli bce vai apple-bce automātiskajā ielādē: /etc/modules-load.d/bce.conf

bce

Ja vēlaties pēc noklusējuma izmantot Fn taustiņus, tad failā /etc/modprobe.d/apple-tb.conf ierakstām:

options apple-ib-tb fnmode=2

Atjauninām kodolu un initramfs.


mkinitcpio -p linux-mbp

Instalējam iwd:

sudo pacman -S networkmanager iwd

5. Ielādētājs

Pēc tam, kad iekšā chroot visi galvenie pakotnes ir instalēti, varam pāriet pie ielādētāja instalēšanas.

Man tā arī neizdevās panākt, lai darbotos grub. No ārēja usb diska grub ielādējas, bet mēģinot to ierakstīt nvme caur

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

sistēma krita kernel panic, un pēc pārstartēšanas jauns punkts caur options neparādījās. Kādus skaidrus risinājumus šai problēmai es neatradu, tādēļ nolēmu izmēģināt bootēšanu ar systemd-boot.

  1. Sāksim
    bootctl --path=/boot install

    un mēs atkal iekrītam kernel panic. Izslēdzam MacBook, ieslēdzam to atpakaļ, nospiežam options (usb-c centrs ar tastatūru netiek atslēgts)

  2. Pārbaudām, vai ir parādījies jauns EFI BOOT ieraksts papildus ārējam ierīcei
  3. Izvēlamies bootēšanu no ārējā usb diska, kā pirmajā instalācijā (neaizmirstam ierakstīt module_blacklist=thunderbolt)
  4. Montējam mūsu disku un pārejam uz vidi caur arch-chroot


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

Ja nepieciešams, lai tastatūra darbotos līdz sistēmas pilnīgai ielādei (tas nepieciešams gadījumā, ja tiek izmantota luks/dm-crypt šifrēšana), tad ierakstām failā /etc/mkinicpio.conf sadaļā MODULES:

MODULES=(ext4 applespi intel_lpss_pci spi_pxa2xx_platform bce)

Atjauninām kodolu un initramfs.


mkinicpio -p linux-mbp

Konfigurējam systemd-boot

Rediģējam failu /boot/loader/loader.conf, izdzēšam visu, kas tur iekšā, un ievadam sekojošo:

default arch
timeout 5
editor 1

Pārejam uz mapi /boot/loader/entries, izveidojam failu arch.conf un ierakstām:

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

Ja esat izmantojuši luks un lvm, tad

iespējas cryptdevice=\/dev\/<b>nvme0n1p4</b>:luks sakne=\/dev\/mapper\/vz0-root rw pcie_ports=compat

Pārstartējamies uz MacOS.

6. Wi-Fi iestatīšana

Kā izrādījās, MacOS wi-fi adaptera firmware faili tiek glabāti mapē /usr/share/firmware/wifi , un tos var ņemt kā blob un nodot brcmfmac kodola modulim. Lai noskaidrotu, kuri faili tiek izmantoti ar jūsu adapteri, atveriet termināli MacOS un ierakstiet:

ioreg -l | grep C-4364

Saņēmām garu sarakstu. Mums nepieciešami faili tikai no sadaļas 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>"})

Jūsu gadījumā failu nosaukumi var atšķirties. Mēs tos kopējam no mapes /usr/share/firmware/wifi uz zibatmiņu un pārdēvējam šādā veidā:

    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>

Šajā gadījumā pēdējais teksta fails satur modeļa nosaukumu; ja jūsu modelis nav macbookpro15,2, tad jāmaina šī faila nosaukums atbilstoši jūsu MacBook modelim.

Pārstartējam uz Arch.

Kopējam failus no zibatmiņas uz mapi /lib/firmware/brcm/


sudo cp brcmfmac4364-pcie.bin \/lib\/firmware\/brcm\/\nsudo cp brcmfmac4364-pcie.clm_blob \/lib\/firmware\/brcm\/\nsudo cp 'brcmfmac4364-pcie.Apple Inc.-<b>MacBookPro15,2.txt' \/lib\/firmware\/brcm\/

Pārbaudām modulis darbību:


rmmod brcmfmac
modprobe brcmfmac

Pārliecināmies, ka tīkla interfeiss parādās, izmantojot ifconfig/ip.
Iestatām wifi, izmantojot iwctl

Uzsveram. Izmantojot netctl, nmcli utt., interfeiss nedarbojas, tikai caur iwd.

Piespiežam NetworkManager izmantot iwd. Tādēļ izveidojam failu /etc/NetworkManager/NetworkManager.conf un ierakstām:

[device]
wifi.backend=iwd

Uzsākam NetworkManager pakalpojumu


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

7. Skaņa

Lai skaņa darbotos, ir jāinstalē pulseaudio:


sudo pacman -S pulseaudio

Lejupielādējam trīs failus:

Pārvietojam tos:

    /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ēt / Atjaunot

Pašreiz ir jāpiespiež izvēlēties vai nu skaņu, vai suspend/atjaunot. Gaidām, kad moduli bce autors pabeigs funkcionālā uzlabošanu. 16.10.2019 Lai savāktu moduli ar atbalstu suspend/atjaunot, ir jāveic sekojošais:

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


Ja esat uzstādījis pabeigto moduli apple-bce no anuali1 repozitorija, vispirms to jāizdzēš un tikai pēc tam jāsavāc un jāuzstāda bce modulis ar atbalstu suspend režīmam.

Tāpat nepieciešams pievienot apelsīnu moduli apelsīnucekam (ja to iepriekš neesat darījis) un pārliecināties, ka failā /boot/loader/entries/arch.conf rindā options beigās ir pievienots parametrs

pcie_ports=compat Pašreizējais tačpalīgas draiveris izslēdzas, kad iestājas suspend režīms, savukārt thunderbolt draiveris dažkārt iesaldē sistēmu vairāk nekā 30 sekundes, un atjaunošanās laikā — vairākas minūtes. To var labot, automātiski iznākot problemātiskos moduļus..

Izveidojiet skriptu

Padariet to izpildāmu: /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

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

Uz šo brīdi viss ir. Rezultātā iegūstam diezgan funkcionējošu sistēmu ar dažiem niansēm, saistībā ar suspend/atjaunot. Daudzu dienu uptime laikā nav novēroti ne izmests, ne kernel panic. Ceru, ka tuvākajā nākotnē bce moduļa autors to pabeigs, un mēs iegūsim pilnīgu atbalstu suspend/atjaunot un skaņai.

Uz to pagaidām viss. Rezultātā iznākusi pilnīgi funkcionāla sistēma, izņēmuma gadījumos ar dažiem suspend/resume smalkiem jautājumiem. Nekādas izslēgšanās un kernel panic nav novērotas jau vairākas dienas. Ceru, ka tuvākajā laikā moduļa autora bce veidos uzlabojumus, un mēs iegūsim pilnīgu atbalstu suspend/resume un skaņu.

Avots: habr.com

Iegādājieties uzticamu tīmekļa hostingu ar DDoS aizsardzību, VPS VDS serveriem 🔥 Iegādājieties uzticamu tīmekļa hostingu ar DDoS aizsardzību, VPS VDS serveriem | ProHoster