LINUX.ORG.RU

трабл с инициализацией модулей


0

0

сабж:

есть ядро 2.4.3-18 с поддержкой модулей и отключенным "подписыванием"

символов ядра . пишем простейший модуль:

#define __KERNEL__

#define MODULE

#include<linux/module.h>

#include<linux/kernel.h>

int module_init(){

printk("hello,world!!!\n");

return 0;

}

void module_cleanup(){}

компилим:

gcc -I/usr/src/linux/include -Wall -Wstrict-prototypes -O2 -c -o mod.o mod.c

вставляем:

insmod mod.o

на консоле и в логах сообщение не появляется.соответствующая запись

в /proc/modules есть.так происходит со всеми моими модулями

ощущение,что не вызывается module_init.почему так происходит

и где я не прав.

с уважением anonimous

anonymous

Re: трабл с инициализацией модулей

>на консоле и в логах сообщение не появляется.соответствующая запись

А должно? Может у тебя log демон не настроен читать логи ядра.
Вообще, kernel log можно посмотреть вручную через dmesg.

Murr ★★ ()
Ответ на: Re: трабл с инициализацией модулей от Murr

Re: Re: трабл с инициализацией модулей

dmesg тоже ничего не говорит,но дело не в этом.

дело в том,что создается ощущение,будто не вызывается ( или вызывается как-то странно)

module_init.если бы,например,из module_init вызывалась register_chrdev

то ничего бы не произошло - нового символьного устройства мы бы не увидели зы

я знаю о существовании /proc/devices в коем можно это посмотреть

anonymous ()

Re: трабл с инициализацией модулей

У меня нет исходников для 2.4.3, но для 2.4.20-8:
1) module_init - это макрос, помечающий твою функцию, как init
2) module_exit - это макрос, помечающий твою функцию, как cleanup
3) init_module - это точка входа модуля
4) cleanup_module - точка выхода модуля

С этой точки зрения у тебя код неверный.

С одной стороны, твой код компилироваться не должен, с другой, если компилируется, то не должен вставляться в ядро, поскольку модуль обязан предоставить ядру две точки (входа и выхода).

Возможно, в 2.4.3 были проблемы какие-то проблемы с реализацией модулей. Посмотри макроопределения и комментарии для твоего ядра в init.h, module.h.

Murr ★★ ()

Re: трабл с инициализацией модулей

а линковать не пробовал? ld -r mod.o real_module.o :))

и проверить, загружен ли модуль - lsmod?

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