Направете MacBook Pro 2018 T2 да работи с ArchLinux (двойно стартиране)

Имаше доста шум около факта, че новият T2 чип ще направи невъзможно инсталирането на Linux на новите MacBook 2018 с тъчбар. Мина време и в края на 2019 г. разработчиците на трети страни внедриха редица драйвери и пачове на ядрото за взаимодействие с чипа T2. Основният драйвер за MacBook модели 2018 и по-нови изпълнява VHCI операция (операция с докосване/клавиатура/и т.н.), както и работа със звук.

Проект mbp2018-мост-drv разделени на 3 основни компонента:

  • BCE (Buffer Copy Engine) - установява основния комуникационен канал с T2. VHCI и Audio изискват този компонент.
  • VHCI е USB виртуален хост контролер; клавиатурата, мишката и другите системни компоненти се предоставят от този компонент (други драйвери използват този хост контролер, за да предоставят повече функционалност.
  • Аудио - драйвер за аудио интерфейса T2, в момента поддържа аудио изход само през вградените високоговорители на MacBook


Вторият проект се нарича macbook12-spi-драйвер, и реализира способността да работи с входен драйвер за клавиатурата, SPI тракпада и тъчбара за MacBook Pro от края на 2016 г. и по-късно. Някои драйвери за клавиатура/тракпад вече са включени в ядрото, като се започне от версия 5.3.

Поддръжката за устройства като wi-fi, тъчпад и т.н. също беше реализирана чрез кръпки на ядрото. Текуща версия на ядрото 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

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

3. Създайте ISO изображение

възможности:

  1. Можете да отидете по простия път и да изтеглите готово изображение с ядро ​​5.3.5-1 и пачове от аунали1 връзка към готовото изображение
  2. Създайте сами изображение чрез archlive (изисква се система с дистрибуция на Archa)

    инсталирам archiso

    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 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

Инсталиране на модули на ядрото за клавиатурата. В хранилището годишен1 има готова опаковка, казва се apple-bce-dkms-git. За да го инсталирате, напишете в конзолата:

pacman -S apple-bce-dkms-git

В този случай ще бъде извикан модулът на ядрото ябълка-bce. В случай на самосглобяване се нарича пр.н.е.. Съответно, ако искате да регистрирате модул в секцията МОДУЛИ на файла 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 да работи. 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

Ако сте използвали luks и lvm, тогава

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 и можете да ги вземете от там под формата на петна и да ги подадете към модула на ядрото brcmfmac. За да разберете кои файлове използва вашия адаптер, отворете терминал в MacOS и напишете:

ioreg -l | grep C-4364

Получаваме дълъг списък. Трябват ни само файлове от раздела Искани файлове:

"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=compat.

В момента драйверът на тъчбара се срива при влизане в режим на спиране, а драйверът на thunderbolt понякога замразява системата за повече от 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

Добавяне на нов коментар