Faire fonctionner le MacBook Pro 2018 T2 avec ArchLinux (double démarrage)

Il y a eu beaucoup de battage médiatique sur le fait que la nouvelle puce T2 rendrait impossible l'installation de Linux sur les nouveaux MacBook 2018 dotés d'une barre tactile. Le temps a passé et fin 2019, des développeurs tiers ont implémenté un certain nombre de pilotes et de correctifs de noyau pour interagir avec la puce T2. Le pilote principal pour les modèles MacBook 2018 et plus récents implémente le fonctionnement VHCI (fonctionnement tactile/clavier/etc.), ainsi que le fonctionnement sonore.

Projet mbp2018-bridge-drv divisé en 3 composantes principales :

  • BCE (Buffer Copy Engine) - établit le canal de communication principal avec T2. VHCI et Audio nécessitent ce composant.
  • VHCI est un contrôleur hôte virtuel USB ; le clavier, la souris et les autres composants du système sont fournis par ce composant (d'autres pilotes utilisent ce contrôleur hôte pour fournir plus de fonctionnalités.
  • Audio - pilote pour l'interface audio T2, ne prend actuellement en charge que la sortie audio via les haut-parleurs intégrés du MacBook


Le deuxième projet s'appelle pilote macbook12-spi, et il implémente la possibilité d'utiliser un pilote d'entrée pour le clavier, le trackpad SPI et la barre tactile pour MacBook Pro fin 2016 et versions ultérieures. Certains pilotes de clavier/trackpad sont désormais inclus dans le noyau, à partir de la version 5.3.

La prise en charge de périphériques tels que le Wi-Fi, le pavé tactile, etc. a également été implémentée à l'aide de correctifs du noyau. Version actuelle du noyau 5.3.5-1

Qu'est-ce qui fonctionne en ce moment

  1. NVMe
  2. clavier
  3. USB-C (Thunderbolt n'a pas été testé ; lorsque le module est chargé automatiquement, il fige le système)
  4. Touchbar (avec possibilité d'activer les touches Fn, le rétroéclairage, ESC, etc.)
  5. Son (haut-parleurs intégrés uniquement)
  6. Module Wi-Fi (via brcmfmac et uniquement via iw)
  7. DisplayPort sur USB-C
  8. Capteurs
  9. Suspendre/Reprendre (partiellement)
  10. etc..

Ce didacticiel s'applique aux macbookpro15,1 et macbookpro15,2. L'article a été pris comme base sur Github en anglais. par conséquent,. Tout dans cet article n’a pas fonctionné, j’ai donc dû trouver une solution moi-même.

Ce que vous devez installer

  • Adaptateur d'accueil USB-C vers USB (au moins trois entrées USB pour connecter une souris, un clavier, un modem USB ou un téléphone en mode partage de connexion). Ceci n'est nécessaire que pendant les premières étapes de l'installation
  • Clavier USB
  • Clé USB/USB-C d'au moins 4 Go

1. Désactivez l'interdiction de démarrer à partir d'un support externe

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

2. Allouez de l'espace libre à l'aide de l'Utilitaire de disque

Pour plus de commodité, j'ai immédiatement alloué 30 Go au disque, en le formatant en exfat dans l'Utilitaire de disque lui-même. Partitionnement d'un disque physique Utilitaire de disque.

3. Créez une image ISO

Les options sont les suivantes:

  1. Vous pouvez suivre la voie la plus simple et télécharger une image prête à l'emploi avec le noyau 5.3.5-1 et les correctifs à partir de aunali1 lien vers l'image terminée
  2. Créez vous-même une image via archlive (un système avec une distribution Archa est requis)

    Fixer archiso

    pacman -S archiso

    
    cp -r /usr/share/archiso/configs/releng/ archlive
    cd archlive
    

    Ajoutez le référentiel à pacman.conf :

    
    [mbp]
    Server = https://packages.aunali1.com/archlinux/$repo/$arch
    

    Nous ignorons le noyau d'origine dans pacman.conf :

    IgnorePkg   = linux linux-headers
    

    Ajoutez les packages nécessaires, à la fin ajoutez le noyau linux-mbp et les en-têtes linux-mbp

    ...
    wvdial
    xl2tpd
    linux-mbp
    linux-mbp-headers
    

    Nous modifions le script pour qu'il fonctionne en mode interactif (remplacez pacstrap -C par 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!"
    }

    Former une image :

    sudo ./build.sh -v

    Appuyez sur Y pour ignorer les packages ignorés, puis écrivez l'image ISO sur la clé USB :

    sudo dd if=out/archlinux*.iso of=/dev/sdb bs=1M

4. Premier démarrage

Redémarrez avec le lecteur flash et le clavier insérés. Appuyez sur options lorsque la pomme apparaît, sélectionnez EFI BOOT.

Ensuite, vous devez appuyer sur la touche « e » et entrer à la fin de la ligne de commande module_blacklist=coup de tonnerre. Si cela n'est pas fait, le système risque de ne pas démarrer et une erreur Thunderbolt ICM apparaîtra.

En utilisant fdisk/cfdisk, nous trouvons notre partition (pour moi c'est nvme0n1p4), la formatons et installons l'archive. Vous pouvez utiliser instruction officielle ou de côté.

Nous ne créons pas de partition de démarrage ; nous écrirons le chargeur de démarrage dans / dev / nvme0n1p1
Une fois l’environnement dans /mnt complètement formé et avant de passer à arch-chroot, écrivez :

mount /dev/nvme0n1p1 /mnt/boot
arch-chroot /mnt /bin/bash

Ajouter à /etc/pacman.conf :


[mbp]
Server = https://packages.aunali1.com/archlinux/$repo/$arch

Installez le noyau :


sudo pacman -S linux-mbp linux-mbp-headers
sudo mkinitcpio -p linux-mbp

Nous enregistrons Thunderbolt et Applesmc dans /etc/modprobe.d/blacklist.conf

blacklist thunderbolt
blacklist applesmc

Clavier, barre tactile, etc.

Installez oui :


sudo pacman -S git gcc make fakeroot binutils
git clone https://aur.archlinux.org/yay.git
cd yay
makepkg -si

Installation de modules pour que la barre tactile fonctionne :


git clone --branch mbp15 https://github.com/roadrunner2/macbook12-spi-driver.git
cd macbook12-spi-driver
make install

Ajouter des modules au démarrage : /etc/modules-load.d/apple.conf

industrialio_triggered_buffer
apple-ibridge
apple-ib-tb
apple-ib-als

Installation des modules du noyau pour le clavier. Dans le dépôt annuel1 il existe un package prêt à l'emploi, il s'appelle pomme-bce-dkms-git. Pour l'installer, écrivez dans la console :

pacman -S apple-bce-dkms-git

Dans ce cas, le module noyau sera appelé pomme-bce. Dans le cas de l'auto-assemblage, on parle de BCE. Par conséquent, si vous souhaitez enregistrer un module dans la section MODULES du fichier mkinicpio.conf, n'oubliez pas quel module vous avez installé.

Assemblage manuel :


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

Ajoutez le module bce ou apple-bce au démarrage : /etc/modules-load.d/bce.conf

bce

Si vous souhaitez utiliser les boutons Fn par défaut, écrivez dans le fichier /etc/modprobe.d/apple-tb.conf :

options apple-ib-tb fnmode=2

Mise à jour du noyau et d'initramfs.


mkinitcpio -p linux-mbp

Installez iwd :

sudo pacman -S networkmanager iwd

5. Chargeur

Une fois que tous les packages principaux sont installés dans le chroot, vous pouvez commencer à installer le chargeur de démarrage.

Je n'ai pas réussi à faire fonctionner la nourriture. Grub démarre à partir d'un lecteur USB externe, mais lorsque vous essayez de l'enregistrer dans NVME via

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

le système est entré en panique du noyau et après le redémarrage, un nouvel élément via les options n'est pas apparu. Je n'ai trouvé aucune solution claire à ce problème et j'ai donc décidé d'essayer d'implémenter le démarrage à l'aide de systemd-boot.

  1. Run
    bootctl --path=/boot install

    et nous entrons dans la panique du noyau. Éteignez le MacBook, rallumez-le, cliquez sur options (n'éteignez pas le hub USB-C avec le clavier)

  2. On vérifie qu'une nouvelle entrée EFI BOOT est apparue en plus du périphérique externe
  3. On choisit de démarrer depuis une clé USB externe, comme lors de la première installation (n'oubliez pas de préciser module_blacklist=thunderbolt)
  4. Nous montons notre disque et entrons dans l'environnement via arch-chroot


mount /dev/nvme0n1p4 /mnt
mount /dev/nvme0n1p1 /mnt/boot
arch-chroot /mnt

S'il est nécessaire que le clavier fonctionne jusqu'à ce que le système soit complètement chargé (cela est nécessaire lors de l'utilisation du cryptage luks/dm-crypt), alors écrivez-le dans le fichier /etc/mkinicpio.conf dans la section MODULES :

MODULES=(ext4 applespi intel_lpss_pci spi_pxa2xx_platform bce)

Mise à jour du noyau et d'initramfs.


mkinicpio -p linux-mbp

Configuration du démarrage système

Nous modifions le fichier /boot/loader/loader.conf, supprimons tout ce qu'il contient et ajoutons ce qui suit :

default arch
timeout 5
editor 1

Allez dans le dossier /boot/loader/entries, créez le fichier arch.conf et écrivez :

title arch
linux /vmlinuz-linux-mbp
initrd /initramfs-linux-mbp.img
options root=/dev/<b>nvme0n1p4</b> rw pcie_ports=compat

Si vous avez utilisé luks et lvm, alors

options cryptdevice=/dev/<b>nvme0n1p4</b>:luks root=/dev/mapper/vz0-root rw pcie_ports=compat

Redémarrez sous MacOS.

6. Configuration Wi-Fi

Il s'est finalement avéré que MacOS stocke les fichiers du micrologiciel de l'adaptateur Wi-Fi dans le dossier /usr/share/firmware/wifi , et vous pouvez les récupérer à partir de là sous forme de blobs et les transmettre au module du noyau brcmfmac. Afin de savoir quels fichiers votre adaptateur utilise, ouvrez un terminal sous MacOS et écrivez :

ioreg -l | grep C-4364

Nous obtenons une longue liste. Nous n'avons besoin que des fichiers de la section Fichiers demandés:

"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>"})

Dans votre cas, les noms de fichiers peuvent différer. Copiez-les du dossier /usr/share/firmware/wifi sur la clé USB et renommez-les comme suit :

    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>

Dans ce cas, le dernier fichier texte contient les noms des modèles ; si votre modèle n'est pas macbookpro15,2, alors vous devez renommer ce fichier en fonction de votre modèle de MacBook.

Redémarrez dans Arch.

Copiez les fichiers du lecteur flash vers le dossier /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/

Vérification de la fonctionnalité du module :


rmmod brcmfmac
modprobe brcmfmac

Nous nous assurons que l'interface réseau apparaît via ifconfig/ip.
Configuration du wifi via iwctl

Attention. Via netctl, nmcli, etc. L'interface ne fonctionne pas, uniquement via iwd.

Nous forçons NetworkManager à utiliser iwd. Pour cela, créez le fichier /etc/NetworkManager/NetworkManager.conf et écrivez :

[device]
wifi.backend=iwd

Démarrez le service NetworkManager


sudo systemctl start NetworkManager.service
sudo systemctl enable NetworkManager.service

7. Son

Pour que le son fonctionne, vous devez installer pulseaudio :


sudo pacman -S pulseaudio

Téléchargez trois fichiers :

Déplaçons-les :

    /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. Suspendre/Reprendre

Actuellement 16.10.2019 vous devez choisir soit le son, soit suspendre/reprendre. Nous attendons que l'auteur du module bce complète la fonctionnalité.

Pour créer un module avec prise en charge suspendue/reprise, vous devez procéder comme suit :


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

Si vous avez installé le module apple-bce prêt à l'emploi à partir du référentiel annuali1, vous devez d'abord le supprimer, puis assembler et installer le module bce avec prise en charge du mode suspension.

De plus, vous devez ajouter le module applesmc à la liste noire (si vous ne l'avez pas déjà fait) et vous assurer que dans /boot/loader/entries/arch.conf dans la ligne d'options à la fin, le paramètre est ajouté pcie_ports=compat.

Actuellement, le pilote de la barre tactile plante lors du passage en mode suspension, et le pilote Thunderbolt gèle parfois le système pendant plus de 30 secondes et pendant plusieurs minutes lors de la reprise. Cela peut être résolu en déchargeant automatiquement les modules problématiques.

Créer un script /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

Rendez-le exécutable :

sudo chmod +x /lib/systemd/system-sleep/rmmod.sh

C'est tout pour le moment. Le résultat est un système tout à fait fonctionnel, à l'exception de quelques nuances avec suspension/reprise. Aucun crash ni panique du noyau n'a été observé pendant plusieurs jours de disponibilité. J'espère que dans un avenir proche, l'auteur du module bce le terminera et que nous obtiendrons un support complet pour la suspension/reprise et le son.

Source: habr.com

Ajouter un commentaire