LINUX.ORG.RU

А вот как удалить неудаляемый модуль


0

0

После краха модуля - вследствии 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) и последующее удаление, но абсурд - первый раз модуль удаляется, а после второго упса этого же модуля он никак не хочет удалятся. :-)


Молодец, почёт и увожение! Все бы так... 1) задали вопрос... 2) не получили ответа... 3) разобрались сами... 4) отписались о результатах и солюшенах...

а то большенство после второго пункта забивают :(

Cy6erBr4in ★★★
()

За такие фокусы руки надо отбивать.

Dselect ★★★
()

Мде....

очень похоже на то как один кекс написал while(transaction.commit());

PS: костыли суть плохо.

eXOR ★★★★★
()
Ответ на: комментарий от Uncle_Theodore

Она включена и ... Короче - попробуй сам написать модуль с упсом и затем выгрузить...

lnkgyv
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.