Të bënë të funksionojë MacBook Pro 2018 T2 me ArchLinux (dualboot)

Ka shumë zhurmë rreth asaj që, për shkak të çipit të ri T2, është e pamundur të instalohet linux në MacBook-ët e rinj 2018 me Touch Bar. Kaloi koha, dhe deri në fund të vitit 2019, zhvillues të tretë realizuan një sërë driverrash dhe patches për bërthamën për të bashkëvepruar me çipin T2. Driveri kryesor për modelet MacBook 2018 dhe më të reja realizon funksionimin e VHCI (funksionimi i tastierës / trackpad-it / etj.), si dhe funksionimin e zërit.

Projekti mbp2018-bridge-drv e ndarë në 3 komponentë kryesorë:

  • BCE (Buffer Copy Engine) — krijon kanalin kryesor tĂ« komunikimit me T2. VHCI dhe Audio kĂ«rkojnĂ« kĂ«tĂ« komponent.
  • VHCI — Ă«shtĂ« njĂ« kontrollues virtual i hostit USB; tastiera, mice dhe komponentĂ« tĂ« tjerĂ« tĂ« sistemit ofrohen nga ky komponent (driverrat e tjerĂ« pĂ«rdorin kĂ«tĂ« host-kontroller pĂ«r tĂ« siguruar funksionalitet mĂ« tĂ« avancuar).
  • Audio — driveri pĂ«r ndĂ«rfaqen audio T2, aktualisht mbĂ«shtetet vetĂ«m dalja e zĂ«rit pĂ«rmes altoparlantĂ«ve tĂ« integruar tĂ« MacBook.


Projektin e dytë quajtur macbook12-spi-driver, ai realizon mundësinë e punës së driverit të hyrjes për tastierën, trackpad-in SPI, dhe Touch Bar-in për MacBook Pro-në e fundit të vitit 2016 dhe versionet më të reja. Disa nga driverrat për tastierën / trackpad-in tani janë përfshirë në bërthamë, duke filluar nga versioni 5.3.

Gjithashtu, është realizuar mbështetje për pajisje të tilla si wi-fi, trackpad, etj., me anë të patches për bërthamën. Aktualisht, versioni i bërthamës 5.3.5-1

ÇfarĂ« funksionon deri tani

  1. NVMe
  2. Tastiera
  3. USB-C (Thunderbolt nuk është provuar, duke bllokuar sistemin gjatë ngarkimit automatik të modulit)
  4. Touch Bar (me mundësinë e aktivizimit të çelësave 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 / Zgjim (pjesërisht)
  10. etj..

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

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

  • USB-C dongle nĂ« USB (tĂ« paktĂ«n tre porta USB pĂ«r lidhjen e njĂ« mice, tastiere, modem USB ose telefoni nĂ« modin tethering). Kjo Ă«shtĂ« e nevojshme vetĂ«m nĂ« fazat e para tĂ« instalimit.
  • TastierĂ« USB
  • USB / USB-C flash drive tĂ« paktĂ«n 4GB

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

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

2. Ndani hapësirën e lirë me Disk Utility

Për lehtësinë time, unë ndava menjëherë 30GB në disk, duke e formatuar atë në exfat në vetë Disk Utility. Pjesëtimi i diskut fizik në pjesë me Disk Utility.

3. Formojmë imazhin iso

Opsionet:

  1. Mund të ndjekim rrugën më të thjeshtë 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. Të formojmë 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, dhe në fund shtojmë kernelin linux-mbp dhe linux-mbp-headers

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

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

    Formojmë imazhin:

    sudo ./build.sh -v

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

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

4. Ngarkimi i parë

Rikthemi me USB-në dhe tastierën e futur. Shtypim opsionet kur shfaqet logon e mollës, përzgjidhim EFI BOOT.

Pastaj duhet të shtypim çelësin «e» dhe të shkruajmë në fund të linjës së komandës module_blacklist=thunderbolt. Nëse nuk e bëjmë këtë, sistemi mund të mos ngarkohet dhe do të shfaqet gabimi Thunderbolt ICM Error.

Me fdisk/cfdisk gjejmë partition-in tonë (për mua është nvme0n1p4), e formatojmë dhe bëjmë instalimin e Arch. Mund të përdorim udhëzimin zyrtar ose të palëve të treta.

Nuk krijojmë partition për ngarkim, do të shkruajmë ngarkuesin në /dev/nvme0n1p1
Pasi të kemi formuar plotësisht ambientin në /mnt dhe përpara 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ë kernelin:


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, touchbar, 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 punën e touchbar-it:


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

Shtojmë modulet në ngarkimin automatik: /etc/modules-load.d/apple.conf

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

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

pacman -S apple-bce-dkms-git

Në këtë rast moduli i kernelit do të quhet apple-bce. Në rastin e ndërtimit të vet, quhet bce. Nëse dëshironi të regjistroni modulin në seksionin MODULES në skedarin mkinicpio.conf, mos harroni se cilin modul keni instaluar.

Ndërtesa me dorë:


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

Shtojmë modulin bce ose apple-bce në ngarkimin e automatik: /etc/modules-load.d/bce.conf

bce

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

options apple-ib-tb fnmode=2

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


mkinitcpio -p linux-mbp

Instalojmë iwd:

sudo pacman -S networkmanager iwd

5. Bërthama e ngarkimit

Pasi të kenë përfunduar paketat kryesore brenda chroot, mund të vazhdojmë me instalimin e bërthamës së ngarkimit.

Nuk arrita asnjëherë ta bëj grub të funksionojë. Grub ngarkohet nga një disk usb të jashtëm, por kur përpiqem ta regjistroj atë në nvme përmes

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

sistemi binte në kernel panic, dhe pas ri-ngarkimit, nuk shfaqej një pikë e re përmes options. Nuk gjeta ndonjë zgjidhje të qartë për këtë problem dhe prandaj vendosa të provoj të realizoj ngarkimin duke përdorur systemd-boot.

  1. Po e nisim
    bootctl --path=/boot install

    dhe binte nĂ« kernel panic. Ç'mbyllim MacBook-un, e ndezim pĂ«rsĂ«ri, shtypim options (mos e çaktivizoni usb-c hub me tastierĂ«)

  2. Kontrollojmë nëse është shfaqur një regjistrim i ri EFI BOOT përveç pajisjes së jashtme
  3. Zgjidhni ngarkimin nga disku usb të jashtëm, si në instalimin e parë (mos harroni të regjistroni module_blacklist=thunderbolt)
  4. Muntë diskun tonë dhe kalojmë në ambientin përmes arch-chroot


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

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

MODULES=(ext4 applespi intel_lpss_pci spi_pxa2xx_platform bce)

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


mkinitcpio -p linux-mbp

Konfigurojmë systemd-boot

Redaktojmë skedarin /boot/loader/loader.conf, fshijmë gjithçka që ka brenda, dhe shtojmë si më poshtë:

default arch
timeout 5
editor 1

Kalojmë në dosjen /boot/loader/entries, krijojmë skedarin arch.conf dhe shkruajmë:

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

Në rast se kemi përdorur luks dhe lvm, atëherë

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

Ribashkohesh në MacOS.

6. Konfigurimi i Wi-Fi

Siç doli në pah, skedarët e firmware për adaptorin wi-fi MacOS ruhen në dosjen /usr/share/firmware/wifi , dhe mund t'i marrim nga aty në formë blobësh dhe t'ua jepim modulin e bërthamës brcmfmac. Për të zbuluar se cilët skedarë konkret përdor adaptori juaj, hapni terminalin në MacOS dhe shkruani:

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ë jenë të ndryshëm. Ne i kopjojmë ata nga dosja /usr/share/firmware/wifi në USB dhe i rinomojmë në formatin e mëposhtëm:

    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, atëherë duhet ta rinomoni këtë skedar sipas modelit tuaj të MacBook-ut.

Rivendosni në Arch.

Kopjoni skedarët nga USB 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/

Kontrolloni funksionalitetin e modulit:


rmmod brcmfmac
modprobe brcmfmac

Sigurohuni që ndërfaqja rrjetore është shfaqur përmes ifconfig/ip.
Konfiguroni wifi përmes iwctl

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

Shtyjme NetworkManager të përdorë iwd. Për këtë krijojmë skedarin /etc/NetworkManager/NetworkManager.conf dhe shkruajmë:

[device]
wifi.backend=iwd

Nisni shërbimin NetworkManager


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

7. Zëri

Për të punuar zëri, është e nevojshme të instaloni pulseaudio:


sudo pacman -S pulseaudio

Shkarkoni tre skedarë:

Shkoni me to:

    /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/Rikthim

Në këtë moment 16.10.2019 duhet të zgjidhni ose zërin, ose suspendim/rikthim. Po presim që autori i modulit bce të përfundojë funksionalitetin.

Për të ndërtuar një modul me mbështetje për suspendim/rikthim, është e nevojshme të kryeni këtë:


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 apple-bce nga depoja anuali1, duhet ta hiqni atë më parë dhe vetëm pastaj të ndërtoni dhe instaloni modulit bce me mbështetje për modalitetin suspend.

Gjithashtu, është e nevojshme të shtoni në blacklist modulit applesmc (nëse nuk e keni bërë më parë) dhe të siguroheni që në /boot/loader/entries/arch.conf në rreshtin opsione në fund është shtuar parametri pcie_ports=compat.

NĂ« kĂ«tĂ« moment, driver-i i TouchBar-it çon jashtĂ« sistemin kur hyn nĂ« modalitetin suspend, dhe driver-i i Thunderbolt ndonjĂ«herĂ« e ngrin sistemin pĂ«r mĂ« shumĂ« se 30 sekonda, dhe gjatĂ« rikthimit — pĂ«r disa minuta. Kjo mund tĂ« rregullohet duke shkarkuar automatikisht modulet problematike.

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

Bëjeni atë ekzekutues:

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

Këtu është deri tani. Në përfundim, kemi një sistem mjaft funksional, përveç disa nuancave me suspendim/rikthim. Nuk ka çarje dhe panic kernel-i nuk është vërejtur gjatë disa ditëve të besueshmërisë. Shpresojmë se së shpejti autori i modulit bce do ta përmirësojë, dhe do të marrim mbështetje të plotë për suspendim/rikthim dhe zërin.

Burimi: habr.com

Blini hosting tĂ« besueshĂ«m pĂ«r faqe interneti me mbrojtje nga DDoS, serverĂ« VPS VDS đŸ”„ Blini hosting tĂ« besueshĂ«m pĂ«r faqe interneti me mbrojtje nga DDoS, serverĂ« VPS VDS | ProHoster