Попытался разобраться с модулями в Linux, взял пример с одного сайта в рунете. файл называется hello-1.c Код (Text): #include <linux/module.h> #include <linux/kernel.h> int init_module(void) { printk("<1>Hello world 1.\n"); return 0; } void cleanup_module(void) { printk(KERN_ALERT "Goodbye world 1.\n"); } Создал Makefile с таким вот содержимым Код (Text): obj-m += hello-1.o в консоли uname -r выводит 2.6.22.19-desktop-2mdv В /usr/src/linux-2.6.22.19-2mdv Находятся исходники ядра ОС. Начинаю компилировать "модуль" make -C /usr/src/linux-2.6.22.19-2mdv SUBDIRS=$PWD modules ( хотя если по системе компилить то верно сделать так make -C /usr/src/linux-`uname -r` SUBDIRS=$PWD modules ) Но так как у меня есть исходники ядра linux-2.6.22.19-2md и нету 2.6.22.19-desktop-2mdv . Я произвожу сбору первым способом. После запуск make в консоли видим следующее. после команды ls -l [root@localhost driver]# insmod hello-1.ko пробую прилинковать к ядру , а мне пишут... insmod: error inserting 'hello-1.ko': -1 Invalid module format тоже самое и на: hello-1.mod.o hello-1.ko hello-1.o В чём мои действия не верны???
в hello-1.c нет: Код (Text): module_init(init_module); module_exit(cleanup_module); и объявления MODULE_LICENSE("GPL").
t00x Если можно? продемонстрируйте , как должен выглядеть код на примере hello-1.c А то после внесения мной изменений в первоначальный код, одни ошибки.
censored В Makefile что записано? а если компилить так Это не будет совсем нагло?! по шагом ктонить может объяснить? что делается при создании модуля? как скомпилировать верно?
censored У тебя какой дистрибутив? У меня Mandriva чёрт знает почему не могу модуль собрать. http://www.opennet.ru/docs/RUS/lkmpg26/#HELLOWORLDPART2 вот тоже самое описание, но на русском. Пробовал по этому описанию делать, не вышло пробовал по двум книгам... тоже самое Сейчас на вирт машину ставлю Mandriva 2009 посмотрю, получится ли на ней собрать модуль.
Clear__Energy в /usr/src/ исходники твоей версии ядра есть? и с таким кодом Код (Text): #include <linux/module.h> #include <linux/kernel.h> int init_module(void) { printk("<1>Hello world 1.\n"); return 0; } void cleanup_module(void) { printk(KERN_ALERT "Goodbye world 1.\n"); } сборка проходит хорошо, но готовый модуль выдаёт ошибку -1 Invalid module format
Что тока не робовал ( всегда если модуль и компилируется то при insmod выдаёт -1 Invalid module format дальше буду на разных дистрибутивах пробовать