Faire fonctionner le MacBook Pro 2018 T2 avec ArchLinux (dualboot)

Il y a eu beaucoup de rumeurs concernant l'impossibilité d'installer linux sur les nouveaux MacBook 2018 avec Touch Bar en raison de la nouvelle puce T2. Avec le temps, à la fin de 2019, des développeurs tiers ont créé une série de pilotes et de patches du noyau pour interagir avec la puce T2. Le pilote principal pour les modÚles de MacBook 2018 et plus récents permet le fonctionnement de VHCI (fonctionnement du Touch Bar/clavier/etc.), ainsi que le son.

Projet mbp2018-bridge-drv divisé en 3 composants principaux :

  • BCE (Buffer Copy Engine) — Ă©tablit le canal principal de communication avec le T2. VHCI et Audio nĂ©cessitent ce composant.
  • VHCI — c'est un contrĂŽleur hĂŽte USB virtuel ; le clavier, la souris et d'autres composants du systĂšme sont fournis par ce composant (d'autres pilotes utilisent ce contrĂŽleur hĂŽte pour une fonctionnalitĂ© accrue.
  • Audio — pilote pour l'interface audio T2, actuellement supportĂ© uniquement pour la sortie audio via les haut-parleurs intĂ©grĂ©s du MacBook.


Le deuxiÚme projet s'appelle macbook12-spi-driver, et il permet le fonctionnement du pilote d'entrée pour le clavier, le trackpad SPI, le Touch Bar pour le MacBook Pro de fin 2016 et plus récents. Une partie des pilotes pour le clavier/trackpad est maintenant intégrée dans le noyau, à partir de la version 5.3.

Un support a également été mis en place pour des dispositifs tels que le wi-fi, le trackpad, etc., grùce à des patches du noyau. Actuellement, la version du noyau 5.3.5-1

Ce qui fonctionne actuellement

  1. NVMe
  2. Clavier
  3. USB-C (Thunderbolt non testé, le chargement automatique du module fige le systÚme complÚtement)
  4. Touch Bar (avec possibilité d'activer les touches Fn, rétroéclairage, ESC, etc.)
  5. Son (uniquement les haut-parleurs intégrés)
  6. Module Wi-Fi (via brcmfmac et uniquement via iw)
  7. DisplayPort via USB-C
  8. Capteurs
  9. Suspendre/Reprendre (partiellement)
  10. etc..

Ce tutoriel s'applique aux macbookpro15,1 et macbookpro15,2. Il est basĂ© sur un article GitHub en anglais d'ici. Tout n'a pas fonctionnĂ© selon cet article, donc j'ai dĂ» chercher des solutions par moi-mĂȘme.

Ce qui est nécessaire pour l'installation

  • Adaptateur USB-C vers USB (au moins trois ports USB pour connecter souris, clavier, modem USB ou tĂ©lĂ©phone en mode tethering). Ceci n'est nĂ©cessaire que lors des premiĂšres Ă©tapes de l'installation.
  • Clavier USB
  • ClĂ© USB/USB-C d'au moins 4 Go

1. Désactiver l'interdiction de démarrage à partir de dispositifs externes

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

2. Allouer de l'espace libre avec l'Utilitaire de disque

Pour plus de commodité, j'ai déjà alloué 30 Go sur le disque, en le formatant en exfat dans l'Utilitaire de disque. Partitionnement du disque physique avec Disk Utility.

3. Création de l'image iso

Options :

  1. Vous pouvez choisir la voie simple et tĂ©lĂ©charger l'image prĂȘte avec le noyau 5.3.5-1 et les patches de aunali1 lien vers l'image prĂȘte
  2. CrĂ©er l'image vous-mĂȘme via archlive (un systĂšme avec le distrib d'Arch est nĂ©cessaire)

    Nous installons archiso

    pacman -S archiso

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

    Ajoutons le dépÎt dans pacman.conf :

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

    Ignorons le noyau original dans pacman.conf :

    IgnorePkg   = linux linux-headers
    

    Ajoutons les paquets nécessaires, à la fin ajoutons le noyau linux-mbp et linux-mbp-headers

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

    Modifions le script pour fonctionner en mode interactif (remplaçons 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!"
    }

    Création de l'image :

    sudo ./build.sh -v

    Appuyez sur Y pour ignorer les paquets, puis écrivons 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 la clé insérée et le clavier. Appuyez sur options lorsque le logo Apple apparaßt, choisissez EFI BOOT.

Ensuite, il est nécessaire d'appuyer sur la touche « e » et de saisir à la fin de la ligne de commande module_blacklist=thunderbolt. Si cela n'est pas fait, le systÚme peut ne pas démarrer et une erreur Thunderbolt ICM Error apparaßtra.

Avec fdisk/cfdisk, nous trouvons notre partition (pour moi, c'est nvme0n1p4), formatons et installons Arch. Vous pouvez consulter la documentation officielle ou tierce.

Nous ne créons pas de partition de démarrage, le chargeur sera écrit dans /dev/nvme0n1p1
AprÚs avoir complÚtement créé l'environnement dans /mnt et avant de passer à arch-chroot, écrivons :

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

Ajoutons dans /etc/pacman.conf :


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

Nous installons le noyau :


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

Écrivons thunderbolt et applesmc dans /etc/modprobe.d/blacklist.conf

blacklist thunderbolt
blacklist applesmc

Clavier, touch bar, etc.

Nous installons yay :


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

Nous installons les modules pour le fonctionnement de la touch bar :


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

Ajoutons les modules au démarrage automatique : /etc/modules-load.d/apple.conf

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

Nous installons les modules du noyau pour faire fonctionner le clavier. Dans le dĂ©pĂŽt anuali1 il y a un paquet prĂȘt, il s'appelle apple-bce-dkms-git. Pour l'installer, Ă©crivons dans la console :

pacman -S apple-bce-dkms-git

Dans ce cas, le module du noyau s'appellera apple-bce. En cas de construction autonome, il s'appelle bce. Par conséquent, si vous souhaitez ajouter un module dans la section MODULES du fichier mkinicpio.conf, n'oubliez pas quel module vous avez installé.

Compilation manuelle :


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 automatique : /etc/modules-load.d/bce.conf

bce

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

options apple-ib-tb fnmode=2

Mettez Ă  jour le noyau et l'initramfs.


mkinitcpio -p linux-mbp

Installons iwd :

sudo pacman -S networkmanager iwd

5. Le chargeur de démarrage

AprÚs l'installation de tous les paquets principaux dans le chroot, nous pouvons procéder à l'installation du chargeur de démarrage.

Je n'ai pas réussi à faire fonctionner grub. Grub démarre à partir d'une clé USB externe, mais lors de la tentative de l'installer sur nvme via

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

le systÚme tombait dans une panique du noyau, et aprÚs le redémarrage, il n'y avait plus de nouveau point par options. Je n'ai pas trouvé de solution claire à ce problÚme et j'ai donc décidé d'essayer de démarrer avec systemd-boot.

  1. Lançons
    bootctl --path=/boot install

    et tombons dans une panique du noyau. Éteignez le MacBook, rallumez-le, appuyez sur options (ne dĂ©connectez pas le hub usb-c avec le clavier)

  2. Vérifiez qu'une nouvelle entrée EFI BOOT est apparue en plus du dispositif externe
  3. Choisissez de démarrer à partir de la clé USB externe, comme lors de la premiÚre installation (n'oubliez pas d'ajouter module_blacklist=thunderbolt)
  4. Montez notre disque et passez dans l'environnement via arch-chroot


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

Si nécessaire, pour que le clavier fonctionne avant le démarrage complet du systÚme (ce qui est nécessaire en cas d'utilisation du cryptage luks/dm-crypt), vous devez l'écrire dans le fichier /etc/mkinicpio.conf dans la section MODULES :

MODULES=(ext4 applespi intel_lpss_pci spi_pxa2xx_platform bce)

Mettez Ă  jour le noyau et l'initramfs.


mkinicpio -p linux-mbp

Configurons systemd-boot

Éditez le fichier /boot/loader/loader.conf, supprimez tout ce qui s'y trouve, et introduisez ce qui suit :

default arch
timeout 5
editor 1

Accédez au dossier /boot/loader/entries, créez le fichier arch.conf et écrivez :

titre arch
linux \/vmlinuz-linux-mbp
initrd \/initramfs-linux-mbp.img
options racine=\/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 sur MacOS.

6. Configuration Wi-Fi

Comme il s'est finalement révélé, les fichiers de firmware pour l'adaptateur wi-fi sont stockés dans le dossier /usr/share/firmware/wifi , et vous pouvez les prendre sous forme de blobs et les fournir au module noyau brcmfmac. Pour savoir quels fichiers votre adaptateur utilise, ouvrez le terminal dans MacOS et écrivez :

ioreg -l | grep C-4364

Vous obtiendrez une longue liste. Nous avons besoin des fichiers uniquement dans la section 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>"})

Dans votre cas, les noms de fichiers peuvent différer. Nous les copions depuis le dossier /usr/share/firmware/wifi sur la clé USB et les renommés comme suit :

    maui.trx -&gt; brcmfmac4364-pcie.bin
    maui-X3.clmb -&gt; brcmfmac4364-pcie.clm_blob
    P-maui-X3_M-HRPN_V-m__m-7.7.txt -&gt; brcmfmac4364-pcie.Apple Inc.<b>MacBookPro15,2.txt</b>

Dans ce cas, le dernier fichier texte contient les noms de modÚle. Si votre modÚle n'est pas macbookpro15,2, il est nécessaire de renommer ce fichier en fonction de votre modÚle de MacBook.

Nous redémarrons sur Arch.

Nous copions les fichiers de la clé USB dans 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érifions le bon fonctionnement du module :


rmmod brcmfmac
modprobe brcmfmac

Assurons-nous que l'interface réseau est apparue avec ifconfig/ip.
Nous configurons le wifi avec iwctl

Attention. Via netctl, nmcli, etc. l'interface ne fonctionne pas, seulement via iwd.

Nous faisons en sorte que NetworkManager utilise iwd. Pour cela, nous créons le fichier /etc/NetworkManager/NetworkManager.conf et écrivons :

[device]
wifi.backend=iwd

Nous démarrons 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échargeons trois fichiers :

Nous les déplaçons :

    /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/Réveiller

Actuellement, 16.10.2019 il faut choisir entre le son et la suspension/le réveil. Attendons que l'auteur du module bce peaufine la fonctionnalité.

Pour compiler le module avec le support de la suspension/réveil, il faut faire ce qui 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écompilé depuis le dépÎt anuali1, il est nécessaire de le supprimer au préalable, puis de compiler et d'installer le module bce avec le support de la suspension.

De plus, il est nécessaire d'ajouter le module applesmc à la liste noire (si ce n'est pas déjà fait) et de vous assurer que dans /boot/loader/entries/arch.conf, l'option à la fin de la ligne options inclut le paramÚtre pcie_ports=compat.

Actuellement, le pilote de la barre tactile plante lors de l'entrĂ©e en mode de suspension, et le pilote thunderbolt suspend parfois le systĂšme pendant plus de 30 secondes, et lors du rĂ©veil — pendant plusieurs minutes. Cela peut ĂȘtre corrigĂ© par le dĂ©chargement automatique des modules problĂ©matiques.

Créez un 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

Rendez-le exécutable :

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

C'est tout pour l'instant. Au final, nous obtenons un systÚme assez fonctionnel, à l'exception de quelques nuances avec la suspension/le réveil. Aucun plantage ou kernel panic n'a été observé pendant plusieurs jours de disponibilité. J'espÚre que bientÎt l'auteur du module bce l'améliorera, et que nous aurons un support complet de la suspension/le réveil et du son.

Source : habr.com

Acheter un hĂ©bergement fiable pour les sites avec protection DDoS, serveurs VPS VDS đŸ”„ Acheter un hĂ©bergement fiable pour les sites avec protection DDoS, serveurs VPS VDS | ProHoster