10
votes

Non capable de supprimer un module de noyau chargé

J'écris un module de noyau chargé et j'essaie de le tester. Après avoir inséré, j'essayais de le supprimer à l'aide de la commande rmmod xxx , mais je reçois une erreur disant dire Module xxx est utilisé et le module est bloqué et je ne peux pas supprimer ce. Avez-vous une idée comment supprimer le module sans redémarrer la machine entière? (Kernel Linux v. 3.5.0)

Remarque: rmmod -f impression Erreur: périphérique ou ressource occupé


3 commentaires

rmmod -f ne fonctionne pas, il imprime erreur: périphérique ou ressource occupé


Bien puis redémarrez. (Et pensez à jouer avec le noyau dans une machine virtuelle plutôt que votre hôte principal. Redémarrer n'est pas vraiment un problème alors.)


Si vous imprimez DMESG et êtes capable de fournir des extraits de code, nous pourrons peut-être aider davantage.


4 Réponses :


13
votes

Cela ne m'arrive que lorsqu'il y a un bogue dans mon pilote qui provoque le code dans le module de paniquer ou de planter d'une manière ou d'une autre. Dans mon expérience une fois que cela se produit, le redémarrage est le seul cours possible.

Comme je l'ai dit, le noyau panique généralement pour que vous puissiez consulter DMESG après l'avoir insérée ou votre application pour l'exercer. Je ne suis pas certain mais il pourrait être possible que si le pilote ne libère pas un mutex, ce comportement se produira également.


0 commentaires

0
votes

Vérifiez que votre fonction module_exit est appropriée. Vous devrez peut-être compiler votre noyau pour avoir "Supprimer le module sans redémarrer la machine entière" avec module_force_unload = Oui.


1 commentaires

J'ai mon noyau compilé avec ce drapeau, je reçois toujours cette erreur comme "périphérique ou ressource occupé". Cela se produit parce que mon chauffeur se bloque. Donc, ce que je peux observer, c'est s'il y a un bogue dans le pilote, alors que la force_unload est définie, vous ne pourrez pas décharger le pilote.



0
votes

Je corrige la même erreur en utilisant la même version GCC que celle qui a compilé le noyau exécutant pour compiler mon module, 8.3.1; Veuillez vérifier sur la tienne.

    [root@centos fishing]# rmmod fishing
    rmmod: ERROR: could not remove 'fishing': Device or resource busy
    rmmod: ERROR: could not remove module fishing: Device or resource busy
    [root@centos fishing]#


0 commentaires

0
votes

Une possibilité est que vous oubliez de fournir module_exit, votre module ne sait donc pas comment sortir.


0 commentaires