Contents
La semaine dernière, certains lecteurs ont rencontré le meilleur code d’erreur avec les hauteurs de débogage printk. Ce problème se produit en raison de ce nombre de facteurs. Jetons maintenant un coup d’œil à certains d’entre eux.Le principal problème est que printk est assez solide, nous devons donc déterminer à l’avance ce que les clients veulent en matière de suivi, et si vous voulez suivre quelque chose de spécifique, vous devez vous aider à recompiler votre mot de passe, ce qui peut être assez lourd.
Peut-être que la meilleure façon de générer des informations de débogage à partir de votre précieux code noyau est d’imprimer des informations d’assortiment sur printf en utilisant cet équivalent noyau, la fonction printk et les dérivés de l’article.Le k dans printk peut toujours être utilisé spécifiquement pour rappeler aux codeurs du noyau que l’environnement est différent.
Utiliser
Des problèmes d’ordinateur ? Résolvez-les en quelques minutes.
Avez-vous un problème informatique ? Vous n'êtes pas seul. En fait, plus de 60% des ordinateurs souffrent d'une sorte d'erreur ou de plantage à un moment donné. Reimage est la meilleure solution pour résoudre ces problèmes et remettre votre PC à niveau. Cliquez ici pour commencer :

printk fonctionne à peu près de la même manière qu’ici dans l’espace utilisateur printf, donc si vous avez maintenant débogué votre programme principal de l’espace utilisateur en utilisant printf, vous êtes prêt et capable d’écrire la même chose avec, par exemple, le code du noyau. en ajoutant un débogueur :
printk("Mon Printkn");
printk("Var1 %d var2 %dn", var1, var2);
Est-ce que printk est mis en mémoire tampon ?
Toutes les alertes printk() sont écrites dans un nouveau tampon de journal du noyau, qui est devenu le bon tampon circulaire exporté vers l’environnement utilisateur via /dev/kmsg. La manière habituelle de le lire est d’avoir dmesg. Si la priorité de la tentative de vente est littéralement supérieure (valeur de taille de journal inférieure) à la valeur console_loglevel, le message est généralement envoyé à une console.
La commande est présente dans l’un de vos shells – elle listera l’intégralité du journal du noyau humaintampon sur vous.
La plupart des routines printf() conçues par les conversions prises en charge par une bibliothèque de types en espace utilisateur sont simultanément disponibles dans le noyau ; Il y a en règle générale quelques ajouts notables, notamment “%pf” qui peut retourner un symbole établi à la place d’un pointeur numérique. Veuillez noter s’il y en a. Vous êtes généralement les bienvenus
Remarque. Utilisez toujours %zu, %zd par contre %zx lorsque vous travaillez avec l’impression.size_t et en plus les valeurs ssize_t. ssize_t en conjonction offrant size_t sont des points de vue assez courants dans ce noyau, doncVeuillez utiliser %z pour éviter les avertissements gênants.
Conseils utiles d’un auteur en particulier :
Si vous souhaitez déboguer presque des whoops (par exemple, causés par l’amélioration de l’aide) dans votre pilote et que votre petit ne sait pas où les whoops apparaissent généralement, ajoutez simplement cette ligne
printk(KERN_ALERT "DEBUG : %s %d n écoulé",__FUNCTION__,__LINE__);
après chaque déclaration potentiellement douloureuse.Recompilez (re)chargez et le module est également enclin à générer une erreur – votre incroyable journal de famille vous montrera maintenant la ligne précédente qui s’est déroulée correctement avant que les whoops ne se produisent.
Bien sûr, tout le monde devrait supprimer ces valeurs publicitaires “grossières” avant de décortiquer votre module. 😉
Connectez votre niveau
Comment faire correspondre le niveau de débogage sous Linux ?
Utilisez la commande hamster /proc/cmdline pour afficher le panneau de mots de commande du noyau utilisé pour le précédent . Pour montrerC’est tout, le nombre propre au paramètre loglevel doit s’avérer supérieur à KERN_DEBUG. Il source simplement ce dont vous aurez besoin pour l’application loglevel=8. Ou utilisez simplement notre paramètre d’achat ignore_loglevel pour afficher toutes les campagnes d’actualités géantes.
Si vous regardez directement près du code du noyau, vous voyez certainement régulièrement quelque chose comme :
printk(KERN_ERR "quelque chose a décidé de mal tourner, code de retour : %dn",ret);
Comment écrire pour augmenter mon niveau de journal dmesg ?
Ce niveau est utilisé pour fournir des mesures de sécurité ou des messages sur les pannes imminentes. Niveau de journal 5 – KERN_NOTICE. Les messages qui, selon les experts, utilisent ce niveau de gravité sont des moments qui méritent d’être mentionnés. Le niveau de journalisation 6 est considéré comme étant en fait KERN_INFO : c’est le niveau de journal utilisé pour les messages d’information, absolument une action effectuée par un noyau.
où “KERN_ERR” est l’un des huit niveaux de journalisation inhabituels.include/linux/kern_levels.h et définit la gravité de tous les messages d’erreur.
Notez qu’il n’y a donc PAS de virgule entre KERN_ERR et la chaîne de format (car chacun de nos préprocesseurs principaux concatène le plus de chaînes).
La zone de journal de niveau commence par KERN_SOH qui indique “Header Start” pour lequel le noyau, le fait que les choses sontun seul caractère ASCII 1, spécifié en voyant que ” 001″ dans le code (c’est-à-dire juste en octal). Ce caractère est utilisépour améliorer la dynamique du protocole, niveau, qui est tout bon code promotionnel ASCII représentant des nombres pour gagner des niveaux de protocole, plus “c”.pour le cas agréable de la continuation de leur personnage. Lisez le téléchargement pour plus de détails.
Les macros pr_* (sauf pr_debug) sont de simples définitions abrégées.dans include/linux/printk. votre incroyable Xpour qu’un appel spécifique réussisse à printk, mais il devrait probablement finir par être utilisé dans les pilotes modernes.
pr_devel .et .pr_debug .sont remplacés par .suffer de .printk(KERN_DEBUG …. si le noyau a étéentièrement collecté avec DEBUG, sinon remplacé par la meilleure instruction vide.
L’utilisation des sous-routines printk de la forme “pr_*” est encouragée plutôt que l’utilisation directe de printk.égal à sa macro log_level.
Il y a une performance spéciale du programme printk pour les conducteurs d’instruments de musique, des emballages pour celaafficher une communication supplémentaire. Par exemple, il y a dev_emerg, dev_crit, dev_alert, dev_err,dev_warn, dev_notice, dev_info, dev_dbg. Lorsque vous imprimez quelque chose lié à l’appareil d’une personne,ces routines doivent être utilisées à peu près parmi les routines pr_* correspondantes.
Si nous ne spécifions pas de niveau de journalisation dans votre message uniquement, il s’agit du niveau standardDEFAULT_MESSAGE_LOGLEVEL (généralement “4” = KERN_WARNING)qui doit certainement être installéMise à jour via la configuration du noyau CONFIG_DEFAULT_MESSAGE_LOGLEVELOption (make menuconfig->Kernel Hack->Message de niveau de bois de chauffage par défaut)
Le niveau de journalisation est utilisé par jusqu’à ce noyau particulier pour détecter une absencemessage et décide de le soumettre brûlant, je dirais à l’utilisateurimmédiatement le tout en l’imprimant sur les consoles de jeux actuelles (où la console peut égalementêtre votre nouvelle ligne série ou même une imprimante, pas un xterm).
Pour ce faire, le noyau compare le niveau de compétence de journalisation du message interne avecconsole_loglevel (variable du noyau) en plus de savoir si votre priorité est beaucoup plus élevée (c’est-à-dire.valeur inférieure) contrairement à ce que console_loglevel, certains messages sont publiés pour vous aider dans la console moderne.
$ cat /proc/sys/kernel/printk7e Étape une seule 7valeur par défaut actuelle temps minimum par défaut en livres
Le premier entier vous indique réellement le niveau console_loglevel actuel de votre entreprise ; dernièreL’amplitude de journalisation par défaut que vous avez décrite ci-dessus.
Pour changer le console_loglevel valide que vous écrivez finalement dans ce fichier, alors okPour imprimer plus ou moins tous les messages sur la console, faites une étape simple majeure
# miroir 10 > /proc/sys/kernel/printk
Une autre façon de mettre à jour le niveau de journalisation spécifique de la console consiste à incorporer dmesg avec l’option -n.paramètre
# #set console_loglevel pour sortir KERN_WARNING (4) ou parfois d'autres messages plus sérieux# dmesg-g 5Obtenez le meilleur outil de réparation de PC pour votre ordinateur. Télécharger maintenant.
Printk Debug Levels
Niveis De Depuracao Printk
Printk 디버그 레벨
Niveles De Depuracion De Printk
Printk Felsokningsnivaer
Livelli Di Debug Di Printk
Printk Debug Ebenen
Printk Foutopsporingsniveaus
Urovni Otladki Printk
Poziomy Debugowania Printk
