Pokrećemo MacBook Pro 2018 T2 sa ArchLinux (dualboot)

Obstaja kar nekaj govoric, da je zaradi novega čipa T2 nemogoče namestiti Linux na nove MacBooke 2018 s Touch Barom. Čas je mineval in proti koncu leta 2019 so tretji razvijalci razvili vrsto gonilnikov in niti za jedro za interakcijo s čipom T2. Glavno gonilo za modele MacBook 2018 in novejše omogoča delovanje VHCI (delovanje Touch Bara / tipkovnice / itd.), pa tudi delovanje zvoka.

Projekt mbp2018-bridge-drv je razdeljeno na 3 glavne komponente:

  • BCE (Buffer Copy Engine) — vzpostavi glavni komunikacijski kanal s T2. VHCI in Audio zahtevata to komponento.
  • VHCI — to je virtualni USB gostitelj; ta komponenta zagotavlja tipkovnico, miško in druge komponente sistema (druga gonila uporabljajo ta gostiteljski krmilnik za zagotavljanje večje funkcionalnosti).
  • Audio — gonilo za avdio vmesnik T2, trenutno podpira le zvok preko vgrajenih zvočnikov MacBooka.


Drugi projekt se imenuje macbook12-spi-driver, in omogoča delovanje gonila za vnos za tipkovnico, sledilno ploščico SPI, Touch Bar za MacBook Pro konec leta 2016 in novejše različice. Del gonilnikov za tipkovnico / sledilno ploščico je zdaj vključen v jedro, od različice 5.3.

Prav tako je bila omogočena podpora za naprave, kot so wi-fi, sledilna ploščica itd., s pomočjo popravkov jedra. V trenutku je različica jedra 5.3.5-1

Kaj trenutno deluje

  1. NVMe
  2. Tipkovnica
  3. USB-C (Thunderbolt ni bil testiran, pri samodejnem nalaganju modula sistem zamrzne)
  4. Touch Bar (z možnostjo vključitve tipk Fn, osvetlitev, ESC itd.)
  5. Zvok (samo vgrajeni zvočniki)
  6. Modul Wi-Fi (prek brcmfmac in samo prek iw)
  7. DisplayPort prek USB-C
  8. Senzorji
  9. Suspend / Resume (delno)
  10. itd..

Ta vodič velja za macbookpro15,1 in macbookpro15,2. Osnova je bila članek z GitHuba v angleščini od tod. Ne vse iz tega članka je delovalo, zato sem moral poiskati rešitev sam.

Kaj bo potrebno za namestitev

  • USB-C dok prehodnik na USB (vsaj tri USB vhode za povezavo miške, tipkovnice, USB modema ali telefona v načinu tethering). To je potrebno le v začetnih fazah namestitve.
  • USB tipkovnica
  • USB / USB-C ključek z najmanj 4 GB

1. Onemogočimo prepoved nalaganja z zunanjih naprav

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

2. Dodelimo prost prostor s Disk Utility

Za lažjo uporabe sem takoj dodelil 30 GB disku, ga formatiral v exfat v samem Disk Utility. Delitev fizičnega diska na particije v Disk Utility.

3. Oblikujemo iso sliko

Mogućnosti:

  1. Lahko se odločite za enostavno pot in prenesete že pripravljen slikovni material z jedrom 5.3.5-1 in popravki od aunali1 povezava do pripravljene slike
  2. Oblikovanje slike samostojno preko archlive (potrebujete sistem z distribucijo Archa)

    Namestimo archiso

    pacman -S archiso

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

    Dodamo repozitorij v pacman.conf:

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

    Ignoriramo izvirno jedro v pacman.conf:

    IgnorePkg   = linux linux-headers
    

    Dodamo potrebne pakete, na koncu dodamo jedro linux-mbp in linux-mbp-headers

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

    Spremeni skripto za delo v interaktivnem načinu (zamenjamo pacstrap -C s 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!"
    }

    Oblikujemo sliko:

    sudo ./build.sh -v

    Pritisnite Y, da preskočite ignorirane pakete, nato pa zapišite iso sliko na usb ključ:

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

4. Prvo nalaganje

Ponovno zaženite računalnik s vstavljeno ključno napravo in tipkovnico. Pritisnite options, ko se prikaže jabolko, in izberite EFI BOOT.

Nato je potrebno pritisniti tipko „e“ in zapisati na konec ukazne vrstice module_blacklist=thunderbolt. Če tega ne storite, sistem morda ne bo naložen in prikaže se napaka Thunderbolt ICM Error.

S pomočjo fdisk/cfdisk poiščite naš razdelek (pri meni je to nvme0n1p4), formatirajte ga in izvedite namestitev Archa. Uporabite lahko uradna navodila ili tretjih oseb.

Zagon razdelka ne ustvarjamo, naložili bomo zagon. /dev/nvme0n1p1
Ko je okolje popolnoma oblikovano v /mnt in pred prehodom v arch-chroot, zapišemo:

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

Dodamo v /etc/pacman.conf:


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

Namestimo jedro:


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

Zapišemo thunderbolt in applesmc v /etc/modprobe.d/blacklist.conf

blacklist thunderbolt
blacklist applesmc

Tipkovnica, touch bar itd.

Namestimo yay:


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

Namestimo module za delovanje touch bara:


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

Dodamo module v autostart: /etc/modules-load.d/apple.conf

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

Namestimo module jedra za delovanje tipkovnice. V repozitoriju anuali1 je na voljo že pripravljen paket, ki se imenuje apple-bce-dkms-git. Da ga namestimo, zapišemo v terminal:

pacman -S apple-bce-dkms-git

V tem primeru se bo ime modula jedra imenovalo apple-bce. V primeru samostojne gradnje se imenuje bce. Zato, če želite zapisati modul v razdelek MODULES v datoteko mkinicpio.conf, ne pozabite, kateri modul ste namestili.

Ročno sestavljanje:


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

Dodajamo modul bce ali apple-bce za samodejno nalaganje: /etc/modules-load.d/bce.conf

bce

Če želite privzeto uporabljati gumbe Fn, v datoteko /etc/modprobe.d/apple-tb.conf zapišite:

options apple-ib-tb fnmode=2

Posodabljamo jedro in initramfs.


mkinitcpio -p linux-mbp

Namestimo iwd:

sudo pacman -S networkmanager iwd

5. Naložnik

Po tem, ko so v chrootu nameščeni vsi glavni paketi, lahko začnemo z namestitvijo naložnika.

Nisem uspel spraviti grub-a v delovanje. Grub se naloži iz zunanjega usb-diska, vendar pri poskusu zapisovanja v nvme preko

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

je sistem padel v kernel panic, in po ponovnem zagonu novega elementa preko options ni bilo. Nobenega jasnega rešenja za ta problem nisem našel, zato sem se odločil poskusiti z nalaganjem preko systemd-boot.

  1. Začnemo
    bootctl --path=/boot install

    in spet padamo v kernel panic. Izklopimo MacBook, ga ponovno vklopimo, pritisnemo options (usb-c hub s tipkovnico ne izklapamo)

  2. Preverimo, da se je poleg zunanjega naprave pojavila nova vnos EFI BOOT
  3. Izberemo nalaganje iz zunanjega usb-diska, kot pri prvi namestitvi (ne pozabite dodati module_blacklist=thunderbolt)
  4. Priključimo naš disk in preidemo v okolje preko arch-chroot


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

Če želite, da tipkovnica deluje pred popolno nalaganjem sistema (kar je potrebno v primeru uporabe šifriranja luks/dm-crypt), v datoteko /etc/mkinicpio.conf v razdelku MODULES zapišite:

MODULES=(ext4 applespi intel_lpss_pci spi_pxa2xx_platform bce)

Posodabljamo jedro in initramfs.


mkinicpio -p linux-mbp

Nastavimo systemd-boot

Uredimo datoteko /boot/loader/loader.conf, odstranimo vse, kar je noter, in dodamo naslednje:

default arch
timeout 5
editor 1

Preidemo v mapo /boot/loader/entries, ustvarimo datoteko arch.conf in zapišemo:

naslov arch
linux /vmlinuz-linux-mbp
initrd /initramfs-linux-mbp.img
možnosti root=/dev/<b>nvme0n1p4</b> rw pcie_ports=compat

V primeru, da ste uporabili luks in lvm,

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

Ponovno zaženemo v MacOS.

6. Nastavitev Wi-Fi

Kot se je izkazalo, MacOS hrani datoteke čipov za wi-fi adapter v mapi /usr/share/firmware/wifi , in jih je možno vzeti v obliki blobov in jih dati modulu jedra brcmfmac. Če želite ugotoviti, katere datoteke uporablja vaš adapter, odprite terminal v MacOS in zapišite:

ioreg -l | grep C-4364

Dobimo dolg seznam. Potrebne so nam samo datoteke iz razdelka 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>"})

V vašem primeru se lahko imena datotek razlikujejo. Kopiramo jih iz mape /usr/share/firmware/wifi na USB ključe in preimenujemo v naslednjo obliko:

    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>

V tem primeru zadnji besedilni datoteki vsebuje imena modelov. Če vaš model ni macbookpro15,2, ga morate preimenovati v skladu z vašim modelom MacBooka.

Ponovno se zaženemo v Archu.

Kopiramo datoteke s ključka v mapo /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/

Preverimo delovanje modula:


rmmod brcmfmac
modprobe brcmfmac

Prepričamo se, da je omrežni vmesnik prikazan preko ifconfig/ip.
Nastavljamo wifi preko iwctl

Opozorilo. Preko netctl, nmcli ipd. vmesnik ne deluje, le preko iwd.

Poganjamo NetworkManager, da uporablja iwd. Za to ustvarimo datoteko /etc/NetworkManager/NetworkManager.conf in vpišemo:

[device]
wifi.backend=iwd

Zagnamo storitev NetworkManager


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

7. Zvok

Da zvok deluje, je potrebno namestiti pulseaudio:


sudo pacman -S pulseaudio

Prenesemo tri datoteke:

Premaknemo jih:

    /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

Trenutno 16.10.2019 izbrati je treba med zvokom in suspend/resume. Čakamo, da avtor bce modula dokonča funkcionalnost.

Za sestavljanje modula s podporo za suspend/resume je potrebno izvesti naslednje:


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

Če ste namestili že sestavljen modul apple-bce iz repozitorija anuali1, ga morate najprej odstraniti, šele nato pa sestaviti in namestiti modul bce s podporo za suspend.

Prav tako je potrebno dodati v blacklist modul applesmc (če tega še niste storili) in se prepričati, da je v /boot/loader/entries/arch.conf na koncu vrstice options dodan parameter pcie_ports=compat.

Trenutno se drajver za Touch Bar podvaja pri prehodu v način suspend, drajver za Thunderbolt pa včasih zaklemi sistem za več kot 30 sekund, pri obnovitvi pa za nekaj minut. To je mogoče popraviti s samodejnim nalaganjem problematičnih modulov.

Ustvarite 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

Naredite ga izvršnega:

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

Zaenkrat je to vse. Na koncu imamo povsem funkcionalen sistem, razen nekaterih podrobnosti s suspend/resume. V zadnjih dneh ni opaziti izpadov ali kernel panic. Upam, da bo avtor modula bce kmalu dokončal, in dobili bomo popolno podporo za suspend/resume in zvok.

Izvor: habr.com

Kupite zanesljivo gostovanje za spletne strani z zaščito pred DDoS, VPS VDS strežniki 🔥 Kupite zanesljivo gostovanje za spletne strani z zaščito pred DDoS, VPS VDS strežniki | ProHoster