Наши партнеры

UnixForum





Библиотека сайта rus-linux.net

На главную -> MyLDP -> Электронные книги по ОС Linux
Цилюрик О.И. Модули ядра 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   Обсуждение