web-dev-qa-db-fra.com

Comment utiliser la fonction lockdep dans le noyau Linux pour la détection des blocages

J'ai un pilote de noyau Linux et une application utilisateur qui interagit avec lui. Le pilote du noyau est bloqué. Je suis tombé sur cette fonctionnalité dans le noyau Linux appelée " lockdep ". J'ai pu le configurer et recompiler mon noyau (et je vois les dossiers lockdep dans/proc). Mais je ne sais pas comment déduire la sortie de cet outil ou comment procéder pour déboguer le pilote en utilisant cet outil d'ailleurs. Toute aide sera très appréciée. Merci!

12
brokenfoot

Pour activer la fonctionnalité lockdep, éditez le fichier .config via menuconfig:

make menuconfig

Et activez le suivi dans les options de piratage:

 1. [*] Detect Hard and Soft Lockups
 2. [*] Detect Hung Tasks
 3. [*] RT Mutex debugging, deadlock detection
 4. -*- Spinlock and rw-lock debugging: basic checks
 5. -*- Mutex debugging: basic checks
 6. -*- Lock debugging: detect incorrect freeing of live locks
 7. [*] Lock debugging: prove locking correctness
 8. [*] Lock usage statistics

Recompiler le noyau:

make Arch=i386 -j4 //whatever your Arch is

Maintenant, démarrez la nouvelle image du noyau, sous/proc, vous devriez voir les nouveaux dossiers suivants:

/proc/lockdep
/proc/lockdep_chains
/proc/lockdep_stat
/proc/locks
/proc/lock_stats

A présent, insérez le module qui, selon vous, est à l'origine de l'erreur et accédez-y à l'aide de votre application utilisateur (ou de la manière que vous utilisez pour exécuter votre module de pilote). Si l'application se bloque, effectuez l'une des actions suivantes:

ps -aux | grep <app_name>

vous devriez voir un état + D (sommeil ininterruptible) pour votre application, faites ceci:

dmesg

Le journal qu'il imprime inclura la fonction/le fichier à l'origine du blocage.

C'est tout!

21
brokenfoot

Il n’ya pas grand-chose à faire: le code lockdep imprimera simplement une description de la situation et une trace de pile dans le journal du noyau lorsqu’il rencontre une séquence de verrouillage qui bloque potentiellement. Il vous suffit de regarder la sortie de votre noyau (via dmesg ou une ligne série ou ce que vous utilisez).

Le code lockdep ne débogue que les verrous, il ne peut pas vous avertir des blocages résultant de quelque chose d'autre.

0
Andreas Bombe