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 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 , 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
Ce qui fonctionne actuellement
- NVMe
- Clavier
- USB-C (Thunderbolt non testé, le chargement automatique du module fige le système complètement)
- Touch Bar (avec possibilité d'activer les touches Fn, rétroéclairage, ESC, etc.)
- Son (uniquement les haut-parleurs intégrés)
- Module Wi-Fi (via brcmfmac et uniquement via iw)
- DisplayPort via USB-C
- Capteurs
- Suspendre/Reprendre (partiellement)
- etc..
Ce tutoriel s'applique aux macbookpro15,1 et macbookpro15,2. Il est basé sur un article GitHub en anglais . 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
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. .
3. Création de l'image iso
Options :
- 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
- Créer l'image vous-même via archlive (un système avec le distrib d'Arch est nécessaire)
Nous installons
pacman -S archisocp -r /usr/share/archiso/configs/releng/ archlive cd archliveAjoutons le dépôt dans pacman.conf :
[mbp] Server = https://packages.aunali1.com/archlinux/$repo/$archIgnorons le noyau original dans pacman.conf :
IgnorePkg = linux linux-headersAjoutons les paquets nécessaires, à la fin ajoutons le noyau linux-mbp et linux-mbp-headers
... wvdial xl2tpd linux-mbp linux-mbp-headersModifions 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 -vAppuyez 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 ou .
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 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-gitDans 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
bceSi 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=2Mettez à jour le noyau et l'initramfs.
mkinitcpio -p linux-mbp
Installons iwd :
sudo pacman -S networkmanager iwd5. 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.
- Lançons
bootctl --path=/boot installet 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)
- Vérifiez qu'une nouvelle entrée EFI BOOT est apparue en plus du dispositif externe
- 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)
- 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-4364Vous 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 -> 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 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
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.rules8. 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
