Aktivizimi i MacBook Pro 2018 T2 me ArchLinux (dualboot)

Ishte bërë shumë zhurmë rreth faktit se për shkak të çipit të ri T2, nuk është e mundur të instalohet linux në MacBook të rinj 2018 me Touch Bar. Kaloi koha, dhe në fund të vitit 2019, zhvilluesit e jashtëm zbatuan një sërë drejtuese dhe patches për kernelin për t'u lidhur me çipin T2. Drejtuesi kryesor për modelet MacBook 2018 dhe më të reja implementon funksionimin e VHCI (funksionimi i tastierës/touch-it etj.) si dhe funksionimin e tingullit.

Projekt mbp2018-bridge-drv eshte i ndarë në 3 komponente kryesore:

  • BCE (Buffer Copy Engine) — krijon kanalin e komunikimit me T2. VHCI dhe Audio kĂ«rkojnĂ« kĂ«tĂ« komponent.
  • VHCI — Ă«shtĂ« njĂ« kontrollues virtual i hostit USB; tastiera, mice dhe komponentĂ«t e tjerĂ« tĂ« sistemit ofrohen nga ky komponent (drejtues tĂ« tjerĂ« e pĂ«rdorin kĂ«tĂ« kontrollues hosti pĂ«r tĂ« siguruar funksionalitete tĂ« tjera).
  • Audio — drejtuesi pĂ«r ndĂ«rfaqen e audios T2, pĂ«r momentin mbĂ«shtetet vetĂ«m pĂ«r daljen e tingullit pĂ«rmes altoparlantĂ«ve tĂ« integruar tĂ« MacBook.


Projekti i dytë quhet macbook12-spi-driver, dhe ai realizon mundësinë e funksionimit të drejtuesit të hyrjes për tastierën, trackpad-in SPI, dhe touchbar për MacBook Pro nga fundi i vitit 2016 dhe më pas. Një pjesë e drejtuesve për tastierën/trackpad-in tani është përfshirë në bërthamën, duke filluar nga versioni 5.3.

Po ashtu, është realizuar mbështetje për pajisje të tilla si wi-fi, trackpad, etj, përmes patch-ev të bërthamës. Versioni aktual i bërthamës 5.3.5-1

ÇfarĂ« funksionon nĂ« kĂ«tĂ« moment

  1. NVMe
  2. Tastiera
  3. USB-C (Thunderbolt nuk është testuar, kur ngarkohet moduli bërthama ngec sistemin krejtësisht)
  4. Touchbar (me mundësinë për të aktivizuar çelësat Fn, ndriçimi, ESC, etj.)
  5. Zëri (vetëm altoparlantët e integruar)
  6. Moduli Wi-Fi (përmes brcmfmac dhe vetëm përmes iw)
  7. DisplayPort përmes USB-C
  8. Sensorët
  9. Suspendim/Rimëkëmbje (pjesërisht)
  10. etj..

Ky tutorial është i aplikueshëm për macbookpro15,1 dhe macbookpro15,2. Baza është marrë nga një artikull në GitHub në anglisht këtu. Jo të gjitha nga ky artikull funksionuan, prandaj duhej të kërkoja zgjidhje vetë.

ÇfarĂ« do tĂ« nevojitet pĂ«r instalimin

  • USB-C dok adaptor nĂ« USB (tĂ« paktĂ«n tre porta USB pĂ«r lidhjen e mausit, tastierĂ«s, modemit USB ose telefonit nĂ« mĂ«nyrĂ«n e lidhjes). Kjo Ă«shtĂ« e nevojshme vetĂ«m nĂ« fazat e para tĂ« instalimit
  • TastierĂ« USB
  • USB/USB-C flash drive me minimum 4GB

1. Çaktivizoni ndalimin e ngarkesĂ«s nga pajisjet e jashtme

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

2. Përzgjedhim hapësirë të lirë me Disk Utility

Për lehtësi, unë kam rezervuar menjëherë 30 GB në disk, duke e formatizuar atë në exfat direkt në Disk Utility. Ndarja e diskut fizik në seksione me Disk Utility.

3. Krijojmë imazhin iso

Mundësitë:

  1. Mund të ndjekim rrugën e lehtë dhe të shkarkojmë një imazh të gatshëm me kernel 5.3.5-1 dhe patch-et nga aunali1 linku për imazhin e gatshëm
  2. Krijoni imazhin vetë përmes archlive (nevojitet një sistem me distribucionin arch)

    Instalojmë archiso

    pacman -S archiso

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

    Shtojmë repositorin në pacman.conf:

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

    Injorojmë kernelin origjinal në pacman.conf:

    IgnorePkg   = linux linux-headers
    

    Shtojmë paketat e nevojshme, në fund shtojmë kernelin linux-mbp dhe linux-mbp-headers

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

    Modifikojmë skriptin për të punuar në modin 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!"
    }

    Krijojmë imazhin:

    sudo ./build.sh -v

    Shtypim Y për të anashkaluar paketat e injoruara, pastaj shkruajmë imazhin iso në memorien USB:

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

4. Ngarkesa e parë

Rifillojmë me memorien USB të futur dhe tastierën. Shtypim opsione kur shfaqet logoja e Apple, përzgjedhim EFI BOOT.

Më pas është e nevojshme të shtypni çelësin «e» dhe të shkruani në fund të vijës së komandës module_blacklist=thunderbolt. Nëse nuk e bëni këtë, sistemi mund të mos ngarkohet dhe do të ketë një gabim Thunderbolt ICM.

Me fdisk/cfdisk gjejmë ndarjen tonë (për mua është nvme0n1p4), e formatizojmë dhe kryejmë instalimin e arka. Mund të përdorim udhëzimin zyrtar ose të jashtëm.

Nuk krijojmë ndarjen boot, sepse do të shkruajmë ngarkuesin në /dev/nvme0n1p1
Pasi të jetë formuar plotësisht ambienti në /mnt dhe para se të kalojmë në arch-chroot, shkruajmë:

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

Shtojmë në /etc/pacman.conf:


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

Instalojmë bërthamën:


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

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

blacklist thunderbolt
blacklist applesmc

Tastiera, touch bar, etj.

Instalojmë yay:


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

Instalojmë modulet për funksionimin e touch bar-it:


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

Shtojmë modulet në ngarkesë automatikisht: /etc/modules-load.d/apple.conf

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

Instalojmë modulet e bërthamës për funksionimin e tastierës. Në depozitë anuali1 ka një paketë të gatshme, e cila quhet apple-bce-dkms-git. Për ta instaluar, shkruajmë në konsol:

pacman -S apple-bce-dkms-git

Në këtë rast, moduli i bërthamës do të quhet apple-bce. Në rastin e ndërtimit në mënyrë të pavarur, ai quhet bce. Prandaj, nëse dëshironi të shkruani modulin në seksionin MODULES në skedarin mkinicpio.conf, mos harro se cili modul e keni instaluar.

Ndërtimi 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ë ngarkesën automatikisht: /etc/modules-load.d/bce.conf

bce

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

options apple-ib-tb fnmode=2

Përditësoni bërthamën dhe initramfs.


mkinitcpio -p linux-mbp

Do të instalojmë iwd:

sudo pacman -S networkmanager iwd

5. Menaxhuesi i ngarkesës

Pas instalimit të të gjitha pakove kryesore brenda chroot, mund të filloni instalimin e menaxhuesit të ngarkesës.

Nuk arrita të bëj grub të funksionojë. Nga një disk usb i jashtëm grub ngarkohet, por kur përpiqem ta shkruaj në nvme përmes

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

sistemi e kalonte në panic bërthamor, dhe pas rinisjes nuk shfaqej asnjë opsion i ri përmes opsioneve. Nuk gjetëm ndonjë zgjidhje të qartë për këtë problem dhe vendosa të provoj të realizoj ngarkesën përmes systemd-boot.

  1. Nisni
    bootctl --path=/boot install

    dhe ne fluturojme ne kernel panic. Fikni MacBook-un, ndizni perseri, shtypni opsionet (mos e çkoni usb-c hub-in me tastierë)

  2. Kontrollojmë që të ketë një regjistrim të ri EFI BOOT përveç pajisjes së jashtme
  3. Zgjedhim ngarkimin nga disku USB të jashtëm, ashtu si në instalimin e parë (mos harroni të shkruani module_blacklist=thunderbolt)
  4. Montojmë diskun tonë dhe kalojmë në mjedis përmes arch-chroot


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

Nëse është e nevojshme që tastiera të funksionojë deri në ngarkimin e plotë të sistemit (kjo është e nevojshme në rastin e përdorimit të kriptimit luks/dm-crypt), shkruani në skedarin /etc/mkinicpio.conf në seksionin MODULES:

MODULES=(ext4 applespi intel_lpss_pci spi_pxa2xx_platform bce)

Përditësoni bërthamën dhe initramfs.


mkinicpio -p linux-mbp

Konfigurojmë systemd-boot

Redaktoni skedarin /boot/loader/loader.conf, hiqni gjithçka që ka brenda, dhe shtoni këtë:

default arch
timeout 5
editor 1

Shkoni në folderin /boot/loader/entries, krijoni skedarin arch.conf dhe shkruani:

titulli arkiv
linux /vmlinuz-linux-mbp
initrd /initramfs-linux-mbp.img
opcionet root=/dev/<b>nvme0n1p4</b> rw pcie_ports=compat

Në rast 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

Rindizni në MacOS.

6. Konfigurimi i Wi-Fi

Siç doli, skedarët e firmware për adaptorin wi-fi MacOS ruhen në dosje /usr/share/firmware/wifi , dhe mund t'i marrim ato në formën e blob-eve dhe t'i japim modulit të bërthamës brcmfmac. Për të kuptuar se cilët skedarë i përdor adaptori juaj, hapim terminalin në MacOS dhe shkruajmë:

ioreg -l | grep C-4364

Marrim një listë të gjatë. Na duhen skedarët vetëm nga seksioni 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>"})

Në rastin tuaj emrat e skedarëve mund të ndryshojnë. I kopjojmë ata nga dosja /usr/share/firmware/wifi në një flash drive dhe i ndryshojmë emrat në këtë formë:

    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>

Në këtë rast, skedari i fundit tekstual përmban emrat e modelit, nëse modeli juaj nuk është macbookpro15,2, duhet ta ndryshoni emrin e këtij skedari në përputhje me modelin tuaj të MacBook-ut.

Rifillojmë në arch.

Kopjojmë 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/

Kontrollojmë funksionimin e modulit:


rmmod brcmfmac
modprobe brcmfmac

Sigurohemi që ndërfaqja rrjetare është shfaqur përmes ifconfig/ip.
Konfigurojmë wifi përmes iwctl

Kujdes. Përmes netctl, nmcli, etj. ndërfaqja nuk punon, vetëm përmes iwd.

Detyrojmë NetworkManager të përdorë iwd. Për këtë krijojmë një skedar /etc/NetworkManager/NetworkManager.conf dhe shkruajmë:

[device]
wifi.backend=iwd

Nisjmë shërbimin NetworkManager


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

7. Zëri

Për të aktivizuar zërin, duhet të instalohet pulseaudio:


sudo pacman -S pulseaudio

Po shkarkojmë tre skedarë:

I zhvendosim ata:

    /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. Suspendim/Rinovim

Aktualisht 16.10.2019 duhet të zgjidhni ose zërin, ose suspendim/rinovim. Presim derisa autori i këtij moduli të përfundojë funksionalitetin.

Për të ndërtuar një modul me mbështetje për suspendim/rinovim, duhet të kryeni këto hapa:


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 modulën e gatshme apple-bce nga repositori anuali1, duhet ta hiqni atë paraprakisht dhe vetëm pas kësaj të ndërtoni dhe instaloni modulën bce me mbështetje për mënyrën suspend.

Gjithashtu, duhet të shtoni në blacklist modulën applesmc (nëse nuk e keni bërë këtë më parë) dhe të siguroheni që në /boot/loader/entries/arch.conf në rreshtin e mundësive në fund të ketë shtuar parametrin pcie_ports=compat.

Aktualisht, drejtuesi i touchbar-it ndalon kur hyn nĂ« mĂ«nyrĂ«n suspend, ndĂ«rsa drejtuesi thunderbolt ndonjĂ«herĂ« ngadalĂ«son sistemin pĂ«r mĂ« shumĂ« se 30 sekonda, dhe kur rinovohet — pĂ«r disa minuta. Kjo mund tĂ« rregullohet duke shkarkuar automatikisht modulet problematike.

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

Bëjeni atë ekzekutues:

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

Këtu përfundojmë për momentin. Në përfundim, rezulton një sistem mjaft funksional, përveç disa detajeve me suspend/resume. Nuk janë vërejtur rrëzime apo kernel panic gjatë disa ditëve të funksionimit. Shpresoj që së shpejti autori i modulit bce të përmirësojë gjithçka dhe ne të marrim mbështetje të plotë për suspend/resume dhe zë.

Burimi: habr.com

Bli njĂ« hosting tĂ« besueshĂ«m pĂ«r faqet me mbrojtje DDoS, VPS VDS serverĂ« đŸ”„ Bli njĂ« hosting tĂ« besueshĂ«m pĂ«r faqet me mbrojtje DDoS, VPS VDS serverĂ« | ProHoster