Библиотека сайта rus-linux.net
Цилюрик О.И. Модули ядра Linux | ||
Назад | Вперед |
Основные ошибки модуля
Нормальная загрузка модуля командой
insmod
происходит без сообщений. Но при ошибке выполнения загрузки команда
выводит сообщение об ошибке — модуль в этом случае не будет
загружен в состав ядра. Вот наиболее часто получаемые ошибки при
неудачной загрузке модуля, и то, как их следует толковать:
insmod: can't read './params': No such file or directory
—
неверно указан путь к файлу модуля (возможно, в текущем каталоге не
указано ./);
возможно, в указании имени файла не включено стандартное расширение
файла модуля (*.ko
),
но это нужно делать обязательно.
insmod: error inserting './params.ko': -1 Operation not permitted
—
наиболее вероятная причина: у вас элементарно нет прав root
для выполнения операций установки модулей. Другая причина того же
сообщения: функция инициализации модуля возвратила ненулевое
значение, нередко такое завершение планируется преднамеренно,
особенно на этапах отладки модуля.
insmod: error inserting './params.ko': -1 Invalid module format
— модуль
скомпилирован для другой версии ядра; перекомпилируйте модуль. Это та
ошибка, которая почти наверняка возникнет, когда вы перенесёте любой
рабочий пример модуля на другой компьютер, и попытаетесь там
загрузить модуль: совпадение реализаций разных инсталляций до уровня
подверсий — почти невероятно.
insmod: error inserting './params.ko': -1 File exists
—
модуль с таким именем уже загружен, попытка загрузить модуль повторно.
insmod: error inserting './params.ko': -1 Invalid parameters
—
модуль запускается
с указанным параметром, не соответствующим по типу ожидаемому для
этого параметра.
Ошибка (сообщение) может возникнуть
и при попытке выгрузить модуль. Более того, обратите внимание, что
прототип функции выгрузки модуля void module_exit( void )
- не
имеет возможности вернуть код
неудачного завершения: все сообщения могут поступать только от
подсистемы управления модулями операционной системы. Наиболее часто
получаемые ошибки при неудачной попытке выгрузить модуль:
ERROR: Removing 'params': Device or resource busy
—
счётчик ссылок модуля ненулевой, в системе есть (возможно) модули, зависимые
от данного; но не исключено и то, что вы в самом своём коде
инкрементировали счётчик ссылок, не декрементировав его назад.
ERROR: Removing 'params': Operation not permitted
— самая частая причина такого сообщения — у вас просто
нет прав root
на выполнение операции rmmod
.
Более экзотический случай появления такого сообщения: не забыли ли вы
в коде модуля вообще прописать функцию выгрузки (module_exit()
)?
В этом случае в списке модулей можно видеть довольно редкий
квалификатор permanent
(в этом случае вы создали не выгружаемый модуль, поможет только
перезагрузка системы) :
$ /sbin/lsmod | head -n2
Module Size Used by
params 6412 0 [permanent]
...
Предыдущий раздел: | Оглавление | Следующий раздел: |
Уровни диагностики в /proc | Обсуждение |