MacBook Pro 2018 T2 ArchLinux-ekin funtzionatzea (abio bikoitza)

Izugarri samarra izan da T2 txip berriak 2018ko MacBook berrietan ukipen-barra duten Linux instalatzea ezinezkoa izango delakoan. Denbora pasa zen, eta 2019 amaieran, hirugarrenen garatzaileek hainbat kontrolatzaile eta kernel adabaki inplementatu zituzten T2 txiparekin elkarreragiteko. MacBook modeloen 2018 eta berriagoa den kontrolatzaile nagusiak VHCI funtzionamendua (ukitu/teklatua/etab. funtzionamendua) inplementatzen du, baita soinuaren funtzionamendua ere.

Proiektu mbp2018-bridge-drv 3 osagai nagusitan banatuta:

  • BCE (Buffer Copy Engine) - T2-rekin komunikazio kanal nagusia ezartzen du. VHCI eta Audioak osagai hau behar dute.
  • VHCI USB Virtual Host Controller bat da; teklatua, sagua eta sistemaren beste osagai batzuk osagai honek ematen ditu (beste kontrolatzaile batzuek ostalari kontrolagailu hau erabiltzen dute funtzionalitate gehiago emateko.
  • Audioa - T2 audio interfazearen kontrolatzailea, une honetan MacBook-en bozgorailu integratuen bidez soilik onartzen du audio-irteera


Bigarren proiektua deitzen da macbook12-spi-driver, eta MacBook Pro Late 2016 eta ondorengoetarako teklatuaren, SPI trackpad-aren eta ukipen-barraren sarrerako kontrolatzaile bat funtzionatzeko gaitasuna ezartzen du. Teklatu/trackpad kontrolatzaile batzuk nukleoan sartzen dira orain, 5.3 bertsiotik hasita.

Wi-Fi, touchpad, etab bezalako gailuetarako laguntza ere inplementatu zen nukleoaren adabakiak erabiliz. Egungo nukleoaren bertsioa 5.3.5-1

Momentu honetan funtzionatzen duena

  1. NVMe
  2. teklatua
  3. USB-C (Thunderbolt ez da probatu; modulua automatikoki kargatzen denean, sistema izoztu egiten du)
  4. Ukipen-barra (Fn teklak, atzeko argia, ESC, etab. aktibatzeko aukerarekin)
  5. Soinua (bozgorailu integratuak soilik)
  6. Wi-Fi modulua (brcmfmac bidez eta iw bidez soilik)
  7. DisplayPort USB-C bidez
  8. Sentsoreak
  9. Eten/Berrekin (partzialki)
  10. eta abar ..

Tutorial hau macbookpro15,1 eta macbookpro15,2-etarako aplikagarria da. Github-en ingelesezko artikulu bat hartu zen oinarritzat. beraz,. Artikulu honetan denak ez zuen funtzionatu, beraz, nik neuk aurkitu behar izan nuen irtenbidea.

Instalatu behar duzuna

  • USB-C ainguratze-egokitzailea USBrako (gutxienez hiru USB sarrera sagua, teklatua, USB modema edo telefonoa ainguratze moduan konektatzeko). Hau instalazioaren lehen faseetan baino ez da beharrezkoa
  • USB teklatua
  • USB/USB-C flash drive gutxienez 4 GB

1. Desgaitu kanpoko euskarrietatik abiarazteko debekua

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

2. Esleitu espazio librea Disko Utilitatea erabiliz

Erosotasunerako, berehala 30GB esleitu nizkion diskoari, exfat formateatu Disk Utility-n bertan. Disko fisikoaren disko-erabilgarritasuna partitzea.

3. Sortu ISO irudi bat

aukerak:

  1. Ibilbide sinpletik joan eta prest egindako irudi bat deskargatu dezakezu kernel 5.3.5-1 eta adabakiekin. aunali1 amaitutako irudirako esteka
  2. Sortu irudi bat zeuk archlive bidez (Archa banaketa duen sistema behar da)

    Ezarri archiso

    pacman -S archiso

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

    Gehitu biltegia pacman.conf-era:

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

    Pacman.conf-en jatorrizko nukleoa alde batera uzten dugu:

    IgnorePkg   = linux linux-headers
    

    Gehitu beharrezko paketeak, amaieran linux-mbp kernel eta linux-mbp-headers gehitu

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

    Scripta modu interaktiboan lan egiteko aldatzen dugu (ordeztu pacstrap -C pacstrap -i -C-rekin):

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

    Irudi bat osatzea:

    sudo ./build.sh -v

    Sakatu Y ez ikusitako paketeak saltatzeko, eta idatzi iso irudia USB flash unitatean:

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

4. Lehenengo abioa

Berrabiarazi flash drive eta teklatua sartuta. Sakatu aukerak sagarra agertzen denean, hautatu EFI BOOT.

Ondoren, "e" tekla sakatu eta komando lerroaren amaieran sartu behar duzu module_blacklist=trumoia. Hau egiten ez bada, baliteke sistema ez abiarazi eta Thunderbolt ICM errore bat agertuko da.

fdisk/cfdisk erabiliz gure partizioa aurkitzen dugu (niretzat nvme0n1p4 da), formateatu eta artxiboa instalatu. Erabili dezakezu argibide ofizialak edo alboan.

Ez gara abiarazteko partizioa sortzen ari; abio-kargatzailea idatziko dugu /dev/nvme0n1p1
/mnt-en ingurunea guztiz osatu ondoren eta arch-chroot-era pasatu aurretik, idatzi:

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

Gehitu /etc/pacman.conf-en:


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

Instalatu nukleoa:


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

Thunderbolt eta applesmc erregistratzen ditugu /etc/modprobe.d/blacklist.conf-en

blacklist thunderbolt
blacklist applesmc

Teklatua, ukipen-barra, etab

Instalatu yay:


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

Ukipen-barrak funtziona dezan moduluak instalatzea:


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

Gehitu moduluak abiarazteko: /etc/modules-load.d/apple.conf

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

Teklaturako nukleoaren moduluak instalatzea. Biltegian urteko1 prest egindako pakete bat dago, deitzen da apple-bce-dkms-git. Instalatzeko, idatzi kontsolan:

pacman -S apple-bce-dkms-git

Kasu honetan, nukleoaren modulua deituko da sagar-bce. Automuntatzearen kasuan, deitzen zaio Ka. Horren arabera, modulu bat mkinicpio.conf fitxategiko MODULUAK atalean erregistratu nahi baduzu, ez ahaztu zein modulu instalatu duzun.

Eskuzko muntaia:


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

Gehitu bce edo apple-bce modulua abiarazteko: /etc/modules-load.d/bce.conf

bce

Fn botoiak lehenespenez erabili nahi badituzu, idatzi /etc/modprobe.d/apple-tb.conf fitxategian:

options apple-ib-tb fnmode=2

Nukleoa eta initramfs eguneratzea.


mkinitcpio -p linux-mbp

Instalatu iwd:

sudo pacman -S networkmanager iwd

5. Kargagailua

Pakete nagusi guztiak chroot barruan instalatuta daudenean, abio-kargatzailea instalatzen has zaitezke.

Ezin izan dut lanera eraman. Grub-ek kanpoko USB disko batetik abiarazten du, baina nvme-n erregistratzen saiatzen zarenean

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

sistema nukleoaren izuan sartu zen, eta aukeren bidez elementu berri bat berrabiarazi ondoren ez zen agertu. Ez nuen arazo honi irtenbide argirik aurkitu eta, horregatik, systemd-boot erabiliz abiaraztea inplementatzen saiatzea erabaki nuen.

  1. korrika
    bootctl --path=/boot install

    eta kernel izuan sartzen gara. Itzali MacBook, piztu berriro, egin klik aukerak (ez itzali USB-C hub-a teklatuarekin)

  2. Kanpoko gailuaz gain EFI BOOT sarrera berri bat agertu dela egiaztatzen dugu
  3. Kanpoko USB unitate batetik abiaraztea hautatzen dugu, lehen instalazioan bezala (ez ahaztu module_blacklist=thunderbolt zehaztea)
  4. Gure diskoa muntatzen dugu eta arch-chroot bidez ingurunera sartzen gara


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

Teklatuak sistema guztiz kargatu arte funtzionatzea beharrezkoa bada (beharrezkoa da luks/dm-crypt enkriptatzea erabiltzean), idatzi /etc/mkinicpio.conf fitxategian MODULUAK atalean:

MODULES=(ext4 applespi intel_lpss_pci spi_pxa2xx_platform bce)

Nukleoa eta initramfs eguneratzea.


mkinicpio -p linux-mbp

systemd-boot konfiguratzen

/boot/loader/loader.conf fitxategia editatzen dugu, barruan dagoen guztia ezabatzen dugu eta honako hau gehitzen dugu:

default arch
timeout 5
editor 1

Joan /boot/loader/entries karpetara, sortu arch.conf fitxategia eta idatzi:

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

Luks eta lvm erabiltzen badituzu, orduan

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

Berrabiarazi MacOS-en.

6. Wi-Fi konfigurazioa

Azkenean, MacOS-ek wi-fi egokigailuaren firmware fitxategiak gordetzen ditu karpetan /usr/share/firmware/wifi , eta hortik atera ditzakezu blob moduan eta brcmfmac kernel modulura elikatu. Zure egokitzaileak zein fitxategi erabiltzen dituen jakiteko, ireki terminal bat MacOS-en eta idatzi:

ioreg -l | grep C-4364

Zerrenda luzea jasotzen dugu. Ataleko fitxategiak baino ez ditugu behar EskatutakoFitxategiak:

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

Zure kasuan, fitxategien izenak desberdinak izan daitezke. Kopiatu /usr/share/firmware/wifi karpetatik flash unitatera eta aldatu izena honela:

    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>

Kasu honetan, azken testu-fitxategiak modelo-izenak ditu; zure modeloa macbookpro15,2 ez bada, fitxategi hau izena aldatu behar duzu zure MacBook modeloaren arabera.

Berrabiarazi Arch-en.

Kopiatu fitxategiak flash unitatetik /lib/firmware/brcm/ karpetara


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/

Moduluaren funtzionaltasuna egiaztatzea:


rmmod brcmfmac
modprobe brcmfmac

Sareko interfazea ifconfig/ip bidez agertzen dela ziurtatzen dugu.
WiFi bidez konfiguratzea iwctl

Arreta. Netctl, nmcli, etab. Interfazeak ez du funtzionatzen, iwd bidez bakarrik.

NetworkManager iwd erabiltzera behartzen dugu. Horretarako, sortu /etc/NetworkManager/NetworkManager.conf fitxategia eta idatzi:

[device]
wifi.backend=iwd

Hasi Network Manager zerbitzua


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

7. Soinua

Soinuak funtziona dezan, pulseaudio instalatu behar duzu:


sudo pacman -S pulseaudio

Deskargatu hiru fitxategi:

Mugi ditzagun:

    /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. Eten/Berrekin

Une honetan 16.10.2019 soinua edo eten/berreki aukeratu behar duzu. bce moduluaren egileak funtzionaltasuna osatzeko zain gaude.

Susped/berrerekin laguntzarekin modulu bat eraikitzeko, honako hau egin behar duzu:


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

Anuali1 biltegitik prest egindako apple-bce modulua instalatu baduzu, lehenik eta behin kendu beharko duzu eta ondoren bakarrik muntatu eta instalatu bce modulua eseki moduaren euskarriarekin.

Gainera, applesmc modulua zerrenda beltzean gehitu behar duzu (hau lehenago egin ez baduzu) eta ziurtatu amaierako aukeren lerroko /boot/loader/entries/arch.conf-en parametroa gehitzen dela. pcie_ports=konpat.

Gaur egun, ukipen-barrako kontrolatzaileak huts egiten du eteteko moduan sartzean, eta thunderbolt kontrolatzaileak batzuetan sistema izozten du 30 segundo baino gehiagoz, eta zenbait minutuz berriro hasten denean. Hau konpondu daiteke modulu problematikoak automatikoki deskargatuz.

Sortu gidoia /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

Egin exekutagarria:

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

Hori da guztia oraingoz. Emaitza guztiz funtzionagarria den sistema bat da, suspentsioa/berrekustea duten Γ±abardura batzuk izan ezik. Ez zen hutsegite edo kernel izurik ikusi funtzionamendu-egun batzuetan. Etorkizun hurbil batean bce moduluaren egileak amaitzea espero dut, eta suspentsio/represa eta soinurako laguntza osoa lortuko dugula.

Iturria: www.habr.com

Gehitu iruzkin berria