Menjadikan MacBook Pro 2018 T2 berfungsi dengan ArchLinux (dualboot)

Terdapat sedikit gembar-gembur mengenai fakta bahawa cip T2 baharu akan menjadikannya mustahil untuk memasang Linux pada MacBook 2018 baharu dengan bar sentuh. Masa berlalu, dan pada penghujung tahun 2019, pembangun pihak ketiga melaksanakan beberapa pemacu dan patch kernel untuk interaksi dengan cip T2. Pemacu utama untuk model MacBook 2018 dan lebih baharu melaksanakan operasi VHCI (operasi sentuh/papan kekunci/dsb), serta operasi bunyi.

Projek mbp2018-bridge-drv dibahagikan kepada 3 komponen utama:

  • BCE (Buffer Copy Engine) - mewujudkan saluran komunikasi utama dengan T2. VHCI dan Audio memerlukan komponen ini.
  • VHCI ialah Pengawal Hos Maya USB; papan kekunci, tetikus dan komponen sistem lain disediakan oleh komponen ini (pemacu lain menggunakan pengawal hos ini untuk menyediakan lebih banyak fungsi.
  • Audio - pemacu untuk antara muka audio T2, pada masa ini hanya menyokong output audio melalui pembesar suara terbina dalam MacBook


Projek kedua dipanggil macbook12-spi-driver, dan ia melaksanakan keupayaan untuk mengendalikan pemacu input untuk papan kekunci, pad jejak SPI dan bar sentuh untuk MacBook Pro Lewat 2016 dan kemudian. Beberapa pemacu papan kekunci/pad jejak kini disertakan dalam kernel, bermula dengan versi 5.3.

Sokongan untuk peranti seperti wi-fi, pad sentuh, dan lain-lain juga dilaksanakan menggunakan tampalan kernel. Versi kernel semasa 5.3.5-1

Apa yang berfungsi pada masa ini

  1. NVMe
  2. papan kekunci
  3. USB-C (Thunderbolt belum diuji; apabila modul dimuatkan secara automatik, ia membekukan sistem)
  4. Bar sentuh (dengan keupayaan untuk menghidupkan kekunci Fn, lampu latar, ESC, dll.)
  5. Bunyi (pembesar suara terbina dalam sahaja)
  6. Modul Wi-Fi (melalui brcmfmac dan hanya melalui iw)
  7. DisplayPort melalui USB-C
  8. Sensor
  9. Gantung/Sambung semula (sebahagian)
  10. dan lain-lain ..

Tutorial ini boleh digunakan untuk macbookpro15,1 dan macbookpro15,2. Artikel itu diambil sebagai asas daripada Github dalam bahasa Inggeris. oleh itu. Tidak semua dalam artikel ini berfungsi, jadi saya terpaksa mencari penyelesaian sendiri.

Apa yang anda perlu pasang

  • Penyesuai dok USB-C ke USB (sekurang-kurangnya tiga input USB untuk menyambungkan tetikus, papan kekunci, modem USB atau telefon dalam mod penambatan). Ini hanya perlu semasa peringkat pertama pemasangan
  • Papan kekunci USB
  • Pemacu kilat USB/USB-C minimum 4GB

1. Lumpuhkan larangan but daripada media luaran

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

2. Peruntukkan ruang kosong menggunakan Utiliti Cakera

Untuk kemudahan, saya segera memperuntukkan 30GB ke cakera, memformatnya dalam exfat dalam Utiliti Cakera itu sendiri. Membahagikan Utiliti Cakera Fizikal.

3. Buat imej ISO

Pilihan:

  1. Anda boleh pergi ke laluan mudah dan memuat turun imej siap pakai dengan kernel 5.3.5-1 dan tampalan daripada aunali1 pautan ke imej yang telah siap
  2. Cipta imej sendiri melalui archlive (sistem dengan pengedaran Archa diperlukan)

    Tetapkan archiso

    pacman -S archiso

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

    Tambahkan repositori ke pacman.conf:

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

    Kami mengabaikan kernel asal dalam pacman.conf:

    IgnorePkg   = linux linux-headers
    

    Tambah pakej yang diperlukan, pada akhirnya tambahkan kernel linux-mbp dan linux-mbp-header

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

    Kami menukar skrip untuk berfungsi dalam mod interaktif (ganti pacstrap -C dengan 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!"
    }

    Membentuk imej:

    sudo ./build.sh -v

    Tekan Y untuk melangkau pakej yang diabaikan, kemudian tulis imej iso ke pemacu denyar usb:

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

4. But pertama

But semula dengan pemacu kilat dan papan kekunci dimasukkan. Tekan pilihan apabila epal muncul, pilih EFI BOOT.

Seterusnya, anda perlu menekan kekunci "e" dan masukkan pada penghujung baris arahan module_blacklist=thunderbolt. Jika ini tidak dilakukan, sistem mungkin tidak but dan Ralat ICM Thunderbolt akan muncul.

Menggunakan fdisk/cfdisk kami mencari partition kami (bagi saya ia nvme0n1p4), format dan pasang arkib. Anda boleh gunakan arahan rasmi atau sisi.

Kami tidak membuat partition but; kami akan menulis pemuat but masuk /dev/nvme0n1p1
Selepas persekitaran dalam /mnt terbentuk sepenuhnya dan sebelum beralih ke arch-chroot, tulis:

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

Tambahkan pada /etc/pacman.conf:


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

Pasang kernel:


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

Kami mendaftarkan thunderbolt dan applesmc dalam /etc/modprobe.d/blacklist.conf

blacklist thunderbolt
blacklist applesmc

Papan kekunci, bar sentuh, dsb

Pasang yay:


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

Memasang modul untuk bar sentuh berfungsi:


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

Tambahkan modul pada permulaan: /etc/modules-load.d/apple.conf

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

Memasang modul kernel untuk papan kekunci. Dalam repositori anuali1 ada pakej siap, namanya apple-bce-dkms-git. Untuk memasangnya, tulis dalam konsol:

pacman -S apple-bce-dkms-git

Dalam kes ini, modul kernel akan dipanggil epal-bce. Dalam kes perhimpunan sendiri, ia dipanggil bce. Oleh itu, jika anda ingin mendaftar modul dalam bahagian MODUL pada fail mkinicpio.conf, maka jangan lupa modul yang anda pasang.

Pemasangan 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

Tambahkan modul bce atau apple-bce untuk memulakan: /etc/modules-load.d/bce.conf

bce

Jika anda ingin menggunakan butang Fn secara lalai, kemudian tulis dalam fail /etc/modprobe.d/apple-tb.conf:

options apple-ib-tb fnmode=2

Mengemas kini kernel dan initramfs.


mkinitcpio -p linux-mbp

Pasang iwd:

sudo pacman -S networkmanager iwd

5. Pemuat

Setelah semua pakej utama dipasang di dalam chroot, anda boleh mula memasang pemuat but.

Saya tidak dapat mendapatkan grub untuk bekerja. Grub but daripada pemacu USB luaran, tetapi apabila anda cuba mendaftarkannya dalam nvme melalui

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

sistem menjadi panik kernel, dan selepas but semula item baru melalui pilihan tidak muncul. Saya tidak menemui sebarang penyelesaian yang jelas untuk masalah ini dan oleh itu memutuskan untuk cuba melaksanakan boot menggunakan systemd-boot.

  1. Kami melancarkan
    bootctl --path=/boot install

    dan kita menjadi panik kernel. Matikan MacBook, hidupkannya semula, klik pilihan (jangan matikan hab USB-C dengan papan kekunci)

  2. Kami menyemak sama ada kemasukan EFI BOOT baharu telah muncul sebagai tambahan kepada peranti luaran
  3. Kami memilih untuk but dari pemacu USB luaran, seperti semasa pemasangan pertama (jangan lupa untuk menentukan module_blacklist=thunderbolt)
  4. Kami memasang cakera kami dan pergi ke persekitaran melalui arch-chroot


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

Jika papan kekunci perlu berfungsi sehingga sistem dimuatkan sepenuhnya (ini perlu apabila menggunakan penyulitan luks/dm-crypt), kemudian tuliskannya dalam fail /etc/mkinicpio.conf dalam bahagian MODUL:

MODULES=(ext4 applespi intel_lpss_pci spi_pxa2xx_platform bce)

Mengemas kini kernel dan initramfs.


mkinicpio -p linux-mbp

Menyediakan systemd-boot

Kami mengedit fail /boot/loader/loader.conf, padamkan segala-galanya di dalam dan tambah yang berikut:

default arch
timeout 5
editor 1

Pergi ke folder /boot/loader/entry, buat fail arch.conf dan tulis:

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

Jika anda menggunakan luks dan lvm, maka

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

But semula ke dalam MacOS.

6. Persediaan Wi-Fi

Ternyata pada akhirnya, MacOS menyimpan fail perisian tegar untuk penyesuai wi-fi dalam folder /usr/share/firmware/wifi , dan anda boleh membawanya dari sana dalam bentuk gumpalan dan suapkannya ke modul kernel brcmfmac. Untuk mengetahui fail yang digunakan penyesuai anda, buka terminal dalam MacOS dan tulis:

ioreg -l | grep C-4364

Kami mendapat senarai panjang. Kami hanya memerlukan fail dari bahagian tersebut 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>"})

Dalam kes anda, nama fail mungkin berbeza. Salinnya dari folder /usr/share/firmware/wifi ke pemacu denyar dan namakannya seperti berikut:

    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>

Dalam kes ini, fail teks terakhir mengandungi nama model; jika model anda bukan macbookpro15,2, maka anda perlu menamakan semula fail ini mengikut model MacBook anda.

But semula ke dalam Arch.

Salin fail dari pemacu kilat ke folder /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/

Menyemak kefungsian modul:


rmmod brcmfmac
modprobe brcmfmac

Kami memastikan bahawa antara muka rangkaian muncul melalui ifconfig/ip.
Menyediakan wifi melalui iwctl

Perhatian. Melalui netctl, nmcli, dsb. Antara muka tidak berfungsi, hanya melalui iwd.

Kami memaksa NetworkManager menggunakan iwd. Untuk melakukan ini, buat fail /etc/NetworkManager/NetworkManager.conf dan tulis:

[device]
wifi.backend=iwd

Mulakan perkhidmatan NetworkManager


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

7. Bunyi

Agar bunyi berfungsi, anda perlu memasang pulseaudio:


sudo pacman -S pulseaudio

Muat turun tiga fail:

Mari kita gerakkan mereka:

    /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. Gantung/Sambung semula

Pada saat ini 16.10.2019 anda perlu memilih sama ada bunyi atau gantung/sambung semula. Kami sedang menunggu pengarang modul bce untuk melengkapkan fungsi.

Untuk membina modul dengan sokongan yang digantung/sambung semula, anda mesti melakukan perkara berikut:


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

Jika anda memasang modul apple-bce siap sedia daripada repositori anuali1, maka anda mesti mengalih keluarnya dahulu dan kemudian memasang dan memasang modul bce dengan sokongan mod gantung.

Selain itu, anda perlu menambah modul applesmc ke senarai hitam (jika anda belum melakukan ini sebelum ini) dan pastikan bahawa dalam /boot/loader/entry/arch.conf dalam baris pilihan pada penghujung parameter ditambahkan pcie_ports=compat.

Pada masa ini, pemandu bar sentuh ranap apabila memasuki mod gantung, dan pemandu petir kadangkala membekukan sistem selama lebih daripada 30 saat, dan selama beberapa minit apabila menyambung semula. Ini boleh diperbaiki dengan memunggah modul bermasalah secara automatik.

Buat skrip /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

Jadikan ia boleh dilaksanakan:

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

Itu sahaja buat masa ini. Hasilnya ialah sistem yang boleh dilaksanakan sepenuhnya, dengan pengecualian beberapa nuansa dengan penggantungan/sambung semula. Tiada ranap atau panik kernel diperhatikan semasa beberapa hari masa beroperasi. Saya berharap dalam masa terdekat pengarang modul bce akan menyelesaikannya, dan kami akan mendapat sokongan penuh untuk penggantungan/resume dan bunyi.

Sumber: www.habr.com

Tambah komen