Un pilote est bruyant. Il imprime des messages à la console toutes les 10 à 30 secondes. Donc, lorsqu'on travaille sur VT1 ou quelque chose du genre, on reçoit des messages qui défilent tout le temps. Existe-t-il un moyen de désactiver cette fonctionnalité ?.
printk() est l'une des fonctions les plus connues du noyau Linux. C'est l'outil standard dont on dispose pour imprimer les messages et généralement le moyen le plus basique de traçage et de débogage.
Tous les messages printk() sont imprimés dans le tampon de journal du noyau, qui est un tampon en anneau exporté vers l'espace utilisateur via /dev/kmsg
. La façon habituelle de le lire est d'utiliser dmesg.
printk permet de spécifier le type et l'importance du message envoyé. Ce spécificateur est appelé le niveau de journalisation.
Le niveau de journalisation spécifie l'importance d'un message. Le noyau décide s'il doit afficher le message immédiatement (en l'imprimant sur la console actuelle) en fonction de son niveau de journalisation et du niveau de journalisation_console actuel (une variable du noyau). Si la priorité du message est plus élevée (valeur de niveau de journalisation inférieure) que console_loglevel, le message sera imprimé sur la console.
0 | KERN_EMERG | Une condition d'urgence ; le système est probablement mort |
1 | KERN_ALERT | Un problème qui nécessite une attention immédiate |
2 | KERN_CRIT | Une condition critique |
3 | KERN_ERR | Une erreur |
4 | KERN_WARNING | Un avertissement |
5 | KERN_NOTICE | Une condition normale, mais peut-être notable |
6 | KERN_INFO | Un message d'information |
7 | KERN_DEBUG | Un message de débogage, généralement superflu |
KERN_DEFAULT | ||
c | KERN_CONT | pr_cont() |
Si le niveau de journal est omis, le message est imprimé avec le niveau KERN_DEFAULT.
On peut vérifier le niveau de console_log actuel avec :
cat /proc/sys/kernel/printk 4 4 1 7
Le résultat affiche les niveaux de journalisation actuels, par défaut, minimum et par défaut au démarrage.
Pour modifier le niveau de journalisation_console actuel, écrire simplement le niveau souhaité dans /proc/sys/kernel/printk
. Par exemple, pour imprimer tous les messages sur la console :
echo 1 > /proc/sys/kernel/printk
Une autre façon, en utilisant dmesg :
dmesg -n 1
Pour supprimer tous les messages du noyau (et de ses pilotes) à l'exception des messages de panique d'apparaître sur la console.
Pour corriger à chaque démarrage, il faut ajouter la commande à :
/etc/rc.local
dmesg est livré avec deux options pratiques pour cela :
dmesg -D n'est qu'un raccourci pour dmesg -n 1, sauf qu'il stocke le niveau de journalisation actuel, de sorte que vous pouvez facilement le restaurer avec dmesg -E. C'est donc un peu plus pratique que de changer le niveau de journalisation avec dmesg -n.
Dans Ubuntu dmesg -D et dmesg -E ont par la suite été brisés par des capacités (CAP_SYSLOG). Cependant, la définition de kernel.dmesg_restrict=0 n'active pas ces deux dmesgs.