Membuat MacBook Pro 2018 T2 berfungsi dengan ArchLinux (dualboot)

Ada cukup banyak hype tentang fakta bahwa chip T2 baru akan membuat instalasi Linux di MacBook 2018 baru dengan touchbar tidak mungkin dilakukan. Waktu berlalu, dan pada akhir tahun 2019, pengembang pihak ketiga menerapkan sejumlah driver dan patch kernel untuk interaksi dengan chip T2. Driver utama untuk model MacBook 2018 dan yang lebih baru mengimplementasikan operasi VHCI (operasi sentuh/keyboard/dll.), serta pengoperasian suara.

Proyek mbp2018-jembatan-drv dibagi menjadi 3 komponen utama:

  • BCE (Buffer Copy Engine) - menetapkan saluran komunikasi utama dengan T2. VHCI dan Audio memerlukan komponen ini.
  • VHCI adalah Pengontrol Host Virtual USB; keyboard, mouse, dan komponen sistem lainnya disediakan oleh komponen ini (driver lain menggunakan pengontrol host ini untuk menyediakan lebih banyak fungsionalitas.
  • Audio - driver untuk antarmuka audio T2, saat ini hanya mendukung output audio melalui speaker internal MacBook


Proyek kedua disebut macbook12-spi-driver, dan mengimplementasikan kemampuan untuk mengoperasikan driver input untuk keyboard, trackpad SPI, dan touchbar untuk MacBook Pro Akhir 2016 dan lebih baru. Beberapa driver keyboard/trackpad kini disertakan dalam kernel, dimulai dengan versi 5.3.

Dukungan untuk perangkat seperti wi-fi, touchpad, dll juga diimplementasikan menggunakan patch kernel. Versi kernel saat ini 5.3.5-1

Apa yang berhasil saat ini

  1. NVMe
  2. Keyboard
  3. USB-C (Thunderbolt belum diuji; ketika modul dimuat secara otomatis, sistem akan terhenti)
  4. Touchbar (dengan kemampuan untuk menyalakan tombol Fn, lampu latar, ESC, dll.)
  5. Suara (hanya speaker internal)
  6. Modul Wi-Fi (melalui brcmfmac dan hanya melalui iw)
  7. DisplayPort melalui USB-C
  8. Sensor
  9. Tangguhkan/Lanjutkan (sebagian)
  10. dll ..

Tutorial ini berlaku untuk macbookpro15,1 dan macbookpro15,2. Artikel ini diambil sebagai dasar dari Github dalam bahasa Inggris. karenanya. Tidak semua yang ada di artikel ini berhasil, jadi saya harus mencari solusinya sendiri.

Apa yang Anda perlukan untuk instalasi

  • Adaptor docking USB-C ke USB (setidaknya tiga input USB untuk menyambungkan mouse, keyboard, modem USB, atau telepon dalam mode tethering). Ini hanya diperlukan pada tahap pertama instalasi
  • papan ketik USB
  • Flashdisk USB/USB-C minimal 4GB

1. Nonaktifkan larangan booting dari media eksternal

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

2. Alokasikan ruang kosong menggunakan Disk Utility

Untuk kenyamanan, saya segera mengalokasikan 30GB ke disk, memformatnya dalam exfat di Disk Utility itu sendiri. Mempartisi Utilitas Disk Disk Fisik.

3. Buat gambar ISO

Pilihan:

  1. Anda dapat menggunakan cara sederhana dan mengunduh image yang sudah jadi dengan kernel 5.3.5-1 dan patch dari aunali1 tautan ke gambar yang sudah jadi
  2. Buat gambar sendiri melalui archlive (diperlukan sistem dengan distribusi Archa)

    Mengatur 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 asli di pacman.conf:

    IgnorePkg   = linux linux-headers
    

    Tambahkan paket yang diperlukan, pada akhirnya tambahkan kernel linux-mbp dan header linux-mbp

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

    Kami mengubah skrip agar berfungsi dalam mode 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 gambar:

    sudo ./build.sh -v

    Tekan Y untuk melewati paket yang diabaikan, lalu tulis image iso ke usb flash drive:

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

4. Booting pertama

Reboot dengan flash drive dan keyboard dimasukkan. Tekan opsi saat apel muncul, pilih EFI BOOT.

Selanjutnya, Anda perlu menekan tombol β€œe” dan enter di akhir baris perintah module_blacklist=petir. Jika ini tidak dilakukan, sistem mungkin tidak bisa boot dan Kesalahan ICM Thunderbolt akan muncul.

Menggunakan fdisk/cfdisk kami menemukan partisi kami (bagi saya ini nvme0n1p4), memformatnya dan menginstal arsip. Anda dapat gunakan instruksi resmi ΠΈΠ»ΠΈ ke samping.

Kami tidak membuat partisi boot; kami akan menulis bootloader /dev/nvme0n1p1
Setelah lingkungan di /mnt terbentuk sempurna dan sebelum berpindah ke arch-chroot, tulis:

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

Tambahkan ke /etc/pacman.conf:


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

Instal kernelnya:


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

Kami mendaftarkan thunderbolt dan applemc di /etc/modprobe.d/blacklist.conf

blacklist thunderbolt
blacklist applesmc

Keyboard, bilah sentuh, dll

Instal ya:


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

Memasang modul agar touchbar berfungsi:


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

Tambahkan modul ke startup: /etc/modules-load.d/apple.conf

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

Menginstal modul kernel untuk keyboard. Di repositori tahunan1 ada paket yang sudah jadi, namanya apple-bce-dkms-git. Untuk menginstalnya, tulis di konsol:

pacman -S apple-bce-dkms-git

Dalam hal ini, modul kernel akan dipanggil apel-SM. Dalam hal perakitan sendiri, ini disebut sM. Oleh karena itu, jika Anda ingin mendaftarkan modul di bagian MODULES pada file mkinicpio.conf, jangan lupa modul mana yang Anda instal.

Perakitan tangan:


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 ke startup: /etc/modules-load.d/bce.conf

bce

Jika Anda ingin menggunakan tombol Fn secara default, tulis di file /etc/modprobe.d/apple-tb.conf:

options apple-ib-tb fnmode=2

Memperbarui kernel dan initramfs.


mkinitcpio -p linux-mbp

Instal iwd:

sudo pacman -S networkmanager iwd

5. Pemuat

Setelah semua paket utama terinstal di dalam chroot, Anda dapat mulai menginstal bootloader.

Saya belum bisa mendapatkan grub untuk bekerja. Grub melakukan booting dari drive USB eksternal, tetapi ketika Anda mencoba mendaftarkannya di nvme via

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

sistem menjadi panik kernel, dan setelah reboot item baru melalui opsi tidak muncul. Saya tidak menemukan solusi yang jelas untuk masalah ini dan oleh karena itu memutuskan untuk mencoba mengimplementasikan booting menggunakan systemd-boot.

  1. Meluncurkan
    bootctl --path=/boot install

    dan kita menjadi panik kernel. Matikan MacBook, hidupkan kembali, klik options (jangan matikan hub USB-C dengan keyboard)

  2. Kami memeriksa apakah entri EFI BOOT baru telah muncul di samping perangkat eksternal
  3. Kami memilih untuk boot dari drive USB eksternal, seperti pada instalasi pertama (jangan lupa tentukan module_blacklist=thunderbolt)
  4. Kami memasang disk kami dan masuk ke lingkungan melalui arch-chroot


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

Jika keyboard perlu berfungsi hingga sistem terisi penuh (ini diperlukan saat menggunakan enkripsi luks/dm-crypt), tuliskan di file /etc/mkinicpio.conf di bagian MODUL:

MODULES=(ext4 applespi intel_lpss_pci spi_pxa2xx_platform bce)

Memperbarui kernel dan initramfs.


mkinicpio -p linux-mbp

Menyiapkan boot sistemd

Kami mengedit file /boot/loader/loader.conf, menghapus semua yang ada di dalamnya, dan menambahkan yang berikut:

default arch
timeout 5
editor 1

Buka folder /boot/loader/entries, buat file 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

Mulai ulang ke MacOS.

6. Pengaturan Wi-Fi

Ternyata pada akhirnya, MacOS menyimpan file firmware untuk adaptor wi-fi di dalam folder /usr/share/firmware/wifi , dan Anda dapat mengambilnya dari sana dalam bentuk blob dan memasukkannya ke modul kernel brcmfmac. Untuk mengetahui file mana yang digunakan adaptor Anda, buka terminal di MacOS dan tulis:

ioreg -l | grep C-4364

Kami mendapat daftar panjang. Kami hanya membutuhkan file dari bagian tersebut File yang Diminta:

"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 kasus Anda, nama file mungkin berbeda. Salin dari folder /usr/share/firmware/wifi ke flash drive dan ganti namanya sebagai 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 hal ini, file teks terakhir berisi nama model; jika model Anda bukan macbookpro15,2, maka Anda perlu mengganti nama file ini sesuai dengan model MacBook Anda.

Nyalakan ulang ke Arch.

Salin file dari flash drive 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/

Memeriksa fungsionalitas modul:


rmmod brcmfmac
modprobe brcmfmac

Kami memastikan bahwa antarmuka jaringan muncul melalui ifconfig/ip.
Menyiapkan wifi melalui iwctl

Perhatian. Melalui netctl, nmcli, dll. Antarmuka tidak berfungsi, hanya melalui iwd.

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

[device]
wifi.backend=iwd

Mulai layanan NetworkManager


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

7. Suara

Agar suara berfungsi, Anda perlu menginstal pulseaudio:


sudo pacman -S pulseaudio

Unduh tiga file:

Mari kita pindahkan:

    /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. Tangguhkan/Lanjutkan

Saat ini 16.10.2019 Anda harus memilih suara atau menangguhkan/melanjutkan. Kami menunggu pembuat modul bce menyelesaikan fungsinya.

Untuk membangun modul dengan dukungan yang ditangguhkan/dilanjutkan, Anda harus melakukan hal 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 menginstal modul apple-bce yang sudah jadi dari repositori anuali1, maka Anda harus menghapusnya terlebih dahulu dan baru kemudian merakit dan menginstal modul bce dengan dukungan mode penangguhan.

Selain itu, Anda perlu menambahkan modul applemc ke daftar hitam (jika Anda belum pernah melakukan ini sebelumnya) dan pastikan bahwa di /boot/loader/entries/arch.conf di baris opsi di akhir parameter ditambahkan pcie_ports=kompatibel.

Saat ini, driver touchbar mogok saat memasuki mode penangguhan, dan driver thunderbolt terkadang membekukan sistem selama lebih dari 30 detik, dan selama beberapa menit saat melanjutkan. Hal ini dapat diperbaiki dengan membongkar modul yang bermasalah secara otomatis.

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 itu dapat dieksekusi:

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

Itu saja untuk saat ini. Hasilnya adalah sistem yang sepenuhnya bisa diterapkan, dengan pengecualian beberapa nuansa dengan penangguhan/lanjutan. Tidak ada kerusakan atau kepanikan kernel yang diamati selama beberapa hari waktu aktif. Saya berharap dalam waktu dekat pembuat modul bce dapat menyelesaikannya, dan kami akan mendapatkan dukungan penuh untuk suspend/resume dan sound.

Sumber: www.habr.com

Tambah komentar