Имаше доста шум около новия чип T2, заради който не може да се инсталира Linux на новите MacBook 2018 с Touch Bar. Времето мина и към края на 2019 година външни разработчици реализираха редица драйвери и патчи за ядрото за взаимодействие с чипа T2. Основният драйвер за моделите MacBook от 2018 и по-нови реализира работа на VHCI (испанските клавиатура/тъчпад и т.н.), а също така и на звука.
Проект разделен на 3 основни компонента:
- BCE (Buffer Copy Engine) — установява основния канал за свързване с T2. VHCI и Audio изискват този компонент.
- VHCI — това е виртуален контролер за хост USB; клавиатурата, мишката и други компоненти на системата се предоставят от този компонент (други драйвери използват този хост-контролер за осигуряване на допълнителна функционалност).
- Audio — драйвер за аудиоинтерфейса T2, в момента поддържа само извеждане на звук през вградените динамици на MacBook.
Вторият проект се нарича , и реализира възможността за работа на драйвера за вход за клавиатурата, тъчпада SPI, Touch Bar за MacBook Pro от края на 2016 г. и по-късни версии. Част от драйверите за клавиатурата/тъчпада вече са включени в ядрото, започвайки от версия 5.3.
Също така беше реализирана поддръжка за устройства като Wi-Fi, тъчпад и т.н. с помощта на патчи за ядрото. В момента версията на ядрото
Какво работи в момента
- NVMe
- Клавиатура
- USB-C (Thunderbolt не е тестван, при автоматично зареждане на модула системата замръзва напълно)
- Touch Bar (с възможност за активиране на клавишите Fn, подсветка, ESC и т.н.)
- Звук (само вградени динамици)
- Модул Wi-Fi (чрез brcmfmac и само през iw)
- DisplayPort през USB-C
- Сензори
- Suspend/Resume (частично)
- и т.н.
Тази инструкция е приложима за macbookpro15,1 и macbookpro15,2. Основана е на статия от GitHub на английски . Не всичко от тази статия работи, затова се наложи да търся решение самостоятелно.
Какво е необходимо за инсталацията
- USB-C адаптер за преход на USB (поне три USB входа за свързване на мишка, клавиатура, USB модем или телефон в режим на tethering). Това е необходимо само в началните етапи на инсталацията.
- USB клавиатура
- USB/USB-C флашка с минимум 4GB
1. Изключваме забраната за зареждане от външни носители
2. Освобождаваме свободно място с помощта на Disk Utility.
За удобство веднага освободих 30GB на диска, форматирайки го в exFAT в самия Disk Utility. .
3. Създаваме iso образ
Опции:
- Може да се върнем по лесния път и да изтеглим готов образ с ядро 5.3.5-1 и пачове от
- Създайте образ сами с archlive (нужна е система с дистрибуция на арч)
Инсталираме
pacman -S archisocp -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
Инсталираме ядрото:
sudo pacman -S linux-mbp linux-mbp-headers
sudo mkinitcpio -p linux-mbp
Записваме thunderbolt и applesmc в /etc/modprobe.d/blacklist.conf
blacklist thunderbolt
blacklist applesmc
Клавиатура, тачбар и т.н.
Инсталираме yay:
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
Инсталираме модулите на ядрото за работа на клавиатурата. В репозиторият има готов пакет, който се нарича 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 iwd5. Зареждач
След като в chroot всички основни пакети са инсталирани, можем да започнем с инсталацията на зареждача.
Не успях да накарам grub да работи. Grub се зарежда от външен usb диск, но при опит за инсталирането му в nvme чрез
grub-install —target=x86_64-efi —efi-directory=/boot —bootloader-id=grub
системата претърпя 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:
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 и записваме:
Заглавие арх
linux /vmlinuz-linux-mbp
initrd /initramfs-linux-mbp.img
опции root=/dev/<b>nvme0n1p4</b> rw pcie_ports=compat
В случай, че сме използвали luks и lvm, тогава
опции cryptdevice=\/dev\/<b>nvme0n1p4</b>:luks root=\/dev\/mapper\/vz0-root rw pcie_ports=совместим
Рестартираме в MacOS.
6. Настройка на Wi-Fi
Както в крайна сметка се оказа, файловете на фърмуерите за wi-fi адаптера MacOS се съхраняват в папка /usr/share/firmware/wifi , и можем да ги вземем от там под формата на блобове и да ги предоставим на модула на ядрото 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 чрез
Внимание. Чрез 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.rules8. Suspend/Resume
В момента 16.10.2019 трябва да изберем между звук или suspend/resume. Чакаме, докато авторът на bce модула завърши функционалността.
За да сглобите модула с поддръжка на suspend/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.
Също така е необходимо да добавите модула applesmc в blacklist (ако не сте го направили по-рано) и да се уверите, че в /boot/loader/entries/arch.conf в реда options в края е добавен параметърът pcie_ports=compat.
В момента драйверът на тачбара пада при вход в режим suspend, а драйверът на thunderbolt понякога блокира системата за повече от 30 секунди, а при възобновяване – за няколко минути. Това може да бъде поправено чрез автоматичното изваждане на проблемните модули.
Създайте скрипт /lib/systemd/system-sleep/rmmod.sh:
#!/bin/sh
if [ "${1}" == "pre" ]; then
rmmod thunderbolt
rmmod apple_ib_tb
elif [ "${1}" == "post" ]; then
modprobe apple_ib_tb
modprobe thunderbolt
fi
Направете го изпълним:
sudo chmod +x /lib/systemd/system-sleep/rmmod.sh На това засега е достатъчно. В крайна сметка получаваме напълно работеща система, с изключение на някои нюанси с suspend/resume. Няма наблюдавани сривове и kernel panic през последните няколко дни uptime. Надявам се, че скоро авторът на модула bce ще го завърши и ще получим пълна поддръжка на suspend/resume и звук.
Източник: habr.com
