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 Remarque: rmmod xxx code>, mais je reçois une erreur disant dire
Module xxx est utilisé code> 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) P>
rmmod -f code> impression
Erreur: périphérique ou ressource occupé code> p>
4 Réponses :
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. p>
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. P>
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. P>
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.
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]#
Une possibilité est que vous oubliez de fournir module_exit, votre module ne sait donc pas comment sortir. P>
rmmod -f code> ne fonctionne pas, il imprime
erreur: périphérique ou ressource occupé code>
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.