Der var ret meget støj om, at det ikke var muligt at installere Linux på de nye MacBook-modeller fra 2018 med touchbar på grund af den nye T2-chip. Tiden gik, og ved udgangen af 2019 blev der udviklet en række drivere og kernepatches af tredjepartsudviklere for at interagere med T2-chippen. Hoveddriveren til MacBook-modellerne fra 2018 og nyere muliggør VHCI (fungerende touch/tastatur/etc.) samt lydfunktionalitet.
Projekt opdelt i 3 hovedkomponenter:
- BCE (Buffer Copy Engine) — etablerer den primære kommunikationskanal med T2. VHCI og Audio kræver denne komponent.
- VHCI — er en virtuel USB-værtcontroller; tastatur, mus og andre systemkomponenter leveres af denne komponent (andre drivere bruger denne værtcontroller for at sikre større funktionalitet.
- Audio — driveren til T2s lydinterface, understøtter i øjeblikket kun lydudgang gennem de indbyggede højttalere i MacBook.
Det andet projekt hedder , og det muliggør drift af inputdriveren til tastaturet, trackpadet SPI og touchbaren for MacBook Pro fra slutningen af 2016 og nyere. En del drivere til tastatur/trackpad er nu inkluderet i kernen, fra version 5.3.
Der er også blevet implementeret support for enheder såsom wi-fi, touchpad, osv., ved hjælp af kernepatches. I øjeblikket er kerneversionen
Hvad fungerer på nuværende tidspunkt
- NVMe
- Tastatur
- USB-C (Thunderbolt er ikke testet, ved automatisk indlæsning af modulet fryser systemet helt)
- Touchbar (med mulighed for at aktivere Fn-taster, baggrundsbelysning, ESC osv.)
- Lyd (kun indbyggede højttalere)
- Wi-Fi-modul (gennem brcmfmac og kun via iw)
- DisplayPort gennem USB-C
- Sensorer
- Suspend/Resume (delvist)
- osv..
Denne tutorial gælder for macbookpro15,1 og macbookpro15,2. Jeg har taget udgangspunkt i en artikel fra GitHub på engelsk. Ikke alt fra denne artikel fungerede, så jeg måtte finde løsninger selv.
Hvad der kræves til installation
- USB-C dock-adapter til USB (mindst tre USB-porte til tilslutning af mus, tastatur, USB-modem eller telefon i tethering-tilstand). Dette er kun nødvendigt i de første faser af installationen.
- USB-tastatur
- USB/USB-C flashdrev med minimum 4GB
1. Deaktiver forbuddet mod indlæsning fra eksterne medier.
2. Tildel ledig plads ved hjælp af Disk Utility.
For nemheds skyld tildelede jeg straks 30GB på disken, formateret i exfat i selve Disk Utility. .
3. Opretter iso billede
Muligheder:
- Man kan tage den enkle vej og downloade et færdigt billede med kernel 5.3.5-1 og patches fra
- Opret billedet selv via archlive (en system med Arch-distributionen er nødvendig)
Installerer
pacman -S archisocp -r /usr/share/archiso/configs/releng/ archlive cd archliveTilføj repository til pacman.conf:
[mbp] Server = https://packages.aunali1.com/archlinux/$repo/$archIgnorer den originale kernel i pacman.conf:
IgnorePkg = linux linux-headersTilføj de nødvendige pakker, og tilføj til sidst linux-mbp og linux-mbp-headers
... wvdial xl2tpd linux-mbp linux-mbp-headersÆndre scriptet til at køre i interaktiv tilstand (erstat pacstrap -C med 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!" }Opret billede:
sudo ./build.sh -vTryk Y for at springe over de ignorerede pakker, og skriv derefter iso-billedet til USB-nøgle:
sudo dd if=out/archlinux*.iso of=/dev/sdb bs=1M
4. Første opstart
Genstart med den indsatte nøgle og tastatur. Tryk på options, når æblet vises, og vælg EFI BOOT.
Dernæst skal du trykke på tasten «e» og skrive i slutningen af kommandolinjen module_blacklist=thunderbolt. Hvis dette ikke gøres, kan systemet muligvis ikke starte, og der vil opstå en fejl Thunderbolt ICM Error.
Brug af fdisk/cfdisk finder vi vores partition (i mit tilfælde nvme0n1p4), formater og installer Arch. Du kan bruge eller .
Vi opretter ikke en boot-partition, bootloaderen vil blive skrevet til /dev/nvme0n1p1
Når miljøet i /mnt er fuldt oprettet, og før vi går ind i arch-chroot, skriver vi:
mount /dev/nvme0n1p1 /mnt/boot
arch-chroot /mnt /bin/bash
Tilføj til /etc/pacman.conf:
[mbp]
Server = https://packages.aunali1.com/archlinux/$repo/$arch
Installer kernel:
sudo pacman -S linux-mbp linux-mbp-headers
sudo mkinitcpio -p linux-mbp
Skriv thunderbolt og applesmc i /etc/modprobe.d/blacklist.conf
blacklist thunderbolt
blacklist applesmc
Tastatur, touch bar osv.
Installer yay:
sudo pacman -S git gcc make fakeroot binutils
git clone https://aur.archlinux.org/yay.git
cd yay
makepkg -si
Installer moduler til touch bar:
git clone --branch mbp15 https://github.com/roadrunner2/macbook12-spi-driver.git
cd macbook12-spi-driver
make install
Tilføj moduler til automatisk opstart: /etc/modules-load.d/apple.conf
industrialio_triggered_buffer
apple-ibridge
apple-ib-tb
apple-ib-als
Installer kernelmoduler til tastaturet. I repositoriet der er et færdigt pakket, den hedder apple-bce-dkms-git. For at installere det skriver vi i terminalen:
pacman -S apple-bce-dkms-gitI dette tilfælde vil kernelmodulet hedde apple-bce. I tilfælde af selvbyg vil det hedde bce. Hvis du vil tilføje modulet til sektionen MODULES i filen mkinicpio.conf, så glem ikke, hvilket modul du installerede.
Manuel installation:
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
Tilføj bce- eller apple-bce-modulet til automatisk indlæsning: /etc/modules-load.d/bce.conf
bceHvis du vil bruge Fn-tasterne som standard, så skriv følgende i filen /etc/modprobe.d/apple-tb.conf:
options apple-ib-tb fnmode=2Opdater kernen og initramfs.
mkinitcpio -p linux-mbp
Lad os installere iwd:
sudo pacman -S networkmanager iwd5. Bootloader
Når alle hovedpakker er installeret inde i chroot, kan vi begynde at installere bootloaderen.
Jeg kunne ikke få grub til at fungere. Grub starter fra en ekstern usb-disk, men når jeg prøver at installere den i nvme via
grub-install --target=x86_64-efi --efi-directory=/boot --bootloader-id=grub
systemet gik i kernel panic, og efter genstart dukkede den nye post ikke op i options. Jeg fandt ingen klar løsning på dette problem og besluttede derfor at prøve at implementere boot via systemd-boot.
- Starting
bootctl --path=/boot installog så går vi i kernel panic. Sluk MacBook'en, tænd den igen, tryk på options (usb-c hub med tastatur tilsluttet forbliver tilsluttet)
- Kontroller, at der er en ny EFI BOOT-post ud over den eksterne enhed
- Vælg opstart fra den eksterne usb-disk, ligesom ved første installation (husk at tilføje module_blacklist=thunderbolt)
- Monter vores disk og gå ind i miljøet via arch-chroot
mount /dev/nvme0n1p4 /mnt
mount /dev/nvme0n1p1 /mnt/boot
arch-chroot /mnt
Hvis du har brug for, at tastaturet fungerer før systemet er helt indlæst (det er nødvendigt ved brug af luks/dm-crypt-kryptering), så skriv følgende i filen /etc/mkinicpio.conf under MODULES:
MODULES=(ext4 applespi intel_lpss_pci spi_pxa2xx_platform bce)
Opdater kernen og initramfs.
mkinicpio -p linux-mbp
Konfigurer systemd-boot
Rediger filen /boot/loader/loader.conf, slet alt indholdet og tilføj følgende:
default arch
timeout 5
editor 1
Gå til mappen /boot/loader/entries, opret filen arch.conf, og skriv:
titel arch
linux /vmlinuz-linux-mbp
initrd /initramfs-linux-mbp.img
muligheder root=/dev/<b>nvme0n1p4</b> rw pcie_ports=compat
I tilfælde af brug af luks og lvm, så
muligheder cryptdevice=\/dev\/<b>nvme0n1p4</b>:luks root=\/dev\/mapper\/vz0-root rw pcie_ports=kompatibel
Genstart til MacOS.
6. Konfiguration af Wi-Fi
Det viste sig, at MacOS gemmer firmwarefilerne til Wi-Fi-adapteren i mappen /usr/share/firmware/wifi , og du kan hente dem derfra i form af blobs og fodre dem til kernen modul brcmfmac. For at finde ud af, hvilke filer din adapter bruger, åbner du terminalen i MacOS og skriver:
ioreg -l | grep C-4364Du får en lang liste. Vi har kun brug for filerne fra sektionen 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>"})
I dit tilfælde kan filnavnene variere. Vi kopierer dem fra mappen /usr/share/firmware/wifi til USB-drevet og omdøber dem til følgende format:
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>
I dette tilfælde indeholder den sidste tekstfil modelnavnene. Hvis din model ikke er macbookpro15,2, skal du omdøbe denne fil i overensstemmelse med din MacBooks model.
Genstarter vi i Arch.
Vi kopierer filer fra USB-drevet til mappen /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/
Vi kontrollerer modulens funktionalitet:
rmmod brcmfmac
modprobe brcmfmac
Vi sikrer os, at netværksgrænsefladen vises via ifconfig/ip.
Vi konfigurerer wifi via
Bemærk. Gennem netctl, nmcli osv. fungerer grænsefladen ikke, kun via iwd.
Vi tvinger NetworkManager til at bruge iwd. For dette opretter vi filen /etc/NetworkManager/NetworkManager.conf og skriver:
[device]
wifi.backend=iwd
Vi starter NetworkManager-tjenesten
sudo systemctl start NetworkManager.service
sudo systemctl enable NetworkManager.service
7. Lyd
For at få lyden til at fungere skal pulseaudio installeres:
sudo pacman -S pulseaudio
Vi downloader tre filer:
Vi flytter dem:
/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
I øjeblikket 16.10.2019 må vi vælge enten lyd eller suspend/resume. Vi venter på, at forfatteren af bce-modulet finjusterer funktionaliteten.
For at samle modulet med understøttelse af suspend/resume skal du udføre følgende:
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
Hvis du har installeret det færdige apple-bce modul fra repository anuli1, skal du først slette det, før du bygger og installerer bce modulet med understøttelse af suspend.
Det er også nødvendigt at tilføje applesmc-modulet til blacklist (hvis du ikke har gjort det tidligere) og sikre, at parameteren pcie_ports=compat.
I øjeblikket fejler touchbar-driveren ved ind, i suspend-tilstand, og thunderbolt-driveren fryser systemet i mere end 30 sekunder, og ved genoptagelse i flere minutter. Dette kan rettes ved automatisk at aflaste de problematiske moduler.
Opret et script /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
Gør det eksekverbart:
sudo chmod +x /lib/systemd/system-sleep/rmmod.sh Indtil videre er dette alt. Resultatet er et fuldt fungerende system, bortset fra nogle nuancer med suspend/resume. Ingen nedbrud eller kernel panic er blevet observeret i flere dages oppetid. Jeg håber, at forfatteren af bce-modulet snart vil finjustere det, så vi får fuld understøttelse af suspend/resume og lyd.
Kilde: habr.com
