Прымушаем працаваць MacBook Pro 2018 T2 c ArchLinux (dualboot)
Досыць шмат было шуміхі з нагоды таго, што з-за новага чыпа T2 немагчыма ўсталяваць linux на новыя MacBook 2018 з тачбарам. Ішоў час, і пад канец 2019 года строннымі распрацоўшчыкамі быў рэалізаваны шэраг драйвераў і патчаў ядра для ўзаемадзеяння з чыпам T2. Асноўны драйвер для MacBook мадэляў 2018 і навей рэалізуе працу VHCI (праца тача/клавіятуры/і.т.д.), а таксама функцыянаванне гуку.
BCE (Buffer Copy Engine) - усталёўвае асноўны канал сувязі з T2. VHCI і Audio патрабуюць гэты кампанент.
VHCI – гэта віртуальны хост-кантролер USB; клавіятура, мыш і іншыя кампаненты сістэмы прадастаўляюцца гэтым кампанентам (іншыя драйверы выкарыстоўваюць гэты хост-кантролер для забеспячэння большай функцыянальнасці.
Audio – драйвер для аўдыёінтэрфейсу T2, у цяперашні час падтрымліваецца толькі выснова гуку праз убудаваныя дынамікі MacBook
Другі праект называецца macbook12-spi-driver, і ён рэалізуе магчымасць працы драйвера ўводу для клавіятуры, трекпада SPI, тачбара для MacBook Pro канца 2016 г. і пазнейшых версій. Частка драйвераў для клавіятуры/трэкпада зараз уключана ў ядро, пачынальна з версіі 5.3.
Таксама была рэалізавана падтрымка такіх прылад, як wi-fi, тачпад, etc, з дапамогай патчаў ядра. На дадзены момант версія ядра5.3.5-1
Што працуе на дадзены момант
NVMe
клавіятура
USB-C (Thunderbolt не правяраўся, пры аўтаматычнай загрузцы модуля падвешвае сістэму намёртва)
Тачбар (з магчымасцю ўключэння клавіш Fn, падсвятленне, ESC і тп)
Гук (толькі ўбудаваныя дынамікі)
Модуль Wi-Fi (праз brcmfmac і толькі праз iw)
DisplayPort праз USB-C
сэнсары
Suspend/Resume (часткова)
і да т.п ..
Дадзены тутарыял ужывальны для macbookpro15,1 і macbookpro15,2. За аснову быў узяты артыкул з гітхаба на англійскай адсюль. Не ўсё з гэтага артыкула зарабіла, таму прыйшлося шукаць рашэнне самастойна.
Што спатрэбіцца для ўстаноўкі
USB-C док-пераходнік на USB (як мінімум тры USB уваходу для падлучэння мышы, клавіятуры, usb мадэма або тэлефона ў рэжыме tethering). Гэта неабходна толькі на першых этапах усталёўкі
USB-клавіятура
USB/USB-C флэшка мінімум на 4Гб
1. Адключаем забарону загрузкі з вонкавых носьбітаў
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-headers
...
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. Першая загрузка
Перазагружаемся з устаўленай флэшкай і клавіятурай. Націскаем options пры з'яўленні яблыка, выбіраемы EFI BOOT.
Далей неабходна націснуць клавішу "e" і ўпісаць у канец каманднага радка module_blacklist=thunderbolt. Калі гэтага не зрабіць, то сістэма можа не загрузіцца, і выляціць памылка 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
Усталёўваны модулі ядра для працы клавіятуры. У рэпазітары anuali1 ёсць гатовы пакет, ён называецца apple-bce-dkms-git. Каб яго ўсталяваць, пішам у кансолі:
pacman -S apple-bce-dkms-git
У гэтым выпадку модуль ядра будзе звацца apple-bce. У выпадку самастойнай зборкі ён называецца BCE. Адпаведна, калі вы жадаеце прапісаць модуль у падзел 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-дыска grub загружаецца, але пры спробе прапісаць яго ў nvme праз
сістэма ляцела ў kernel panic, і пасля перазагрузкі новага пункта праз options не з'яўлялася. Нейкага выразнага рашэння дадзенай праблемы я не знайшоў і таму вырашыў паспрабаваць рэалізаваць загрузку з дапамогай systemd-boot.
Запускаем
bootctl --path=/boot install
і ляцім у kernel panic. Выключаем MacBook, уключаем нанова, ціснем options (usb-c хаб з клавіятурай не адключаем)
Правяраем, што з'явіўся новы запіс EFI BOOT апроч знешняй прылады
Выбіраемы загрузку з вонкавага usb-дыска, як пры першай усталёўцы (не забываем прапісаць module_blacklist=thunderbolt)
Мантаваны наш дыск і пераходзім у асяроддзе праз arch-chroot
mount /dev/nvme0n1p4 /mnt
mount /dev/nvme0n1p1 /mnt/boot
arch-chroot /mnt
Калі неабходна, каб клавіятура працавала да поўнай загрузкі сістэмы (гэта неабходна ў выпадку выкарыстання шыфравання luks/dm-crypt) то прапісваем у файл /etc/mkinicpio.conf у падзеле MODULES:
Як у выніку высветлілася, файлы прашывак для wi-fi адаптара MacOS захоўвае ў тэчцы /usr/share/firmware/wifi , і можна іх ад туды ўзяць у выглядзе блобаў і скарміць модулю ядра brcmfmac. Для таго, каб высветліць, якія менавіта файлы выкарыстоўвае ваш адаптар, адчыняны тэрмінал у MacOS і пішам:
ioreg -l | grep C-4364
Атрымліваем доўгі спіс. Нам патрэбныя файлы толькі з часткі RequestedFiles:
У дадзеным выпадку апошні тэкставы файл утрымоўвае назовы мадэлі, калі ваша мадэль не macbookpro15,2, тое неабходна пераназваць гэты файл у адпаведнасці з вашай мадэллю макбука.
Перазагружаемся ў арч.
Капіяваны файлы з флэшкі ў тэчку /lib/firmware/brcm/
На бягучы момант 16.10.2019 даводзіцца выбіраць альбо гук, альбо suspend/resume. Чакаем, пакуль аўтар bce модуля дапілуе функцыянал.
Каб сабраць модуль з падтрымкай susped/resume, неабходна выканаць наступнае:
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 модуль з падтрымкай suspend рэжыму.
Таксама, неабходна дадаць у blacklist модуль applesmc (калі вы гэтага не зрабілі раней) і пераканацца, што ў /boot/loader/entries/arch.conf у радку options у канцы дададзены параметр pcie_ports=compat.
На бягучы момант драйвер тачбара вылятае пры ўваходзе ў рэжым suspend, а драйвер thunderbolt часам падвешвае сістэму больш за на 30 секунд, а пры аднаўленні - на некалькі хвілін. Гэта можна выправіць шляхам аўтаматычнай выгрузкі праблемных модуляў.
#!/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
На гэтым пакуль усё. У выніку атрымалася суцэль працаздольная сістэма, за выключэннем некаторых нюансаў з suspend/resume. Ніякіх вылетаў і kernel panic не назіраецца цягам некалькіх дзён аптайму. Спадзяюся, хуткім часам аўтар модуля bce яго дапілуе, і мы атрымаем паўнавартасную падтрымку suspend/resume і гуку.