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
