Bërja që MacBook Pro 2018 T2 të funksionojë me ArchLinux (dualboot)

Ka pasur mjaft zhurmë për faktin se çipi i ri T2 do ta bëjë të pamundur instalimin e Linux në MacBook-ët e rinj 2018 me një shirit prekjeje. Koha kaloi dhe në fund të vitit 2019, zhvilluesit e palëve të treta implementuan një numër drejtuesish dhe arnime të kernelit për ndërveprim me çipin T2. Drejtuesi kryesor për modelet MacBook 2018 dhe më të reja zbaton funksionimin VHCI (operimin me prekje/tastierë/etj.), si dhe funksionimin e zërit.

Projekt mbp2018-urë-drv i ndarë në 3 komponentë kryesorë:

  • BCE (Buffer Copy Engine) - vendos kanalin kryesor të komunikimit me T2. VHCI dhe Audio kërkojnë këtë komponent.
  • VHCI është një kontrollues i hostit virtual USB; tastiera, miu dhe komponentët e tjerë të sistemit sigurohen nga ky komponent (drejtuesit e tjerë përdorin këtë kontrollues pritës për të ofruar më shumë funksionalitet.
  • Audio - drejtuesi për ndërfaqen audio T2, aktualisht mbështet vetëm daljen audio përmes altoparlantëve të integruar të MacBook


Projekti i dytë quhet macbook12-spi-driver, dhe zbaton aftësinë për të përdorur një drejtues hyrjeje për tastierën, tastierën SPI dhe shiritin e prekjes për MacBook Pro të fundit të vitit 2016 dhe më vonë. Disa drejtues tastierë/trackpad janë përfshirë tani në kernel, duke filluar me versionin 5.3.

Mbështetja për pajisje të tilla si wi-fi, touchpad, etj u zbatua gjithashtu duke përdorur arna të kernelit. Versioni aktual i kernelit 5.3.5-1

Çfarë po funksionon për momentin

  1. NVMe
  2. tastierë
  3. USB-C (Thunderbolt nuk është testuar; kur moduli ngarkohet automatikisht, ai ngrin sistemin)
  4. Touchbar (me aftësinë për të ndezur tastet Fn, dritën e prapme, ESC, etj.)
  5. Tingulli (vetëm altoparlantët e integruar)
  6. Moduli Wi-Fi (përmes brcmfmac dhe vetëm përmes iw)
  7. DisplayPort mbi USB-C
  8. Sensorët
  9. Pezulloni/Rifilloni (pjesërisht)
  10. etj ..

Ky tutorial është i zbatueshëm për macbookpro15,1 dhe macbookpro15,2. Artikulli është marrë si bazë nga Github në anglisht. prandaj. Jo gjithçka në këtë artikull funksionoi, kështu që më duhej të gjeja një zgjidhje vetë.

Çfarë ju nevojitet për instalim

  • Përshtatës lidhës USB-C në USB (të paktën tre hyrje USB për lidhjen e miut, tastierës, modemit USB ose telefonit në modalitetin e lidhjes). Kjo është e nevojshme vetëm në fazat e para të instalimit
  • Tastierë USB
  • USB/USB-C flash drive minimalisht 4GB

1. Çaktivizoni ndalimin e nisjes nga media e jashtme

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

2. Alokoni hapësirë ​​të lirë duke përdorur Disk Utility

Për lehtësi, ndava menjëherë 30 GB në disk, duke e formatuar në exfat në vetë Disk Utility. Ndarja e një mjeti të diskut fizik të diskut.

3. Krijoni një imazh ISO

opsionet:

  1. Mund të shkoni në rrugën e thjeshtë dhe të shkarkoni një imazh të gatshëm me kernel 5.3.5-1 dhe arna nga aunali1 lidhje me imazhin e përfunduar
  2. Krijo vetë një imazh nëpërmjet archlive (kërkohet një sistem me një shpërndarje Archa)

    I vendosur arkizo

    pacman -S archiso

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

    Shtoni depon në pacman.conf:

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

    Ne e injorojmë kernelin origjinal në pacman.conf:

    IgnorePkg   = linux linux-headers
    

    Shtoni paketat e nevojshme, në fund shtoni kernelin linux-mbp dhe titujt linux-mbp

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

    Ne e ndryshojmë skriptin për të punuar në modalitetin interaktiv (zëvendësojmë pacstrap -C me 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!"
    }

    Formimi i një imazhi:

    sudo ./build.sh -v

    Shtypni Y për të kapërcyer paketat e shpërfillura, më pas shkruani imazhin iso në USB flash drive:

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

4. Boot e parë

Rinisni me flash drive dhe tastierë të futur. Shtypni opsionet kur shfaqet molla, zgjidhni EFI BOOT.

Tjetra, duhet të shtypni tastin "e" dhe të futni në fund të vijës së komandës module_blacklist=rrufeja. Nëse kjo nuk është bërë, sistemi mund të mos niset dhe do të shfaqet një Gabim Thunderbolt ICM.

Duke përdorur fdisk/cfdisk ne gjejmë ndarjen tonë (për mua është nvme0n1p4), e formatojmë dhe instalojmë arkivin. Ju mund të përdorni udhëzimet zyrtare ose anash.

Ne nuk po krijojmë një ndarje boot; ne do të shkruajmë ngarkuesin e nisjes /dev/nvme0n1p1
Pasi mjedisi në /mnt është formuar plotësisht dhe përpara se të kaloni në arch-chroot, shkruani:

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

Shto në /etc/pacman.conf:


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

Instaloni kernelin:


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

Ne regjistrojmë thunderbolt dhe applesmc në /etc/modprobe.d/blacklist.conf

blacklist thunderbolt
blacklist applesmc

Tastiera, tastiera, etj

Instalo Yay:


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

Instalimi i moduleve për funksionimin e shiritit të prekjes:


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

Shtoni module në nisje: /etc/modules-load.d/apple.conf

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

Instalimi i moduleve të kernelit për tastierën. Në depo anuali1 ka një paketë të gatshme, quhet mollë-bce-dkms-git. Për ta instaluar, shkruani në tastierë:

pacman -S apple-bce-dkms-git

Në këtë rast, moduli i kernelit do të thirret mollë-p.e.s. Në rastin e vetë-montimit, quhet pes. Prandaj, nëse dëshironi të regjistroni një modul në seksionin MODULES të skedarit mkinicpio.conf, atëherë mos harroni se cilin modul keni instaluar.

Montimi manual:


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

Shtoni modulin bce ose apple-bce në nisje: /etc/modules-load.d/bce.conf

bce

Nëse dëshironi të përdorni butonat Fn si parazgjedhje, atëherë shkruani në skedarin /etc/modprobe.d/apple-tb.conf:

options apple-ib-tb fnmode=2

Përditësimi i kernelit dhe initramfs.


mkinitcpio -p linux-mbp

Instaloni iwd:

sudo pacman -S networkmanager iwd

5. Ngarkues

Pasi të instalohen të gjitha paketat kryesore brenda chroot, mund të filloni të instaloni bootloader.

Unë nuk kam qenë në gjendje për të marrë grub në punë. Grub niset nga një disk USB i jashtëm, por kur përpiqeni ta regjistroni në nvme nëpërmjet

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

sistemi hyri në panik të kernelit dhe pas rindezjes, një artikull i ri përmes opsioneve nuk u shfaq. Unë nuk gjeta ndonjë zgjidhje të qartë për këtë problem dhe për këtë arsye vendosa të provoj të zbatoj nisjen duke përdorur systemd-boot.

  1. Nisja
    bootctl --path=/boot install

    dhe kalojmë në panik të kernelit. Fikni MacBook, ndizeni përsëri, klikoni opsionet (mos e fikni shpërndarësin USB-C me tastierë)

  2. Ne kontrollojmë që një hyrje e re EFI BOOT është shfaqur përveç pajisjes së jashtme
  3. Ne zgjedhim të nisim nga një disk USB i jashtëm, si gjatë instalimit të parë (mos harroni të specifikoni module_blacklist=thunderbolt)
  4. Ne montojmë diskun tonë dhe shkojmë në mjedis nëpërmjet arch-chroot


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

Nëse është e nevojshme që tastiera të funksionojë derisa sistemi të ngarkohet plotësisht (kjo është e nevojshme kur përdorni enkriptimin luks/dm-crypt), atëherë shkruani atë në skedarin /etc/mkinicpio.conf në seksionin MODULES:

MODULES=(ext4 applespi intel_lpss_pci spi_pxa2xx_platform bce)

Përditësimi i kernelit dhe initramfs.


mkinicpio -p linux-mbp

Konfigurimi i systemd-boot

Ne redaktojmë skedarin /boot/loader/loader.conf, fshijmë gjithçka brenda dhe shtojmë sa vijon:

default arch
timeout 5
editor 1

Shkoni te dosja /boot/loader/entries, krijoni skedarin arch.conf dhe shkruani:

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

Nëse keni përdorur luks dhe lvm, atëherë

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

Rinisni në MacOS.

6. Konfigurimi i Wi-Fi

Siç doli në fund, MacOS ruan skedarët e firmuerit për përshtatësin wi-fi në dosje /usr/share/firmware/wifi , dhe mund t'i merrni prej andej në formë blobs dhe t'i futni në modulin e kernelit brcmfmac. Për të zbuluar se cilët skedarë përdor përshtatësi juaj, hapni një terminal në MacOS dhe shkruani:

ioreg -l | grep C-4364

Ne kemi një listë të gjatë. Na duhen vetëm skedarë nga seksioni Skedarët e kërkuar:

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

Në rastin tuaj, emrat e skedarëve mund të ndryshojnë. Kopjoni ato nga dosja /usr/share/firmware/wifi në flash drive dhe riemërtoni si më poshtë:

    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>

Në këtë rast, skedari i fundit i tekstit përmban emrat e modeleve; nëse modeli juaj nuk është macbookpro15,2, atëherë duhet ta riemërtoni këtë skedar në përputhje me modelin tuaj MacBook.

Rinisni në Arch.

Kopjoni skedarët nga flash drive në dosjen /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/

Kontrollimi i funksionalitetit të modulit:


rmmod brcmfmac
modprobe brcmfmac

Sigurohemi që ndërfaqja e rrjetit të shfaqet përmes ifconfig/ip.
Konfigurimi i Wi-Fi nëpërmjet iwctl

Kujdes. Nëpërmjet netctl, nmcli, etj. Ndërfaqja nuk funksionon, vetëm përmes iwd.

Ne e detyrojmë NetworkManager të përdorë iwd. Për ta bërë këtë, krijoni skedarin /etc/NetworkManager/NetworkManager.conf dhe shkruani:

[device]
wifi.backend=iwd

Nisni shërbimin NetworkManager


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

7. Tingulli

Në mënyrë që tingulli të funksionojë, duhet të instaloni pulseaudio:


sudo pacman -S pulseaudio

Shkarkoni tre skedarë:

Le t'i lëvizim ato:

    /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. Pezulloni/Rifilloni

Ne kete moment 16.10.2019 ju duhet të zgjidhni ose të shëndoshë ose të pezullojë / rifillojë. Ne presim që autori i modulit bce të përfundojë funksionalitetin.

Për të ndërtuar një modul me mbështetje të pezulluar/rifilluar, duhet të bëni sa më poshtë:


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

Nëse keni instaluar modulin e gatshëm të Apple-bce nga depoja anuali1, atëherë së pari duhet ta hiqni atë dhe vetëm më pas të montoni dhe instaloni modulin bce me mbështetjen e modalitetit të pezullimit.

Gjithashtu, duhet të shtoni modulin applesmc në listën e zezë (nëse nuk e keni bërë këtë më parë) dhe sigurohuni që në /boot/loader/entries/arch.conf në rreshtin e opsioneve në fund parametri të shtohet pcie_ports=kompat.

Aktualisht, drejtuesi i shiritit të prekjes rrëzohet kur hyn në modalitetin e pezullimit dhe drejtuesi i rrufesë ndonjëherë e ngrin sistemin për më shumë se 30 sekonda dhe për disa minuta kur rifillon. Kjo mund të rregullohet duke shkarkuar automatikisht modulet problematike.

Krijo një skenar /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

Bëjeni atë të ekzekutueshëm:

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

Kjo është e gjitha për tani. Rezultati është një sistem plotësisht i zbatueshëm, me përjashtim të disa nuancave me pezullim/rifillim. Asnjë përplasje ose panik i bërthamës nuk u vërejt gjatë disa ditëve të funksionimit. Shpresoj që në një të ardhme të afërt autori i modulit bce do ta përfundojë atë dhe ne do të marrim mbështetje të plotë për pezullimin/rifillimin dhe tingullin.

Burimi: www.habr.com

Shto një koment