Execution en root nécessaire. Crash après la programmation si l’option « -r » (reset avec flash) est utilisée, à cause de la déconnexion du device cible.
Ma Beolink 5000, après le remplacement de son écran défaillant par un afficheur E-Paper
Produite entre 1991 et 1996 par le fabricant danois Bang & Olufsen, la Beolink 5000 est une télécommande permettant de contrôler les différents appareils de la marque, ainsi que de monitorer leur état grâce à l’écran LCD translucide présent à son extrémité. Ce modèle représentait en son temps l’état de l’art dans le domaine des télécommandes multimédia.
Malheureusement, bon nombre de ces télécommandes ont maintenant 30 ans d’age, et si certains composants vieillissants sont facilement remplacés ( notamment les condensateurs électrochimiques assurant la stabilité de la communication infrarouge ), les adhésifs chargés de maintenir en place l’écran et sa nappe montrent eux aussi des signes de faiblesse, avec pour conséquence un détachement partiel ou complet de la nappe de l’écran, ce dernier perdant de ce fait ses capacités d’affichage. La grande majorité des télécommandes encore existantes sont affectées par cette maladie. Certaines fonctions qui requièrent un écran fonctionnel, telles que le paramétrage de la télécommande, ou des équipements associés, deviennent alors inutilisables.
L’exemplaire en ma possession présentait un état encore plus dramatique, l’écran complètement séparé de la télécommande, la nappe le raccordant à son électronique de contrôle s’étant déchirée sous son poids. J’ai décidé de consacré une partie de mon temps libre de l’année dernière à la conception d’un remplacement.
J’avais déjà il y a quelques temps publié un article décrivant comment installer Linux sur un MacPro 1.1 sans carte graphique ni EFI. Cet article proposait une méthode d’installation utilisant le mode de démarrage en mode « compatibilité BIOS », qui a pour principaux inconvénient de nécessiter un passage par un CD d’amorçage pour l’installation, et, une fois l’installation terminée, implique des temps de démarrage de plus d’une minute. Ayant depuis mis la main sur une carte graphique avec le firmware Apple adéquat, cet article décrit l’installation de Linux Mint avec amorçage EFI.
La méthode décrite dans cet article nécessite une carte graphique Apple fonctionnelle afin de pouvoir afficher le menu d’amorçage !
Création de la clé USB d’installation
Utiliser GParted pour créer une nouvelle table de partition GPT sur la clé USB.
Créer 2 partitions sur la clé USB :
Une partition « EFI », de type FAT32, de taille 200Mo, avec le fanion « boot »
Une partition de type ext4 occupant le reste de la clé.
Copier l’intégralité des fichiers de l’ISO d’installation sur la partition ext4.
Sur la partition EFI, créer le dossier /efi/boot, et y copier le fichier bootia32.efi. (source).
Créer également le dossier /boot/grub, et y copier les fichiers vmlinuz et initrd.lz obtenus dans le dossier casper de l’ISO d’installation. Y copier également le fichier grub.cfg obtenu dans /boot/grub.
Editer le fichier grub.cfg, y insérer le contenu suivant ( avant la première entrée de menu ) :
menuentry "Install Mint MacPro" --class linuxmint {
linux /boot/grub/vmlinuz live-media-path=/casper/ ignore_uuid root=PARTUUID=XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX boot=casper nosplash noefi --
initrd /boot/grub/initrd.lz
}
en remplaçant PARTUUID=XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX par l’identifiant de la partition où l’on a copié les fichiers de l’ISO d’installation, obtenu à l’aide de la commande blkid.
Démarrage sur la clé USB d’installation
Immédiatement après avoir appuyé sur le bouton de mise sous tension du MacPro, maintenir appuyer la touche Alt du clavier, jusqu’à l’apparition d’un menu de sélection du périphérique d’amorçage. (Cela devrait prendre environ 5 secondes après le gong sonore de démarrage ) .
Le menu de sélection du périphérique d’amorçage
Appuyer une fois sur la flèche de droite pour sélectionner le périphérique USB EFI Bootpuis appuyer sur entrée.
Le lanceur grub démarre. Appuyer sur entrée pour procéder à la sélection de la première entrée, intitulée Install Mint MacPro.
Le démarrage de l’image d’installation prend jusqu’à 5 minutes, sans que rien ne s’affiche à l’écran, cela semble normal, et est vraisemblablement due à la faible vitesse d’accès USB de l’implémentation EFI sur ces machines.
Procéder à l’installation de manière usuelle.
A la fin de l’installation, ne pas redémarrer !
Procéder au montage de la partition du disque sur lequel l’installation a été effectuée, et éditer le fichier /boot/grub/grub.cfg, et rechercher la ligne contenant les arguments noyaux pour le démarrage par défaut (Il doit s’agit de la 1ere ligne commençant par la commande linux). Y ajouter l’arguement noefisi il n’y figure pas. ( Cette modification est nécessaire pour permettre un bon démarrage du noyau ).
linux /boot/vmlinuz-5.8.0-48-generic root=UUID=dabdd8d7-32f0-46a3-9c20-ba8cf5c342aa ro quiet splash noefi
Une fois la modification effectuée (et enregistrée), redémarrer la machine.
Après l’installation
Editer le fichier /etc/default/grub pour y faire figurer la modification précédemment effectuée :
GRUB_CMDLINE_LINUX="noefi"
Si l’on souhaite par la suite utiliser une carte graphique ne possédant pas le firmware Apple, y apporter également la modification suivante, sans laquelle ma machine (dotée d’une carte graphique AMD R9 380) se fige à l’extinction lorsque plusieurs écrans y sont raccordés.
Regénérer les fichiers de configuration de grub incorporant ces modifications, à l’aide de la commande suivante :
# update-grub
Conclusion
La machine démarre maintenant en 40 secondes montre en main, ce qui représente une nette amélioration du temps de démarrage précédemment obtenu avec la compatibilité BIOS, qui était supérieure a la minute, sans présenter d’autre inconvénient que de nécessiter une carte graphique Apple pour procéder à l’installation. (j’ai tenté par la suite de reproduire la procédure « à l’aveugle », sans résultat).
Cependant, l’argument noefi étant nécessaire au bon démarrage du noyau, mon ambition de pouvoir enfin editer la variable EFI assurant le réglage du volume du gong de démarrage est tombée à l’eau. Je me contenterai du temps de démarrage raccourci !
Contrairement à l’installation effectuée en mode BIOS, le paramètre noyaux amdgpu.dc=0 n’est plus nécessaire pour obtenir un affichage avec ma carte graphique AMD.
Pour résoudre le problème rencontré à l’extinction de la machine, les arguments noyau suivant ont été essayés, sans résultat : amdgpu.runpm=0, reboot=pci, acpi=noirq et irq=off
Cet article décrit la procédure pour installer Linux Mint avec un système de fichier BTRFS (permettant notamment de bénéficier de « snapshots » offrants une possibilité de restaurer le système à un état antérieur en cas de problème), tout en activant le chiffrement complet du disque dur.
L’installation débute comme une installation standard, puis :
1. A l’écran « Type d’installation« , choisir « Autre chose » :
2. Si nécessaire, créer une table de partition en cliquant sur le bouton « Nouvelle table de partition ». Attention, cette opération détruira la table de partition courante, et provoquera la perte des partitions actuellement sur le disque !
3. Créer une partition de type « Partition Système EFI », de taille 1024 Mo (c’est un peu excessif, mais cela évite de devoir la redimensionner plus tard). Pour cela, sélectionner l' »espace libre » en fin de disque, et cliquer sur le bouton « + ».
4. Créer une partition de type « Système de fichier ext2 », avec point de montage « /boot« , également de taille 1024 Mo.
5. Créer une partition de type « volume physique pour le chiffrement », occupant tout l’espace restant. Saisir la clé de sécurité qui sera demandée au démarrage de l’ordinateur pour déchiffrer le disque dur.
6. Un disque virtuel, contenant une seule partition de type ext4 , apparait alors, sous le nom /dev/mapper/xxx_crypt.
7. Choisir Btrfs comme système de fichier à la place de ext4, avec le point de montage « / ». Pour cela, sélectionner la partition, puis cliquer sur le bouton « modifier ».
8. Les différentes partition de votre système doivent correspondre à la capture d’écran ci-dessous. Cliquer alors sur « installer maintenant », et procéder à la suite de l’installation. Dans le cas d’une erreur, il est plus sage de redémarrer et de recommencer l’installation, l’installateur pouvant avoir un comportement erratique si l’on recommence l’installation après avoir déjà créé une partition chiffrée.
9. C’est terminé ! A chaque démarrage, l’écran suivant demandera le mot de passe permettant le déchiffrement du disque dur :
Cette procédure laisse par contre l’utilisateur sans espace d’échange (swap) configuré. Je n’ai pas encore expérimenté sur le sujet, mais la mise en place d’un fichier de swap (swapfile) sur une partition btrfs est assez bien documentée ( par exemple, ou encore ) , je me pencherai sans doute dessus à l’avenir.
4. Si on récupère le code source officiel (et pas une version déjà customisée pour une machine spécifique ), récupérer les fichiers de configuration dans le dépot git MarlinFirmware/Configurations, et copier les fichiers de configuration adéquat dans le dossier Marlin / Marlin /
5. Se placer dans le dossier Marlin ( contenant platformio.ini ).
6. Identifier la valeur de MOTHERBOARD, en gras dans l’exemple ci dessous, à partir du fichier Configuration.h. ( pour une carte BTT SKR E3 MINI V2.0 )
$ cat Marlin/Configuration.h | grep MOTHERBOARD #ifndef MOTHERBOARD #define MOTHERBOARD BOARD_BTT_SKR_MINI_E3_V2_0 If not defined the default pin for the selected MOTHERBOAR
7. Identifier les environnements PlatformIO compatibles à partir du fichier pins.h ( attention à supprimer le BOARD dans la valeur de MOTHERBOARD ):
8. Compiler avec l’environnement adapté ( dans mon cas gestion de l’USB mais pas 512K de ROM ) :
$ platformio run -e STM32F103RC_btt_USB
9. Récupérer le fichier firmware.bin à l’emplacement suivant :
.pio/build/STM32F103RC_btt_USB/firmware.bin
10. Le copier sur une carte SD ( sans altérer son nom ), et la mise à jour s’effectue à la mise sous tension de l’imprimante. Le fichier sera alors renommé en FIRMWARE (sans extension).
11. Si présence d’un fichier EEPROM.DAT sur la carte SD lors de la mise à jour firmware, le contenu de l’EEPROM (calibration, réglages) sera écrasé.
Il s’agit d’un petit logiciel que j’ai développé sous Qt, facilitant la calibration d’un écran tactile / tablette graphique, notamment quand l’écran en question est un écran secondaire
Sur ces machines, la ventilation est réalisée en 3 canaux séparés
Canal 1 : CPU & RAM : 2 ventilateurs, 1 en façade et 1 à l’arrière en extraction, dont la vitesse est régulée en fonction de la température CPU
Canal 2 : GPU et cartes d’extensions : 1 ventilateur en façade
Canal 3 : Alimentation & lecteurs optiques.
Sur mon système, si les canaux 1 et 3 sont gérés correctement par le SMC ( le chip chargé de la gestion du système ), le ventilateur du canal 2 a sa vitesse fixe à 500 tr/min. J’imagine que la cause est à trouver dans mon utilisation peut habituelle de cette machine : un GPU non officiel (AMD R9 380) sous un OS non officiel (Linux).
Pour pallier à ce problème, et effectivement piloter ce ventilateur en fonction de la demande en refroidissement du GPU, j’ai écrit un script bash, qui contrôle ce ventilateur en fonction de la commande PWM du ventilateur du GPU ( attention, à ma connaissance cette information n’est disponible que sur le pilote graphique libre AMD ) :
$ cat /opt/IO_fan_control.sh
#!/bin/bash
BASE_FAN="/sys/devices/platform/applesmc.768/fan2"
GPU_PWM_FILE="/sys/class/drm/card0/device/hwmon/hwmon0/pwm1"
GPU_PWM_MIN=75
GPU_PWM_MAX=250
function setfancontrolmanual()
{
echo $1 > $BASE_FAN"_manual"
if (( $? == 0 ))
then
if (( $1 == 0 ))
then
echo "Returning fan control to SMC"
else
echo "Taking control of fan from SMC"
fi
else
if (( $1 == 0 ))
then
echo "Failed to return fan control to SMC"
exit 1
else
echo "Failed to take control of fan from SMC"
exit 1
fi
fi
}
function abort()
{
setfancontrolmanual 0
exit
}
function checkforroot()
{
if(( $(id -u) != 0 ));
then
echo "Need to be run as root";
exit
fi
}
checkforroot
if [ "$1" == "release" ]; then
setfancontrolmanual 0
exit
fi
trap abort SIGINT
setfancontrolmanual 1
while true
do
INPUT_RPM=$(<$BASE_FAN'_input')
MAX_RPM=$(<$BASE_FAN'_max')
MIN_RPM=$(<$BASE_FAN'_min')
GPU_PWM=$(<$GPU_PWM_FILE)
#compute MAC fan RPM from GPU fan PWM
if (( $GPU_PWM >= $GPU_PWM_MAX )); then
TARGET_RPM=$MAX_RPM
elif (( $GPU_PWM <= $GPU_PWM_MIN )); then
TARGET_RPM=$MIN_RPM
else
TARGET_RPM=$(( ($MAX_RPM - $MIN_RPM) * ( $GPU_PWM - $GPU_PWM_MIN ) / ($GPU_PWM_MAX - $GPU_PWM_MIN) + $MIN_RPM))
fi
#clamp value between MIN_RPM and MAX_RPM
if (( $TARGET_RPM < $MIN_RPM )); then
OUTPUT_RPM=$MIN_RPM
elif (( $TARGET_RPM > $MAX_RPM )); then
OUTPUT_RPM=$MAX_RPM
else
OUTPUT_RPM=$TARGET_RPM
fi
echo $OUTPUT_RPM > $BASE_FAN'_output'
echo 'INPUT_RPM: '$INPUT_RPM' MAX_RPM: '$MAX_RPM' MIN_RPM: '$MIN_RPM' GPU_PWM: '$GPU_PWM' TARGET_RPM: '$TARGET_RPM' OUTPUT_RPM: '$OUTPUT_RPM
sleep 2
done
Les variables GPU_PWM_MIN et GPU_PWM_MAX correspondent respectivement aux 2 valeur PWM à laquelle le ventilateur du canal 2 sera commandé à sa vitesse minimum, et celle où il sera commandé à sa vitesse maximum.
Ce script est exécuté automatiquement au démarrage grâce à systemd
[Unit]
Description=MacPro IO fan control from GPU temperature
After=systemd-udevd.service
[Service]
ExecStart=/opt/IO_fan_control.sh
Restart=always
StartLimitIntervalSec=10
ExecStopPost=/opt/IO_fan_control.sh release
[Install]
WantedBy=multi-user.target
Il ne reste plus qu’à activer l’unité systemd créé :
La vitesse du ventilateur du canal 2 est maintenant asservie à celle du GPU, facilitant le refroidissement de ce dernier, et réduisant le niveau sonore de la machine.
Les cartes graphiques AMD exploitant le nouveau code d’affichage « DC » provoquent un kernel panic. Il faut ajouter la commande suivante dans le fichier /etc/default/grub pour utiliser l’ancian code :
amdgpu.dc = 0
Ne pas oublier d’appliquer les changements :
$ sudo update-grub
Bâillonner l’interruption gpe11
Sur cette machine, le taux d’occupation CPU restait important même au repos. Il s’avère que l’IRQ 9 est déclenchée à une fréquence très élevée (indiqué par le compteur du fichier /proc/interrupts), et monopolise à elle seule un des coeurs CPU. Les compteurs lisibles dans les différents fichiers à l’emplacement /sys/firmware/acpi/interrupts nous permettent de déterminer la source de cette IRQ : gpe11. Un service systemd nous permet de la désactiver, en créant le fichier /etc/systemd/system/disableGPE11.service avec le contenu suivant :
[Unit] Description=Disables GPE 11 going crazy on this MacPro [Service] ExecStart=/bin/bash -c 'echo "disable" > /sys/firmware/acpi/interrupts/gpe11' [Install] WantedBy=multi-user.target
Ce service est rendu actif par la commande suivante :
Commentaires récents