Υπήρξε αρκετή διαφημιστική εκστρατεία σχετικά με το γεγονός ότι το νέο τσιπ T2 θα καταστήσει αδύνατη την εγκατάσταση Linux στα νέα MacBook του 2018 με γραμμή αφής. Ο χρόνος πέρασε και στο τέλος του 2019, τρίτοι προγραμματιστές εφάρμοσαν έναν αριθμό προγραμμάτων οδήγησης και ενημερώσεις κώδικα πυρήνα για αλληλεπίδραση με το τσιπ T2. Το κύριο πρόγραμμα οδήγησης για τα μοντέλα MacBook 2018 και νεότερα υλοποιεί τη λειτουργία VHCI (λειτουργία αφής/πληκτρολογίου/κ.λπ.), καθώς και τη λειτουργία ήχου.
Σχέδιο χωρίζεται σε 3 κύρια συστατικά:
- BCE (Buffer Copy Engine) - δημιουργεί το κύριο κανάλι επικοινωνίας με το T2. Το VHCI και το Audio απαιτούν αυτό το στοιχείο.
- Το VHCI είναι ένας ελεγκτής εικονικού κεντρικού υπολογιστή USB. το πληκτρολόγιο, το ποντίκι και άλλα στοιχεία συστήματος παρέχονται από αυτό το στοιχείο (άλλα προγράμματα οδήγησης χρησιμοποιούν αυτόν τον ελεγκτή κεντρικού υπολογιστή για να παρέχουν περισσότερη λειτουργικότητα.
- Ήχος - πρόγραμμα οδήγησης για τη διεπαφή ήχου T2, προς το παρόν υποστηρίζει μόνο έξοδο ήχου μέσω των ενσωματωμένων ηχείων του MacBook
Το δεύτερο έργο ονομάζεται , και εφαρμόζει τη δυνατότητα χειρισμού ενός προγράμματος οδήγησης εισόδου για το πληκτρολόγιο, το SPI trackpad και τη γραμμή αφής για τα τέλη του 2016 και μεταγενέστερα MacBook Pro. Ορισμένα προγράμματα οδήγησης πληκτρολογίου/trackpad περιλαμβάνονται πλέον στον πυρήνα, ξεκινώντας από την έκδοση 5.3.
Η υποστήριξη για συσκευές όπως wi-fi, touchpad κ.λπ. υλοποιήθηκε επίσης με τη χρήση ενημερώσεων κώδικα πυρήνα. Τρέχουσα έκδοση πυρήνα
Τι λειτουργεί αυτή τη στιγμή
- NVMe
- πληκτρολόγιο
- USB-C (Το Thunderbolt δεν έχει δοκιμαστεί, όταν η μονάδα φορτώνεται αυτόματα, παγώνει το σύστημα)
- Touchbar (με δυνατότητα ενεργοποίησης των πλήκτρων Fn, οπίσθιου φωτισμού, ESC κ.λπ.)
- Ήχος (μόνο ενσωματωμένα ηχεία)
- Μονάδα Wi-Fi (μέσω brcmfmac και μόνο μέσω iw)
- DisplayPort μέσω USB-C
- Αισθητήρες
- Αναστολή/Συνέχιση (μερική)
- και τα λοιπά..
Αυτό το σεμινάριο ισχύει για τα macbookpro15,1 και macbookpro15,2. Το άρθρο ελήφθη ως βάση από το Github στα αγγλικά. . Δεν λειτούργησαν όλα σε αυτό το άρθρο, οπότε έπρεπε να βρω μια λύση μόνος μου.
Τι χρειάζεστε για την εγκατάσταση
- Προσαρμογέας σύνδεσης USB-C σε USB (τουλάχιστον τρεις είσοδοι USB για σύνδεση ποντικιού, πληκτρολογίου, μόντεμ USB ή τηλεφώνου σε λειτουργία tethering). Αυτό είναι απαραίτητο μόνο κατά τα πρώτα στάδια εγκατάστασης
- Πληκτρολόγιο USB
- Μονάδα flash USB/USB-C τουλάχιστον 4 GB
1. Απενεργοποιήστε την απαγόρευση εκκίνησης από εξωτερικά μέσα
2. Εκχωρήστε ελεύθερο χώρο χρησιμοποιώντας το Disk Utility
Για ευκολία, διέθεσα αμέσως 30 GB στο δίσκο, διαμορφώνοντάς τον σε exfat στο ίδιο το Disk Utility. .
3. Δημιουργήστε μια εικόνα ISO
Επιλογές:
- Μπορείτε να ακολουθήσετε την απλή διαδρομή και να κατεβάσετε μια έτοιμη εικόνα με τον πυρήνα 5.3.5-1 και patches από
- Δημιουργήστε μια εικόνα μόνοι σας μέσω archlive (απαιτείται σύστημα με διανομή Archa)
Σετ
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
... 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 στη μονάδα flash USB:
sudo dd if=out/archlinux*.iso of=/dev/sdb bs=1M
4. Πρώτη μπότα
Κάντε επανεκκίνηση με τη μονάδα flash και το πληκτρολόγιο τοποθετημένα. Πατήστε επιλογές όταν εμφανιστεί το μήλο, επιλέξτε EFI BOOT.
Στη συνέχεια, πρέπει να πατήσετε το πλήκτρο "e" και να εισαγάγετε στο τέλος της γραμμής εντολών module_blacklist=κεραυνός. Εάν αυτό δεν γίνει, το σύστημα ενδέχεται να μην εκκινήσει και θα εμφανιστεί ένα σφάλμα Thunderbolt ICM.
Χρησιμοποιώντας το fdisk/cfdisk βρίσκουμε το διαμέρισμα μας (για μένα είναι nvme0n1p4), το μορφοποιούμε και εγκαθιστούμε το αρχείο. Μπορείς να χρησιμοποιήσεις ή .
Δεν δημιουργούμε ένα διαμέρισμα εκκίνησης, θα γράψουμε το bootloader μέσα /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. Στην περίπτωση της αυτοσυναρμολόγησης, ονομάζεται ECB. Αντίστοιχα, εάν θέλετε να καταχωρίσετε μια λειτουργική μονάδα στην ενότητα ΜΟΝΑΔΕΣ του αρχείου 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, μπορείτε να ξεκινήσετε την εγκατάσταση του bootloader.
Δεν κατάφερα να φέρω το grub στη δουλειά. Grub εκκινεί από μια εξωτερική μονάδα USB, αλλά όταν προσπαθείτε να την καταχωρήσετε στο nvme μέσω
grub-install --target=x86_64-efi --efi-directory=/boot --bootloader-id=grub
το σύστημα μπήκε σε πανικό στον πυρήνα και μετά την επανεκκίνηση δεν εμφανίστηκε ένα νέο στοιχείο μέσω επιλογών. Δεν βρήκα καμία ξεκάθαρη λύση σε αυτό το πρόβλημα και ως εκ τούτου αποφάσισα να προσπαθήσω να εφαρμόσω την εκκίνηση χρησιμοποιώντας το systemd-boot.
- Εκκίνηση
bootctl --path=/boot installκαι μπαίνουμε σε πανικό πυρήνα. Απενεργοποιήστε το MacBook, ενεργοποιήστε το ξανά, κάντε κλικ στις επιλογές (μην απενεργοποιήσετε τον διανομέα 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 και γράψτε:
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 , και μπορείτε να τα πάρετε από εκεί με τη μορφή 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 στη μονάδα flash και μετονομάστε τα ως εξής:
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.
Αντιγράψτε τα αρχεία από τη μονάδα flash στο φάκελο /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. Αναστολή/Συνέχιση
Αυτή τη στιγμή 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.
Επί του παρόντος, το πρόγραμμα οδήγησης της γραμμής αφής κολλάει κατά την είσοδο σε λειτουργία αναστολής και το πρόγραμμα οδήγησης κεραυνού μερικές φορές παγώνει το σύστημα για περισσότερα από 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 Αυτα για τωρα. Το αποτέλεσμα είναι ένα πλήρως εφαρμόσιμο σύστημα, με εξαίρεση κάποιες αποχρώσεις με αναστολή/συνέχιση. Δεν παρατηρήθηκαν συντριβές ή πανικοί πυρήνων κατά τη διάρκεια αρκετών ημερών λειτουργίας. Ελπίζω ότι στο εγγύς μέλλον ο συγγραφέας της ενότητας bce θα το ολοκληρώσει και θα έχουμε πλήρη υποστήριξη για suspend/resume και ήχο.
Πηγή: www.habr.com
