Κάνοντας το MacBook Pro 2018 T2 να λειτουργεί με το ArchLinux (dualboot)

Υπήρξε αρκετή διαφημιστική εκστρατεία σχετικά με το γεγονός ότι το νέο τσιπ T2 θα καταστήσει αδύνατη την εγκατάσταση Linux στα νέα MacBook του 2018 με γραμμή αφής. Ο χρόνος πέρασε και στο τέλος του 2019, τρίτοι προγραμματιστές εφάρμοσαν έναν αριθμό προγραμμάτων οδήγησης και ενημερώσεις κώδικα πυρήνα για αλληλεπίδραση με το τσιπ T2. Το κύριο πρόγραμμα οδήγησης για τα μοντέλα MacBook 2018 και νεότερα υλοποιεί τη λειτουργία VHCI (λειτουργία αφής/πληκτρολογίου/κ.λπ.), καθώς και τη λειτουργία ήχου.

Σχέδιο mbp2018-bridge-drv χωρίζεται σε 3 κύρια συστατικά:

  • 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

Τι λειτουργεί αυτή τη στιγμή

  1. NVMe
  2. πληκτρολόγιο
  3. USB-C (Το Thunderbolt δεν έχει δοκιμαστεί, όταν η μονάδα φορτώνεται αυτόματα, παγώνει το σύστημα)
  4. Touchbar (με δυνατότητα ενεργοποίησης των πλήκτρων Fn, οπίσθιου φωτισμού, ESC κ.λπ.)
  5. Ήχος (μόνο ενσωματωμένα ηχεία)
  6. Μονάδα Wi-Fi (μέσω brcmfmac και μόνο μέσω iw)
  7. DisplayPort μέσω USB-C
  8. Αισθητήρες
  9. Αναστολή/Συνέχιση (μερική)
  10. και τα λοιπά..

Αυτό το σεμινάριο ισχύει για τα macbookpro15,1 και macbookpro15,2. Το άρθρο ελήφθη ως βάση από το Github στα αγγλικά. ως εκ τούτου,. Δεν λειτούργησαν όλα σε αυτό το άρθρο, οπότε έπρεπε να βρω μια λύση μόνος μου.

Τι χρειάζεστε για την εγκατάσταση

  • Προσαρμογέας σύνδεσης USB-C σε USB (τουλάχιστον τρεις είσοδοι USB για σύνδεση ποντικιού, πληκτρολογίου, μόντεμ USB ή τηλεφώνου σε λειτουργία tethering). Αυτό είναι απαραίτητο μόνο κατά τα πρώτα στάδια εγκατάστασης
  • Πληκτρολόγιο USB
  • Μονάδα flash USB/USB-C τουλάχιστον 4 GB

1. Απενεργοποιήστε την απαγόρευση εκκίνησης από εξωτερικά μέσα

https://support.apple.com/en-us/HT208330
https://www.ninjastik.com/support/2018-macbook-pro-boot-from-usb/

2. Εκχωρήστε ελεύθερο χώρο χρησιμοποιώντας το Disk Utility

Για ευκολία, διέθεσα αμέσως 30 GB στο δίσκο, διαμορφώνοντάς τον σε exfat στο ίδιο το Disk Utility. Διαμέριση ενός βοηθητικού προγράμματος φυσικού δίσκου.

3. Δημιουργήστε μια εικόνα ISO

Επιλογές:

  1. Μπορείτε να ακολουθήσετε την απλή διαδρομή και να κατεβάσετε μια έτοιμη εικόνα με τον πυρήνα 5.3.5-1 και patches από aunali1 σύνδεσμο προς την τελική εικόνα
  2. Δημιουργήστε μια εικόνα μόνοι σας μέσω archlive (απαιτείται σύστημα με διανομή Archa)

    Σετ αρχισο

    pacman -S archiso

    
    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

Εγκαταστήστε τον πυρήνα:


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

Εγκατάσταση μονάδων πυρήνα για το πληκτρολόγιο. Στο αποθετήριο 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 μέσω

grub-install --target=x86_64-efi --efi-directory=/boot --bootloader-id=grub

το σύστημα μπήκε σε πανικό στον πυρήνα και μετά την επανεκκίνηση δεν εμφανίστηκε ένα νέο στοιχείο μέσω επιλογών. Δεν βρήκα καμία ξεκάθαρη λύση σε αυτό το πρόβλημα και ως εκ τούτου αποφάσισα να προσπαθήσω να εφαρμόσω την εκκίνηση χρησιμοποιώντας το systemd-boot.

  1. Εκκίνηση
    bootctl --path=/boot install

    και μπαίνουμε σε πανικό πυρήνα. Απενεργοποιήστε το MacBook, ενεργοποιήστε το ξανά, κάντε κλικ στις επιλογές (μην απενεργοποιήσετε τον διανομέα USB-C με πληκτρολόγιο)

  2. Ελέγχουμε ότι έχει εμφανιστεί μια νέα καταχώρηση EFI BOOT εκτός από την εξωτερική συσκευή
  3. Επιλέγουμε την εκκίνηση από μια εξωτερική μονάδα USB, όπως κατά την πρώτη εγκατάσταση (μην ξεχάσετε να καθορίσετε module_blacklist=thunderbolt)
  4. Τοποθετούμε τον δίσκο μας και πηγαίνουμε στο περιβάλλον μέσω του 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 μέσω iwctl

Προσοχή. Μέσω 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.rules

8. Αναστολή/Συνέχιση

Αυτή τη στιγμή 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 και ήχο.

Πηγή: www.habr.com

Προσθέστε ένα σχόλιο