MacBook Pro 2018 T2-ni ArchLinux (dualboot) bilan ishlashga aylantirish

Yangi T2 chipi sensorli panelli yangi 2018 MacBook'larga Linuxni o'rnatishni imkonsiz qilishi haqida juda ko'p shov-shuv bo'ldi. Vaqt o'tdi va 2019 yil oxirida uchinchi tomon ishlab chiquvchilari T2 chipi bilan o'zaro ishlash uchun bir qator drayverlar va yadro yamoqlarini joriy qildilar. 2018 va undan keyingi MacBook modellari uchun asosiy drayver VHCI operatsiyasini (sensorli/klaviatura/va hokazo) hamda ovozli ishlashini amalga oshiradi.

Loyiha mbp2018-bridge-drv 3 asosiy komponentga bo'lingan:

  • BCE (Buffer Copy Engine) - T2 bilan asosiy aloqa kanalini o'rnatadi. VHCI va Audio ushbu komponentni talab qiladi.
  • VHCI - bu USB virtual xost boshqaruvchisi; klaviatura, sichqoncha va boshqa tizim komponentlari ushbu komponent tomonidan ta'minlangan (boshqa drayverlar ko'proq funksionallikni ta'minlash uchun ushbu xost boshqaruvchisidan foydalanadilar.
  • Audio - T2 audio interfeysi uchun drayver, hozirda faqat MacBook-ning o'rnatilgan dinamiklari orqali audio chiqishini qo'llab-quvvatlaydi


Ikkinchi loyiha chaqiriladi macbook12-spi-drayveri, va u 2016-yil oxiri va undan keyingi MacBook Pro-lar uchun klaviatura, SPI trek paneli va sensorli panel uchun kiritish drayverini ishlatish qobiliyatini amalga oshiradi. Ba'zi klaviatura/trekpad drayverlari endi 5.3 versiyasidan boshlab yadroga kiritilgan.

Wi-Fi, sensorli panel va boshqalar kabi qurilmalarni qo'llab-quvvatlash yadro yamoqlari yordamida ham amalga oshirildi. Joriy yadro versiyasi 5.3.5-1

Ayni paytda nima ishlayapti

  1. NVMe
  2. Klaviatura
  3. USB-C (Thunderbolt sinovdan o'tkazilmagan; modul avtomatik ravishda yuklanganda, u tizimni muzlatib qo'yadi)
  4. Sensor paneli (Fn tugmalari, orqa yorug'lik, ESC va boshqalarni yoqish imkoniyati bilan)
  5. Ovoz (faqat o'rnatilgan dinamiklar)
  6. Wi-Fi moduli (brcmfmac orqali va faqat iw orqali)
  7. USB-C orqali DisplayPort
  8. Sensorlar
  9. To'xtatib turish/davom etish (qisman)
  10. va boshqalar.

Ushbu qo'llanma macbookpro15,1 va macbookpro15,2 uchun amal qiladi. Maqola ingliz tilidagi Github-dan asos qilib olingan. shu yerda. Ushbu maqolada hamma narsa ishlamadi, shuning uchun men o'zim yechim topishim kerak edi.

O'rnatish uchun nima kerak

  • USB-C docking adapteri USB ga (sichqonchani, klaviaturani, USB modemni yoki telefonni ulash rejimida ulash uchun kamida uchta USB kirish). Bu faqat o'rnatishning birinchi bosqichlarida kerak
  • USB klaviatura
  • USB/USB-C flesh-diski kamida 4 GB

1. Tashqi muhitdan yuklashni taqiqlashni o'chirib qo'ying

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

2. Disk Utility yordamida bo'sh joy ajrating

Qulaylik uchun men darhol diskka 30 Gb joy ajratdim va uni Disk Utility-ning o'zida exfat formatida formatladim. Jismoniy Disk Disk Utilitasini qismlarga ajratish.

3. ISO tasvirini yarating

Tanlovlar:

  1. Siz oddiy yo'ldan borishingiz va yadro 5.3.5-1 va yamalar bilan tayyor tasvirni yuklab olishingiz mumkin. aunali1 tayyor rasmga havola
  2. Archalive orqali o'zingiz rasm yarating (Archa tarqatish tizimi talab qilinadi)

    O'rnatish archiso

    pacman -S archiso

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

    Pacman.conf ga omborni qo'shing:

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

    Biz pacman.conf da asl yadroga e'tibor bermaymiz:

    IgnorePkg   = linux linux-headers
    

    Kerakli paketlarni qo'shing, oxirida linux-mbp yadrosi va linux-mbp-sarlavhalarini qo'shing.

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

    Biz skriptni interaktiv rejimda ishlash uchun o'zgartiramiz (pacstrap -C ni pacstrap -i -C bilan almashtiring):

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

    Tasvirni shakllantirish:

    sudo ./build.sh -v

    E'tibor berilmagan paketlarni o'tkazib yuborish uchun Y tugmasini bosing, so'ngra iso tasvirini usb flesh-diskiga yozing:

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

4. Birinchi yuklash

Fleshli disk va klaviatura o'rnatilgan holda qayta ishga tushiring. Olma paydo bo'lganda variantlarni bosing, EFI BOOT ni tanlang.

Keyinchalik, "e" tugmasini bosishingiz va buyruq satrining oxiriga kirishingiz kerak module_blacklist=momaqaldiroq. Agar bu bajarilmasa, tizim ochilmasligi mumkin va Thunderbolt ICM xatosi paydo bo'ladi.

Fdisk/cfdisk-dan foydalanib, biz bo'limimizni topamiz (men uchun bu nvme0n1p4), uni formatlash va arxivni o'rnatish. foydalanishingiz mumkin rasmiy ko'rsatmalar yoki yon tomonga.

Biz yuklash bo'limini yaratmayapmiz; biz yuklovchini yozamiz /dev/nvme0n1p1
/mnt muhiti to'liq shakllangandan so'ng va arch-chrootga o'tishdan oldin quyidagilarni yozing:

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

/etc/pacman.conf ga qo'shing:


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

Yadroni o'rnating:


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

Biz /etc/modprobe.d/blacklist.conf da momaqaldiroq va applesmc ni ro'yxatdan o'tkazamiz.

blacklist thunderbolt
blacklist applesmc

Klaviatura, sensorli panel va boshqalar

Yay o'rnating:


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

Sensorli panel ishlashi uchun modullarni o'rnatish:


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

Ishga tushirish uchun modullarni qo'shing: /etc/modules-load.d/apple.conf

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

Klaviatura uchun yadro modullarini o'rnatish. Omborda anual1 tayyor paket bor, u deyiladi apple-bce-dkms-git. Uni o'rnatish uchun konsolga yozing:

pacman -S apple-bce-dkms-git

Bunday holda, yadro moduli chaqiriladi olma-bce. O'z-o'zini yig'ish holatida u deyiladi miloddan avvalgi. Shunga ko'ra, agar siz mkinicpio.conf faylining MODULLAR bo'limida modulni ro'yxatdan o'tkazmoqchi bo'lsangiz, qaysi modulni o'rnatganingizni unutmang.

Qo'lda yig'ish:


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

Ishga tushirish uchun bce yoki apple-bce modulini qo'shing: /etc/modules-load.d/bce.conf

bce

Agar siz Fn tugmalaridan sukut bo'yicha foydalanmoqchi bo'lsangiz, /etc/modprobe.d/apple-tb.conf fayliga yozing:

options apple-ib-tb fnmode=2

Yadro va initramflarni yangilash.


mkinitcpio -p linux-mbp

Iwd ni o'rnating:

sudo pacman -S networkmanager iwd

5. Yuklagich

Barcha asosiy paketlar chroot ichiga o'rnatilgandan so'ng, siz bootloaderni o'rnatishni boshlashingiz mumkin.

Men grubni ishga olib kelolmadim. Grub tashqi USB diskidan yuklanadi, lekin siz uni nvme orqali ro'yxatdan o'tkazmoqchi bo'lganingizda

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

tizim yadro vahimasiga tushdi va qayta ishga tushirilgandan so'ng variantlar orqali yangi element paydo bo'lmadi. Men bu muammoning aniq echimini topmadim va shuning uchun systemd-boot yordamida yuklashni amalga oshirishga qaror qildim.

  1. Ishga tushirish
    bootctl --path=/boot install

    va biz yadro vahimasiga tushamiz. MacBook-ni o'chiring, uni qayta yoqing, variantlarni bosing (klaviatura bilan USB-C hubni o'chirmang)

  2. Biz tashqi qurilmaga qo'shimcha ravishda yangi EFI BOOT yozuvi paydo bo'lganligini tekshiramiz
  3. Biz tashqi USB drayvdan yuklashni tanlaymiz, xuddi birinchi o'rnatish paytida (modul_blacklist=thunderbolt belgilashni unutmang)
  4. Biz diskimizni o'rnatamiz va arch-chroot orqali atrof-muhitga o'tamiz


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

Agar tizim to'liq yuklanmaguncha klaviatura ishlashi kerak bo'lsa (bu luks/dm-crypt shifrlashdan foydalanganda kerak), uni MODULLAR bo'limidagi /etc/mkinicpio.conf fayliga yozing:

MODULES=(ext4 applespi intel_lpss_pci spi_pxa2xx_platform bce)

Yadro va initramflarni yangilash.


mkinicpio -p linux-mbp

Systemd-boot-ni sozlash

Biz /boot/loader/loader.conf faylini tahrirlaymiz, ichidagi hamma narsani o'chirib tashlaymiz va quyidagilarni qo'shamiz:

default arch
timeout 5
editor 1

/boot/loader/entries jildiga o'ting, arch.conf faylini yarating va yozing:

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

Agar siz luks va lvm dan foydalangan bo'lsangiz, unda

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

MacOS-ni qayta ishga tushiring.

6. Wi-Fi-ni sozlash

Oxir-oqibat ma'lum bo'lishicha, MacOS papkada Wi-Fi adapteri uchun dasturiy ta'minot fayllarini saqlaydi /usr/share/proshivka/wifi , va siz ularni u yerdan bloblar shaklida olib, brcmfmac yadro moduliga yuborishingiz mumkin. Adapteringiz qaysi fayllardan foydalanishini bilish uchun MacOS-da terminalni oching va quyidagilarni yozing:

ioreg -l | grep C-4364

Biz uzoq ro'yxatni olamiz. Bizga faqat bo'limdagi fayllar kerak 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>"})

Sizning holatingizda fayl nomlari farq qilishi mumkin. Ularni /usr/share/firmware/wifi jildidan flesh-diskga nusxa ko'chiring va ularni quyidagicha nomlang:

    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>

Bunday holda, oxirgi matn fayli model nomlarini o'z ichiga oladi; agar sizning modelingiz macbookpro15,2 bo'lmasa, ushbu fayl nomini MacBook modelingizga mos ravishda o'zgartirishingiz kerak.

Arch-ga qayta yoqing.

Fayllarni flesh-diskdan /lib/firmware/brcm/ jildiga nusxalash


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/

Modulning funksionalligini tekshirish:


rmmod brcmfmac
modprobe brcmfmac

Tarmoq interfeysi ifconfig/ip orqali paydo bo'lishiga ishonch hosil qilamiz.
Wi-Fi orqali sozlash iwctl

Diqqat. Netctl, nmcli va boshqalar orqali. Interfeys ishlamaydi, faqat iwd orqali.

Biz NetworkManager-ni iwd-dan foydalanishga majbur qilamiz. Buning uchun /etc/NetworkManager/NetworkManager.conf faylini yarating va quyidagilarni yozing:

[device]
wifi.backend=iwd

NetworkManager xizmatini ishga tushiring


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

7. Ovoz

Ovoz ishlashi uchun pulseaudio-ni o'rnatishingiz kerak:


sudo pacman -S pulseaudio

Uchta faylni yuklab oling:

Keling, ularni ko'chiraylik:

    /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.Toʻxtatib turish/Davom etish

Ayni damda 16.10.2019 siz ovoz yoki to'xtatib turish/davom etishni tanlashingiz kerak. Biz bce moduli muallifining funksiyani bajarishini kutamiz.

To'xtatilgan/davom etish qo'llab-quvvatlanadigan modul yaratish uchun siz quyidagilarni bajarishingiz kerak:


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

Agar siz anuali1 omboridan tayyor apple-bce modulini o'rnatgan bo'lsangiz, avval uni olib tashlashingiz va shundan keyingina to'xtatib turish rejimini qo'llab-quvvatlovchi bce modulini yig'ishingiz va o'rnatishingiz kerak.

Bundan tashqari, siz applesmc modulini qora ro'yxatga qo'shishingiz kerak (agar buni ilgari qilmagan bo'lsangiz) va oxirida parametrlar qatoridagi /boot/loader/entries/arch.conf da parametr qo'shilganligiga ishonch hosil qiling. pcie_ports=mos.

Hozirgi vaqtda sensorli panel drayveri to'xtatib turish rejimiga kirishda ishlamay qoladi va momaqaldiroq drayveri ba'zan tizimni 30 soniyadan ko'proq vaqt davomida va qayta ishga tushirilganda bir necha daqiqa davomida muzlatib qo'yadi. Bu muammoli modullarni avtomatik ravishda tushirish orqali tuzatilishi mumkin.

Skript yarating /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

Uni bajariladigan qilib qo'ying:

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

Hozircha hammasi shu. Natijada, to'xtatib turish/rezyume bilan ba'zi nuanslar bundan mustasno, butunlay ishlaydigan tizim. Bir necha kunlik ish vaqtida hech qanday nosozliklar yoki yadro vahimalari kuzatilmadi. Umid qilamanki, yaqin kelajakda bce moduli muallifi uni tugatadi va biz to'xtatib turish/davom etish va ovozni to'liq qo'llab-quvvatlaymiz.

Manba: www.habr.com

a Izoh qo'shish