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!
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!
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.