Направете 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. тастатура
  3. USB-C (Thunderbolt не е тестиран; кога модулот се вчита автоматски, го замрзнува системот)
  4. Лента на допир (со можност за вклучување на копчињата 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 флеш диск минимум 4GB

1. Оневозможете ја забраната за подигање од надворешни медиуми

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

2. Доделете слободен простор користејќи Disk Utility

За погодност, веднаш доделив 30 GB на дискот, форматирајќи го во exfat во самиот Disk Utility. Поделба на алатка за физички дискови.

3. Направете ISO слика

Опции:

  1. Можете да одите по едноставниот пат и да преземете готова слика со кернелот 5.3.5-1 и закрпи од аунали1 линк до готовата слика
  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 за да ги прескокнете игнорираните пакети, а потоа напишете ја изо сликата на USB флеш-уредот:

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

4. Прво подигање

Рестартирајте со вметнати флеш-уред и тастатура. Притиснете опции кога ќе се појави јаболкото, изберете EFI BOOT.

Следно, треба да го притиснете копчето „e“ и да внесете на крајот од командната линија module_blacklist=гром. Ако ова не е направено, системот може да не се подигне и ќе се појави Thunderbolt ICM Error.

Користејќи 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

Регистрираме thunderbolt и 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

Инсталирање модули за работа на лентата за допир:


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

Инсталирање на кернел модули за тастатурата. Во складиштето anuali1 има готов пакет, се вика јаболко-bce-dkms-git. За да го инсталирате, напишете во конзолата:

pacman -S apple-bce-dkms-git

Во овој случај, ќе се повика модулот на јадрото јаболко-пр.н.е. Во случај на самосклопување, се нарекува пр. Според тоа, ако сакате да регистрирате модул во делот МОДУЛИ во датотеката 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=(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 ќе го заврши, и ќе добиеме целосна поддршка за суспендирање/продолжување и звук.

Извор: www.habr.com

Додадете коментар