|
|
ru.linux- RU.LINUX --------------------------------------------------------------------- From : Zahar Kiselev 2:5030/382.1 10 Oct 2005 19:08:26 To : Victor Wagner Subject : Кто держит устройство? --------------------------------------------------------------------------------
Oct 10 09:41 05, Victor Wagner wrote to All:
VW> Как узнать, какая бяка заняла устройство и не дает перегрузить
VW> модуль?
VW> $ sudo rmmod maestro3
VW> ERROR: Module maestro3 is in use
VW> $ /sbin/lsmod |grep maestro
VW> maestro3 42120 3
VW> ac97_codec 24076 1 maestro3
VW> Мы видим что на этот модуль имеется аж три ссылки.
Hасколько я понял в результата кодокопания - эта цифра 3 - является значением
счетчика, называющегося как-то типа mod_use_count, вобщем довольно очевидно.
Раньше уменьшением/увеличением значения этого счетчика было положено заниматься
самому модулю в функциях открытия и закрытия устройства. Потом "вести учет" ядро
стало само, хотя из модуля по-прежнему до счетчика добраться можно. В процессе
экспериментов с написанием собственного модуля под одну крайне экзотическую
плату (многоканальный АЦП на шину ISA, да еще и отечественный) - у меня из-за
ошибок бывало так, что программа, взаимодействующая с этим модулем, тоже своя,
завершилась аварийно, и по всей
видимости не выполнила правильное закрытие устройства. Или по каким-то иным
причинам счетчик не обнулился. Вот тогда модуль выгрузить не удавалось.
Это я все к чему говорю - к тому, что кроме счетчика, я не нашел какую можно
добыть информацию о том, кто лезет к обслуживаемому модулем устройству, если
лезущий процесс уже завершился. Так что цифра "3" есть, ядро ее проверяет и
модуль выгрузить не дает, а информации о том кто счетчик увеличил - уже нет, как
и законного способа записать в него ноль.
Естественно - все вышесказанное относится к ядру 2.4, более новые я не копал.
Кстати - модуль для той платы АЦП я доделал до состояния, когда он уже мог по
запросу программы прочитать значение. Вот с работе по прерываниям не разобрался
пока - а именно - как из находящегося в модуле обработчика прерывания доступить
к общим переменным модуля чтобы положить туда то, что прочитал из ацп этот
обработчик. Контекст-то разный при вызове функций модуля по случаю обращения
программы к устройству или при вызове прерывания железкой.
Впрочем - мне на тот случай опроса хватило, так как измеряемый процесс очень
медленный и достаточно "спрашивать" значение раз в минуту. Если потребуются
прерывания - буду копать дальше.
Zahar
--- Msged/LNX 6.1.1
* Origin: mobile point - Compaq Armada 1750 + Siemens ME45 (2:5030/382.1)
Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /ru.linux/3288434a5db6.html, оценка из 5, голосов 10
|