Forum Linux.noyau Aide pour débogger un module

Posté par  .
Étiquettes : aucune
1
2
oct.
2009
Bonjour,

Pour résumé en en quelques mots : A l'aide ! ;)

Je suis en train d'écrire un module et une librairie afin d'avoir un block device mais depuis le userland. Un peu comme FUSE, mais en mode block.

Mon code semble bon, mais j'ai un freeze du kernel. Je suspecte donc un deadlock quelque part, mais mes connaissances en programmation kernel et en deboggage surtout sont assez limité.

Pouvez vous me donner un coup de main pour débogger ce module ?

pour les sources (si besoin) c'est :

Module : http://www.ethernetvirtualstorage.net/Livraison/EvsKernel.ta(...)
Librairie + prog de test : http://www.ethernetvirtualstorage.net/Livraison/KernelInterf(...)

Attention, pour débogger, j'ai ralenti les messages de log avec un msleep dans la fonction debug_real. A enlever si vous voulez débrider le module.

De plus, le module compile pour mon noyau (2.6.28) mais il semble que l'api des block devices a changé en 2.6.30 donc il se peut qu'il ne compile pas pour vous.

Merci
  • # Bon c'est peut etre dans les details....

    Posté par  . Évalué à 2.

    Deja dans le code je vois des while() qui peuvent ne jamais finir.
    En embarqué ou en kernel on doit toujours mettre une limite temporel ou un compteur de boucle au cas ou...
    pour le debug pas trop le choix, utilise kdb (qui est dans le kernel mais faut le recompiler) et/ou kgdb qui necessite kdb et 2 machine pour le debug.
    • [^] # Re: Bon c'est peut etre dans les details....

      Posté par  (site web personnel) . Évalué à 3.

      Bien sûr qu'il a le choix pour débugger. Sans avoir à se mettre à k(g)db, il peut faire un sysrq-{w,t} quand le système est freezé et voir à quel endroit ça coince.

      pertinent adj. Approprié : qui se rapporte exactement à ce dont il est question.

      • [^] # Re: Bon c'est peut etre dans les details....

        Posté par  . Évalué à 1.

        J'y ai pensé, mais quand c'est freeze du système, il n'y a plus de sortie à la console.

        Pour les while, c'est juste pour être sûr que j'obtient le lock.

        Je vais améliorer ce point là, même si je sais que c'est pas ça.

        Sinon, j'ai compillé le module avec un noyau 2.6.31, avec les nouvelles API. Je vais voir ce que ça donne ...

        To be continued
        • [^] # Re: Bon c'est peut etre dans les details....

          Posté par  (site web personnel) . Évalué à 4.

          > J'y ai pensé, mais quand c'est freeze du système, il n'y a plus de sortie à la console.

          Si. Mais pas dans les logs. Si t'as pas la possibilité de monter une console série, tu peux essayer netconsole. Mais bon, après, k(g)db redevient peut-être plus pratique aussi.

          > Pour les while, c'est juste pour être sûr que j'obtient le lock.

          J'ai pas regardé le code mais ça pue assez bien ton truc là, que ça soit lié au problème ou non.

          pertinent adj. Approprié : qui se rapporte exactement à ce dont il est question.

          • [^] # [ SUJET RESOLU ]

            Posté par  . Évalué à 1.

            Et oui, tu avais raison !

            C'est bien un while qui pose problème.

            Merci pour ces judicieux conseilles !

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.