web-dev-qa-db-fra.com

activer les messages de débogage du pilote du noyau linux dev_dbg

existe-t-il un moyen le plus simple possible d'activer les messages de débogage du pilote du noyau Linux dev_dbg (en fait, ce sont des messages de style trace) avec un peu de chance sans gâcher le patch/recompilation du noyau ou le pilote implémentant quelque chose de plus comme debugfs? peut-être existe-t-il un moyen d'activer quelque chose de SIMPLE dans le noyau (comme un indicateur?) déclenchant un pilote particulier ou tous les pilotes dev_dbg (il peut être filtré avec la sortie `dmesg | grep" driverName ")?

la version du noyau est 4.14. aucun journal syslog/daemonlog/system n'est en cours d'exécution. il n'y a PAS d'interface réseau et un seul port série est disponible. le système cible est très lent et très compact donc il n'y a AUCUNE MANIÈRE d'ajouter syslog/etc, il n'y a rien d'autre que dmesg où exactement ce serait bien de voir la sortie des lignes comme:

dev_dbg(&client->dev, "bla bla bla\n");

certains articles ont déjà suggéré d'ajouter le mot-clé debug pour les paramètres du noyau bootargs malheureusement n'était pas suffisant.

les sorties comme dev_info entrent dans le dmesg sans problème donc c'est définitivement quelque chose de proche. Merci

5
Oleg Kokorin

le moyen le plus simple de recevoir dev_dbg messages sans installer/configurer syslog/etc, est apparu nécessaire pour effectuer les étapes suivantes:

  1. fournir la clé debug dans les paramètres du noyau bootargs

  2. ajouter #define DEBUG à la première ligne du fichier du pilote - si le pilote est un fichier unique et utilise un Makefile commun, ou ajoutez -DDEBUG dans les options de construction de CC si le pilote contient plusieurs fichiers source et comme d'habitude possède son propre Makefile

  3. sur le noyau démarré et l'invite semble activer les messages de niveau de débogage en exécutant soit dmesg -n 8 ou echo 8 > /proc/sys/kernel/printk

  4. charger le pilote si le module avec la commande soit insmod <driver name> ou modprobe <driver name> ou si le pilote est intégré au noyau, les commandes d'insertion peuvent varier.

exemple sur la façon d'affecter le pilote intégré au noyau pour le i2c sous-système de bus:

echo <driver name> <i2c bus address> > /sys/bus/i2c/devices/i2c-0/new_device

notes annexes:

si le DTS aura une affectation d'enregistrement de pilote, une affectation de pilote répétée manuellement provoquera l'erreur - en cas de i2c sous-système - erreur EBUSY (-16), le pilote sera affecté bien avant l'invite de commande et les messages dmesg seront limités au niveau par défaut (généralement dev_info seulement)

dans le cas où le pilote a déjà été attribué par DTS et qu'il n'y a aucun moyen de l'exclure temporairement de la source de l'arborescence - il est utile de le détacher et de le rattacher à nouveau après le debug (trace) messages de niveau activés

pour le sous-système i2c, il faudrait exécuter une commande:

echo <driver name> > /sys/bus/i2c/drivers/<drivername>/unbind

puis

echo <driver name> > /sys/bus/i2c/drivers/<drivername>/bind

avertissement:

le mécanisme de suivi des pilotes du noyau n'aidera pas à déboguer les structures de service incorrectement configurées ou manquantes du pilote interne. c'est-à-dire si le pilote est chargé mais reste silencieux sans aucun message de trace signifie que le probe n'a jamais été exécuté en raison de certaines informations sur les structures de service du noyau manquantes ou défectueuses

2
Oleg Kokorin

Vous pouvez monter le système de fichiers de débogage manuellement en exécutant la commande suivante:

mount -t debugfs none/sys/kernel/debug

Une fois cela fait, faites:

ls/sys/kernel/debug

Toutes les informations de débogage et les messages y seraient stockés sans avoir à recompiler.

En outre, vous pouvez ajouter ceci sous votre/etc/fstab pour rendre le montage automatique lorsque vous redémarrez.

... Si vous recompilez quand même votre noyau, vous pouvez activer "[*] Debug File System" sous "Kernel Hacking"

Bonne chance, j'espère que tout va bien.

1
Heider Sati