2011-10-05 24 views
16

Esta situación siempre me molesta:Cómo quitar un módulo del núcleo no

me escribió un módulo del núcleo, ya veces tiene un error (referencia a un puntero NULL). Después de insmod hello.ko, muestra algunos errores del kernel. Luego cambio el código y trato de eliminar el módulo e instalarlo nuevamente. La pregunta es: no sé cómo eliminar el módulo kernel.

$ rmmod hello

ERROR: module hello in use

$ rmmod -f hello

ERROR: removing hello: device or resource busy

Siempre reinicio la máquina para quitar el módulo, lo que lleva demasiado tiempo. ¿Alguien tiene una mejor solución para esto? Gracias por cualquier entrada.

Respuesta

10

Use una máquina virtual.

Una vez que realiza una deferencia nula u otro error similar, ha puesto el kernel en un estado desconocido. Incluso si logró eliminar el módulo (que es poco probable que sea posible, un kernel OOPS mata el hilo de llamada, por lo que nunca tendrá la posibilidad de reducir el recuento de referencias, el módulo nunca será extraíble) todavía puede haber corrupción, y su nuevo módulo 'fijo' tiene la misma probabilidad de estar en problemas.

Mucho mejor que usar una máquina virtual rápida para reiniciar, quizás con una instantánea, para hacer la restauración aún más rápido.

2

Como señaló bdonlan, sería mejor que fuera con una máquina virtual.

Sin embargo, si realmente quiere hacerlo a su manera, usted tiene que:

  1. comprobación de que la configuración del núcleo tiene CONFIG_MODULE_FORCE_UNLOAD habilitado
  2. escribir otro módulo que establece el refcount del módulo roto a cero. Echa un vistazo a la llamada del sistema delete_module en kernel/module.c
Cuestiones relacionadas