Farante MacBook Pro 2018 T2 funkcii kun ArchLinux (duobla lanĉo)

Estis sufiĉe da furoraĵo pri la fakto, ke la nova T2-peceto ebligos instali Linukson sur la novaj 2018 MacBooks kun tuŝbreto. La tempo pasis, kaj fine de 2019, triaj programistoj efektivigis kelkajn ŝoforojn kaj kernajn diakilojn por interagado kun la blato T2. La ĉefa pelilo por MacBook-modeloj 2018 kaj pli novaj efektivigas VHCI-operacion (tuŝo/klavaro/ktp. operacio), same kiel sonan operacion.

La projekto mbp2018-bridge-drv dividita en 3 ĉefaj komponantoj:

  • BCE (Buffer Copy Engine) - establas la ĉefan komunikadkanalon kun T2. VHCI kaj Audio postulas ĉi tiun komponanton.
  • VHCI estas USB Virtual Host Controller; la klavaro, muso kaj aliaj sistemkomponentoj estas disponigitaj per tiu komponento (aliaj ŝoforoj uzas ĉi tiun gastigan regilon por disponigi pli da funkcieco.
  • Aŭdio - pelilo por la soninterfaco T2, nuntempe nur subtenas soneligon per la enkonstruitaj laŭtparoliloj de la MacBook


La dua projekto nomiĝas macbook12-spi-driver, kaj ĝi efektivigas la kapablon funkciigi enigŝoforon por la klavaro, SPI-trakpad kaj tuŝbreto por MacBook Pro Late 2016 kaj poste. Kelkaj klavaraj/trakpad-ŝoforoj nun estas inkluditaj en la kerno, komencante kun versio 5.3.

Subteno por aparatoj kiel ekzemple wi-fi, tuŝpadrono, ktp ankaŭ estis efektivigita uzante kernpecetojn. Nuna kernversio 5.3.5-1

Kio funkcias nuntempe

  1. NVMe
  2. Klavaro
  3. USB-C (Thunderbolt ne estis provita; kiam la modulo estas ŝarĝita aŭtomate, ĝi frostas la sistemon)
  4. Tuŝbreto (kun la kapablo ŝalti la Fn-klavojn, fonlumon, ESC, ktp.)
  5. Sono (nur enkonstruitaj laŭtparoliloj)
  6. Wifi-modulo (per brcmfmac kaj nur per iw)
  7. DisplayPort tra USB-C
  8. Sensiloj
  9. Nuligi/Rekomenci (parte)
  10. ktp.

Ĉi tiu lernilo aplikeblas por macbookpro15,1 kaj macbookpro15,2. La artikolo estis prenita kiel bazo de Github en la angla. de ĉi tie. Ne ĉio en ĉi tiu artikolo funkciis, do mi devis mem trovi solvon.

Kion vi bezonas instali

  • USB-C aldokaĵadaptilo al USB (almenaŭ tri USB-enigaĵoj por konekti muson, klavaron, USB-modemon aŭ telefonon en tethering-reĝimo). Ĉi tio estas necesa nur dum la unuaj etapoj de instalado
  • USB-klavaro
  • USB/USB-C flash drive minimume 4GB

1. Malebligu la malpermeson de ekfunkciigo de eksteraj amaskomunikiloj

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

2. Asignu liberan spacon per Disk Utilo

Por komforto, mi tuj asignis 30GB al la disko, formatante ĝin en exfat en Disk Utility mem. Dispartigo de Fizika Diska Disko Utilo.

3. Kreu ISO-bildon

Opcioj:

  1. Vi povas iri la simplan vojon kaj elŝuti pretan bildon kun kerno 5.3.5-1 kaj flikaĵoj de aunali1 ligo al la finita bildo
  2. Kreu bildon mem per archlive (sistemo kun Archa-distribuo estas bezonata)

    Instali archiso

    pacman -S archiso

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

    Aldonu la deponejon al pacman.conf:

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

    Ni ignoras la originan kernon en pacman.conf:

    IgnorePkg   = linux linux-headers
    

    Aldonu la necesajn pakaĵojn, fine aldonu la linux-mbp-kernon kaj linux-mbp-headers

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

    Ni ŝanĝas la skripton por labori en interaga reĝimo (anstataŭigi pacstrap -C per 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!"
    }

    Formado de bildo:

    sudo ./build.sh -v

    Premu Y por preterlasi ignoritajn pakaĵojn, tiam skribu la iso-bildon al la usb-memoro:

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

4. Unua ekkuro

Rekomencu kun la poŝmemoro kaj klavaro enmetitaj. Premu opciojn kiam la pomo aperas, elektu EFI BOOT.

Poste, vi devas premi la klavon "e" kaj eniri ĉe la fino de la komandlinio module_blacklist=tondro. Se ĉi tio ne estas farita, la sistemo eble ne ekfunkciigos kaj aperos Thunderbolt ICM Eraro.

Uzante fdisk/cfdisk ni trovas nian diskparton (por mi ĝi estas nvme0n1p4), formatas ĝin kaj instalas la arkivon. Vi povas uzi oficialaj instrukciojflanken.

Ni ne kreas ekŝargilon; ni skribos la ekŝargilon enen /dev/nvme0n1p1
Post kiam la medio en /mnt estas tute formita kaj antaŭ ol moviĝi al arch-chroot, skribu:

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

Aldonu al /etc/pacman.conf:


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

Instalu la kernon:


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

Ni registras thunderbolt kaj applesmc en /etc/modprobe.d/blacklist.conf

blacklist thunderbolt
blacklist applesmc

Klavaro, tuŝbreto, ktp

Instalu ja:


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

Instalante modulojn por ke la tuŝbreto funkciu:


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

Aldonu modulojn al lanĉo: /etc/modules-load.d/apple.conf

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

Instalado de kernaj moduloj por la klavaro. En la deponejo anuali1 estas preta pako, ĝi nomiĝas apple-bce-dkms-git. Por instali ĝin, skribu en la konzolo:

pacman -S apple-bce-dkms-git

En ĉi tiu kazo, la kernomodulo estos vokita pomo-bce. En la kazo de mem-muntado, ĝi nomiĝas ecb. Sekve, se vi volas registri modulon en la sekcio MODULOJ de la dosiero mkinicpio.conf, tiam ne forgesu, kiun modulon vi instalis.

Mana muntado:


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

Aldonu la modulon bce aŭ apple-bce al lanĉo: /etc/modules-load.d/bce.conf

bce

Se vi volas uzi la Fn-butonojn defaŭlte, tiam skribu en la dosieron /etc/modprobe.d/apple-tb.conf:

options apple-ib-tb fnmode=2

Ĝisdatigante la kernon kaj initramfs.


mkinitcpio -p linux-mbp

Instalu iwd:

sudo pacman -S networkmanager iwd

5. Ŝargilo

Post kiam ĉiuj ĉefaj pakaĵoj estas instalitaj ene de la chroot, vi povas komenci instali la ekŝargilon.

Mi ne povis igi larvon labori. Grub startas de ekstera USB-disko, sed kiam vi provas registri ĝin en nvme per

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

la sistemo ekpaniko de la kerno, kaj post rekomenco nova ero tra opcioj ne aperis. Mi ne trovis klaran solvon al ĉi tiu problemo kaj tial decidis provi efektivigi lanĉadon per systemd-boot.

  1. Lanĉo
    bootctl --path=/boot install

    kaj ni iras en kernan panikon. Malŝaltu la MacBook, ŝaltu ĝin denove, alklaku opciojn (ne malŝaltu la USB-C nabon per klavaro)

  2. Ni kontrolas, ke nova EFI BOOT-eniro aperis krom la ekstera aparato
  3. Ni elektas lanĉi de ekstera USB-disko, kiel dum la unua instalado (ne forgesu specifi module_blacklist=thunderbolt)
  4. Ni muntas nian diskon kaj iras en la medion per arch-chroot


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

Se necesas, ke la klavaro funkciu ĝis la sistemo estas plene ŝargita (ĉi tio estas necesa kiam vi uzas luks/dm-crypt-ĉifradon), tiam skribu ĝin en la dosieron /etc/mkinicpio.conf en la sekcio MODULOJ:

MODULES=(ext4 applespi intel_lpss_pci spi_pxa2xx_platform bce)

Ĝisdatigante la kernon kaj initramfs.


mkinicpio -p linux-mbp

Agordante systemd-boot

Ni redaktas la dosieron /boot/loader/loader.conf, forigas ĉion ene, kaj aldonas la jenon:

default arch
timeout 5
editor 1

Iru al la dosierujo /boot/loader/entry, kreu la arch.conf-dosieron kaj skribu:

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

Se vi uzis luks kaj lvm, tiam

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

Rekomencu en MacOS.

6. Wi-Fi agordo

Kiel finfine, MacOS konservas la firmvardosierojn por la wi-fi-adaptilo en la dosierujo /usr/share/firmware/wifi , kaj vi povas preni ilin de tie en la formo de blobs kaj nutri ilin al la brcmfmac kernomodulo. Por ekscii kiujn dosierojn uzas via adaptilo, malfermu terminalon en MacOS kaj skribu:

ioreg -l | grep C-4364

Ni ricevas longan liston. Ni bezonas nur dosierojn de la sekcio Demanditaj Dosieroj:

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

En via kazo, la dosiernomoj povas malsami. Kopiu ilin el la dosierujo /usr/share/firmware/wifi al la poŝmemoro kaj renomu ilin jene:

    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>

En ĉi tiu kazo, la lasta tekstdosiero enhavas la modelnomojn; se via modelo ne estas macbookpro15,2, tiam vi devas renomi ĉi tiun dosieron laŭ via MacBook-modelo.

Rekomencu en Arch.

Kopiu la dosierojn de la poŝmemoro al la dosierujo /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/

Kontrolante la funkciojn de la modulo:


rmmod brcmfmac
modprobe brcmfmac

Ni certigas, ke la reto-interfaco aperas per ifconfig/ip.
Agordi wifi per iwctl

Atentu. Per netctl, nmcli, ktp. La interfaco ne funkcias, nur per iwd.

Ni devigas NetworkManager uzi iwd. Por fari tion, kreu la dosieron /etc/NetworkManager/NetworkManager.conf kaj skribu:

[device]
wifi.backend=iwd

Komencu la servon NetworkManager


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

7. Sono

Por ke la sono funkciu, vi devas instali pulseaudion:


sudo pacman -S pulseaudio

Elŝutu tri dosierojn:

Ni movu ilin:

    /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. Ĉesigi/Rekomenci

En ĉi tiu momento 16.10.2019 vi devas elekti aŭ soni aŭ suspendi/rekomenci. Ni atendas, ke la aŭtoro de la bce-modulo kompletigos la funkcion.

Por konstrui modulon kun suspektita/rekomenca subteno, vi devas fari la jenon:


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

Se vi instalis la pretan apple-bce-modulon el la deponejo anuali1, tiam vi unue devas forigi ĝin kaj nur poste kunmeti kaj instali la bce-modulon kun suspenda reĝimo-subteno.

Ankaŭ, vi devas aldoni la applesmc-modulon al la nigra listo (se vi ne faris tion antaŭe) kaj certigi, ke en /boot/loader/entries/arch.conf en la opciolinio fine la parametro estas aldonita. pcie_ports=kompat.

Nuntempe, la tuŝbreta ŝoforo kraŝas enirante suspendan reĝimon, kaj la fulmotondro ŝoforo foje frostigas la sistemon dum pli ol 30 sekundoj, kaj dum pluraj minutoj kiam rekomencas. Ĉi tio povas esti riparita aŭtomate malŝarĝante problemajn modulojn.

Kreu skripton /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

Faru ĝin efektivigebla:

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

Tio estas ĉio por nun. La rezulto estas tute realigebla sistemo, escepte de kelkaj nuancoj kun suspendo/rekomenco. Neniuj kraŝoj aŭ kernaj panikoj estis observitaj dum pluraj tagoj da funkciado. Mi esperas, ke baldaŭ la aŭtoro de la bce-modulo finos ĝin, kaj ni ricevos plenan subtenon por suspendo/rekomenco kaj sonado.

fonto: www.habr.com

Aldoni komenton