ProHoster > Blog > διαχείριση > Κάνοντας το MacBook Pro 2018 T2 να λειτουργεί με το ArchLinux (dualboot)
Κάνοντας το MacBook Pro 2018 T2 να λειτουργεί με το ArchLinux (dualboot)
Υπήρξε αρκετή διαφημιστική εκστρατεία σχετικά με το γεγονός ότι το νέο τσιπ T2 θα καταστήσει αδύνατη την εγκατάσταση Linux στα νέα MacBook του 2018 με γραμμή αφής. Ο χρόνος πέρασε και στο τέλος του 2019, τρίτοι προγραμματιστές εφάρμοσαν έναν αριθμό προγραμμάτων οδήγησης και ενημερώσεις κώδικα πυρήνα για αλληλεπίδραση με το τσιπ T2. Το κύριο πρόγραμμα οδήγησης για τα μοντέλα MacBook 2018 και νεότερα υλοποιεί τη λειτουργία VHCI (λειτουργία αφής/πληκτρολογίου/κ.λπ.), καθώς και τη λειτουργία ήχου.
BCE (Buffer Copy Engine) - δημιουργεί το κύριο κανάλι επικοινωνίας με το T2. Το VHCI και το Audio απαιτούν αυτό το στοιχείο.
Το VHCI είναι ένας ελεγκτής εικονικού κεντρικού υπολογιστή USB. το πληκτρολόγιο, το ποντίκι και άλλα στοιχεία συστήματος παρέχονται από αυτό το στοιχείο (άλλα προγράμματα οδήγησης χρησιμοποιούν αυτόν τον ελεγκτή κεντρικού υπολογιστή για να παρέχουν περισσότερη λειτουργικότητα.
Ήχος - πρόγραμμα οδήγησης για τη διεπαφή ήχου T2, προς το παρόν υποστηρίζει μόνο έξοδο ήχου μέσω των ενσωματωμένων ηχείων του MacBook
Το δεύτερο έργο ονομάζεται Πρόγραμμα οδήγησης macbook12-spi, και εφαρμόζει τη δυνατότητα χειρισμού ενός προγράμματος οδήγησης εισόδου για το πληκτρολόγιο, το SPI trackpad και τη γραμμή αφής για τα τέλη του 2016 και μεταγενέστερα MacBook Pro. Ορισμένα προγράμματα οδήγησης πληκτρολογίου/trackpad περιλαμβάνονται πλέον στον πυρήνα, ξεκινώντας από την έκδοση 5.3.
Η υποστήριξη για συσκευές όπως wi-fi, touchpad κ.λπ. υλοποιήθηκε επίσης με τη χρήση ενημερώσεων κώδικα πυρήνα. Τρέχουσα έκδοση πυρήνα5.3.5-1
Τι λειτουργεί αυτή τη στιγμή
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. Απενεργοποιήστε την απαγόρευση εκκίνησης από εξωτερικά μέσα
Μπορείτε να ακολουθήσετε την απλή διαδρομή και να κατεβάσετε μια έτοιμη εικόνα με τον πυρήνα 5.3.5-1 και patches από aunali1σύνδεσμο προς την τελική εικόνα
Δημιουργήστε μια εικόνα μόνοι σας μέσω archlive (απαιτείται σύστημα με διανομή Archa)
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 στη μονάδα 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
Εγκατάσταση μονάδων πυρήνα για το πληκτρολόγιο. Στο αποθετήριο anuali1 υπάρχει έτοιμο πακέτο, λέγεται 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 iwd
5. Φορτωτής
Μόλις εγκατασταθούν όλα τα κύρια πακέτα μέσα στο chroot, μπορείτε να ξεκινήσετε την εγκατάσταση του bootloader.
Δεν κατάφερα να φέρω το grub στη δουλειά. Grub εκκινεί από μια εξωτερική μονάδα USB, αλλά όταν προσπαθείτε να την καταχωρήσετε στο nvme μέσω
το σύστημα μπήκε σε πανικό στον πυρήνα και μετά την επανεκκίνηση δεν εμφανίστηκε ένα νέο στοιχείο μέσω επιλογών. Δεν βρήκα καμία ξεκάθαρη λύση σε αυτό το πρόβλημα και ως εκ τούτου αποφάσισα να προσπαθήσω να εφαρμόσω την εκκίνηση χρησιμοποιώντας το 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:
Όπως αποδείχθηκε στο τέλος, το MacOS αποθηκεύει τα αρχεία υλικολογισμικού για τον προσαρμογέα wi-fi στο φάκελο /usr/share/firmware/wifi , και μπορείτε να τα πάρετε από εκεί με τη μορφή blobs και να τα τροφοδοτήσετε στη μονάδα πυρήνα brcmfmac. Για να μάθετε ποια αρχεία χρησιμοποιεί ο προσαρμογέας σας, ανοίξτε ένα τερματικό στο MacOS και γράψτε:
ioreg -l | grep C-4364
Έχουμε μια μακρά λίστα. Χρειαζόμαστε μόνο αρχεία από την ενότητα RequestedFiles:
Στην περίπτωσή σας, τα ονόματα των αρχείων μπορεί να διαφέρουν. Αντιγράψτε τα από το φάκελο /usr/share/firmware/wifi στη μονάδα flash και μετονομάστε τα ως εξής:
Σε αυτήν την περίπτωση, το τελευταίο αρχείο κειμένου περιέχει τα ονόματα των μοντέλων. Εάν το μοντέλο σας δεν είναι macbookpro15,2, τότε πρέπει να μετονομάσετε αυτό το αρχείο σύμφωνα με το μοντέλο MacBook που διαθέτετε.
Επανεκκίνηση στο Arch.
Αντιγράψτε τα αρχεία από τη μονάδα flash στο φάκελο /lib/firmware/brcm/
Βεβαιωνόμαστε ότι η διεπαφή δικτύου εμφανίζεται μέσω ifconfig/ip.
Ρύθμιση wifi μέσω iwctl
Προσοχή. Μέσω netctl, nmcli, κ.λπ. Η διεπαφή δεν λειτουργεί, μόνο μέσω iwd.
Αναγκάζουμε το NetworkManager να χρησιμοποιήσει το iwd. Για να το κάνετε αυτό, δημιουργήστε το αρχείο /etc/NetworkManager/NetworkManager.conf και γράψτε:
Αυτή τη στιγμή 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 [ "" == "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 θα το ολοκληρώσει και θα έχουμε πλήρη υποστήριξη για suspend/resume και ήχο.