После краха модуля - вследствии oops модуль совершенно невозможно удалить даже rmmod -f <modname>. Я эту тему поднимал в пятницу и результата конкретного не было. Виртуалку грузить ради маленького можуля и постоянно ребутить - роскош да и накладно по времени. Вот моё решение - были догадки в пятницу к вечеру, а в ночь с пятницы на субботу приснилось :-) и получилось. Всё распишу по пунктам:
1) Всё что нада, так это поработать со структурой модуля (в смысле struct module). #include <linux/module.h>.
2) Прошарившись по исходникам ядра понял, что модуль может быть выгружен когда он "живой" и никем не используется (refcnt). Последнее - можно упустить поскольку с помощью опции -f (rmmod) система модуль спокойно удаляет. Когда модуль делает oops он переходит в состояние "coming", а надо "live".
3) Переводим модуль из состояния "coming" в "live" (echo "live"> /sys/module... не проходит): struct module *m; m->state = 0;
4) Убиваем модуль с помощью rmmod -f <modname>.
Кто успел заметить - в коде неинициализированный указатель. Значет может снова быть упсик. Как же узнать аддресс структуры - всё просто (аж смешно, что мне эта идея приснилася с пятницы на субботу)? После второй попытки выяснилось - struct module *m = <знач. из /sys/module/<modname>/sections/.gnu.linkonce.this.module>.
Вся процедура в кратце - пишем ещё один модуль с следующим кодом:
#include <linux/module.h>
....
struct module *m = <см. выше>;
m->state = 0;
....
Макаем и запускаем модуль, после - rmmod -f <неубиваемій модуль>.
--------------------------------------
P.S. Была попытка простого обнуления счётчика использования модуля (refcnt) и последующее удаление, но абсурд - первый раз модуль удаляется, а после второго упса этого же модуля он никак не хочет удалятся. :-)
>>> Подробности (Invalid URL, no host part!)