Кор кардани MacBook Pro 2018 T2 бо ArchLinux (dualboot)

Дар бораи он, ки чипи нави T2 насб кардани Linux-ро дар MacBook-ҳои нави 2018 бо панели сенсорӣ ғайриимкон мекунад, хеле сару садоҳо ба вуҷуд омадаанд. Вақт гузашт ва дар охири соли 2019 таҳиягарони тарафи сеюм як қатор драйверҳо ва часбҳои ядроиро барои ҳамкорӣ бо чипи T2 татбиқ карданд. Драйвери асосӣ барои моделҳои MacBook 2018 ва навтар амалиёти VHCI (амали ламс/клавиатура/ва ғ.), инчунин амалиёти садоиро амалӣ мекунад.

Лоиҳа mbp2018-bridge-drv ба 3 ҷузъи асосӣ тақсим мешавад:

  • BCE (Buffer Copy Engine) - канали асосии алоқаро бо T2 таъсис медиҳад. VHCI ва Audio ин ҷузъро талаб мекунанд.
  • VHCI як нозири ҳости виртуалии USB мебошад; клавиатура, муш ва дигар ҷузъҳои система аз ҷониби ин ҷузъ таъмин карда мешаванд (дигар драйверҳо ин контроллери мизбонро барои таъмини кори бештар истифода мебаранд.
  • Аудио - драйвер барои интерфейси аудиоии T2, дар айни замон танҳо баромади аудиоро тавассути баландгӯякҳои дарунсохташудаи MacBook дастгирӣ мекунад


Лоиҳаи дуюм номида мешавад macbook12-spi-ронандаи, ва он қобилияти кор кардани драйвери вурудро барои клавиатура, трекпади SPI ва панели сенсорӣ барои MacBook Pro Late 2016 ва баъдтар амалӣ мекунад. Баъзе драйверҳои клавиатура/трекпад ҳоло аз версияи 5.3 сар карда ба ядро ​​дохил карда шудаанд.

Дастгирии дастгоҳҳо ба монанди wi-fi, touchpad ва ғайра низ бо истифода аз часбҳои ядроӣ амалӣ карда шуд. Версияи ҷории ядро ​​​​ 5.3.5-1

Дар айни замон чӣ кор мекунад

  1. NVMe
  2. Keyboard
  3. USB-C (Thunderbolt санҷида нашудааст; вақте ки модул ба таври худкор бор карда мешавад, он системаро ях мекунад)
  4. Touchbar (бо қобилияти фурӯзон кардани тугмаҳои Fn, рӯшноӣ, ESC ва ғайра)
  5. Овоз (танҳо баландгӯякҳои дарунсохт)
  6. Модули Wi-Fi (тавассути brcmfmac ва танҳо тавассути iw)
  7. DisplayPort тавассути USB-C
  8. Санҷандаҳо
  9. Таваққуф/Идома (қисман)
  10. ва ғайра ..

Ин дастур барои macbookpro15,1 ва macbookpro15,2 татбиқ мешавад. Мақола ҳамчун асос аз Github ба забони англисӣ гирифта шудааст. аз ин ҷо. На ҳама дар ин мақола кор карданд, бинобар ин ман маҷбур шудам, ки худам ҳалли худро пайдо кунам.

Чӣ ба шумо лозим аст, ки насб кунед

  • Адаптери пайвасткунаки USB-C ба USB (ҳадди ақал се вуруди USB барои пайваст кардани муш, клавиатура, модеми USB ё телефон дар ҳолати пайвастшавӣ). Ин танҳо дар марҳилаҳои аввали насб зарур аст
  • Клавиатураи USB
  • Диски флеши USB/USB-C ҳадди аққал 4 ГБ

1. Манъи боркунӣ аз васоити берунаро ғайрифаъол кунед

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

2. Бо истифода аз Disk Utility фазои холӣ ҷудо кунед

Барои роҳат, ман фавран ба диск 30 ГБ ҷудо кардам ва онро дар эксфат дар худи Disk Utility формат кардам. Тақсимоти диски физикии утилита.

3. Тасвири ISO эҷод кунед

Имкониятҳо:

  1. Шумо метавонед бо роҳи оддӣ равед ва тасвири тайёрро бо ядрои 5.3.5-1 ва часбҳоро аз aunali1 пайванд ба тасвири тайёр
  2. Тавассути archlive худ тасвир эҷод кунед (система бо тақсимоти Archa лозим аст)

    Насб кунед архисо

    pacman -S archiso

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

    Анборро ба pacman.conf илова кунед:

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

    Мо ядрои аслиро дар pacman.conf нодида мегирем:

    IgnorePkg   = linux linux-headers
    

    Бастаҳои заруриро илова кунед, дар охир ядрои linux-mbp ва linux-mbp-сарлавҳаҳоро илова кунед

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

    Мо скриптро барои кор дар реҷаи интерактивӣ иваз мекунем (pacstrap -C бо 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!"
    }

    Ташаккул додани тасвир:

    sudo ./build.sh -v

    Y-ро пахш кунед, то бастаҳои нодида гирифтаро гузаред ва сипас тасвири iso-ро ба флеши USB нависед:

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

4. Боркунии аввал

Бо гардонандаи флеш ва клавиатура аз нав оғоз кунед. Вақте ки себ пайдо мешавад, имконоти пахш кунед, EFI BOOT -ро интихоб кунед.

Баъдан, шумо бояд тугмаи "e" -ро пахш кунед ва дар охири сатри фармон ворид кунед module_blacklist = раъду барқ. Агар ин иҷро нашавад, система метавонад пурбор нашавад ва Хатои Thunderbolt ICM пайдо мешавад.

Бо истифода аз fdisk/cfdisk мо қисмати худро пайдо мекунем (барои ман он nvme0n1p4 аст), онро формат кунед ва бойгониро насб кунед. Шумо метавонед истифода баред дастурҳои расмӣ ё тараф.

Мо қисмати пурборкунанда эҷод намекунем; мо пурборкунакро дар он менависем /dev/nvme0n1p1
Пас аз он ки муҳити /mnt пурра ташаккул ёфт ва пеш аз гузаштан ба arch-chroot, нависед:

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

Ба /etc/pacman.conf илова кунед:


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

Ядро насб кунед:


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

Мо раъду барқ ​​ва applesmc-ро дар /etc/modprobe.d/blacklist.conf қайд мекунем

blacklist thunderbolt
blacklist applesmc

Клавиатура, панели сенсорӣ ва ғайра

насб кунед:


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

Насб кардани модулҳо барои кор кардани панели touchbar:


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

Модулҳоро барои оғозёбӣ илова кунед: /etc/modules-load.d/apple.conf

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

Насб кардани модулҳои ядро ​​​​барои клавиатура. Дар анбор анали1 бастаи тайёр мавчуд аст, ном дорад apple-bce-dkms-git. Барои насб кардани он, дар консол нависед:

pacman -S apple-bce-dkms-git

Дар ин ҳолат, модули ядро ​​​​даъват карда мешавад себ-бце. Дар сурати худ-монтажкунй он номида мешавад то эраи мо. Мувофиқи он, агар шумо хоҳед, ки модулро дар бахши MODULES-и файли mkinicpio.conf сабти ном кунед, пас фаромӯш накунед, ки кадом модулро насб кардаед.

Ҷамъоварии дастӣ:


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

Барои оғозёбӣ модули bce ё apple-bce -ро илова кунед: /etc/modules-load.d/bce.conf

bce

Агар шумо хоҳед, ки тугмаҳои Fn-ро ба таври нобаёнӣ истифода баред, пас дар файли /etc/modprobe.d/apple-tb.conf нависед:

options apple-ib-tb fnmode=2

Навсозии ядро ​​​​ва initramfs.


mkinitcpio -p linux-mbp

iwd насб кунед:

sudo pacman -S networkmanager iwd

5. Боркунак

Пас аз он ки ҳамаи бастаҳои асосӣ дар дохили chroot насб карда мешаванд, шумо метавонед ба насби боркунак оғоз кунед.

Ман гуруснаро ба кор бурда натавонистам. Grub аз гардонандаи USB берунӣ пурбор, вале вақте ки шумо кӯшиш ба қайд онро дар nvme тавассути

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

система ба воҳимаи ядро ​​​​афтид ва пас аз бозоғозӣ як ҷузъи нав тавассути вариантҳо пайдо нашуд. Ман ҳеҷ гуна ҳалли дақиқи ин мушкилотро наёфтам ва аз ин рӯ тасмим гирифтам, ки бо истифода аз systemd-boot пурборкуниро амалӣ кунам.

  1. Оғози
    bootctl --path=/boot install

    ва мо ба воҳимаи ядро ​​​​меравем. MacBook-ро хомӯш кунед, дубора фурӯзон кунед, интихобҳоро клик кунед (хаби USB-C-ро бо клавиатура хомӯш накунед)

  2. Мо тафтиш мекунем, ки илова ба дастгоҳи беруна вуруди нави EFI BOOT пайдо шудааст
  3. Мо интихоб мекунем, ки аз диски USB-и беруна пурбор кунем, ба монанди ҳангоми насби аввал (фаромӯш накунед, ки module_blacklist=thunderbolt-ро муайян кунед)
  4. Мо диски худро насб мекунем ва тавассути arch-chroot ба муҳити атроф меравем


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

Агар зарур бошад, ки клавиатура то пурра пур шудани система кор кунад (ин ҳангоми истифодаи рамзгузории luks/dm-crypt зарур аст), пас онро дар файли /etc/mkinicpio.conf дар бахши MODULES нависед:

MODULES=(ext4 applespi intel_lpss_pci spi_pxa2xx_platform bce)

Навсозии ядро ​​​​ва initramfs.


mkinicpio -p linux-mbp

Насб кардани systemd-boot

Мо файли /boot/loader/loader.conf-ро таҳрир мекунем, ҳама чизро дар дохили он нест мекунем ва зеринро илова мекунем:

default arch
timeout 5
editor 1

Ба папкаи /boot/loader/entries гузаред, файли arch.conf-ро эҷод кунед ва нависед:

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

Агар шумо люкс ва лвмро истифода бурда бошед, пас

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

Дар MacOS аз нав оғоз кунед.

6. Танзими Wi-Fi

Тавре ки дар ниҳоят маълум шуд, MacOS файлҳои нармафзорро барои адаптери Wi-Fi дар ҷузвдон нигоҳ медорад /usr/share/firmware/wifi , ва шумо метавонед онҳоро аз он ҷо дар шакли blobs гиред ва ба модули ядрои brcmfmac ғизо диҳед. Барои фаҳмидани он, ки адаптери шумо кадом файлҳоро истифода мебарад, дар MacOS терминалро кушоед ва нависед:

ioreg -l | grep C-4364

Мо рӯйхати дарозро мегирем. Мо танҳо файлҳоро аз қисмат лозим аст 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>"})

Дар ҳолати шумо, номҳои файл метавонанд фарқ кунанд. Онҳоро аз ҷузвдони /usr/share/firmware/wifi ба диски флеш нусхабардорӣ кунед ва номи онҳоро ба таври зерин иваз кунед:

    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>

Дар ин ҳолат, файли матнии охирин номҳои моделро дар бар мегирад; агар модели шумо macbookpro15,2 набошад, шумо бояд ин файлро мувофиқи модели MacBook иваз кунед.

Дар Arch аз нав оғоз кунед.

Файлҳоро аз диски флеш ба ҷузвдони /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/

Санҷиши фаъолияти модул:


rmmod brcmfmac
modprobe brcmfmac

Мо боварӣ ҳосил мекунем, ки интерфейси шабака тавассути ifconfig/ip пайдо мешавад.
Танзими wifi тавассути iwctl

Диққат. Тавассути netctl, nmcli ва ғайра. Интерфейс кор намекунад, танҳо тавассути iwd.

Мо NetworkManager-ро маҷбур мекунем, ки iwd-ро истифода барад. Барои ин, файли /etc/NetworkManager/NetworkManager.conf-ро эҷод кунед ва нависед:

[device]
wifi.backend=iwd

Хидмати NetworkManager-ро оғоз кунед


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

7. Садо

Барои он ки садо кор кунад, шумо бояд pulseaudio-ро насб кунед:


sudo pacman -S pulseaudio

Се файлро зеркашӣ кунед:

Биёед онҳоро интиқол диҳем:

    /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. Таваққуф кардан/Давом додан

Дар ин лахза 16.10.2019 шумо бояд ё садо ё боздошта/давомро интихоб кунед. Мо мунтазири онем, ки муаллифи модули bce функсияро ба анҷом расонад.

Барои сохтани модул бо дастгирии боздошташуда/резюме, шумо бояд амалҳои зеринро иҷро кунед:


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

Агар шумо модули тайёри apple-bce-ро аз анбори anuali1 насб карда бошед, шумо бояд аввал онро хориҷ кунед ва танҳо баъд модули bce-ро бо дастгирии ҳолати боздошта ҷамъ ва насб кунед.

Инчунин, шумо бояд модули applesmc -ро ба рӯйхати сиёҳ илова кунед (агар шумо қаблан ин корро накарда бошед) ва боварӣ ҳосил кунед, ки дар /boot/loader/entries/arch.conf дар сатри интихобҳо дар охири параметр илова карда мешавад. pcie_ports=мувофиқ.

Дар айни замон, драйвери панели сенсорӣ ҳангоми ворид шудан ба ҳолати таваққуф ба садама дучор мешавад ва ронандаи раъду барқ ​​баъзан системаро барои беш аз 30 сония ва ҳангоми дубора оғоз кардан чанд дақиқа ях мекунад. Инро тавассути боркунии автоматии модулҳои мушкилот ҳал кардан мумкин аст.

Скрипт эҷод кунед /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

Онро иҷрошаванда созед:

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

Ҳамааш ҳамин аст. Натиҷа як системаи комилан қобили кор аст, ба истиснои баъзе нозукиҳо бо таваққуф / идома. Дар тӯли чанд рӯзи корӣ ягон садама ё ваҳшати ядро ​​​​ мушоҳида нашудааст. Умедворам, ки дар ояндаи наздик муаллифи модули bce онро ба итмом мерасонад ва мо барои боздоштан/резюме ва садо пурра дастгирӣ хоҳем кард.

Манбаъ: will.com

Илова Эзоҳ