Я первый раз с этим сталкиваюсь. Просто возникла необходимость написания драйвера для диплома.Когда я пробую собрать модулю по примерам то че то у меня не получается!
Пожайлуста направте на путь истинный.
___________________________
Файл mydrv.c#include <linux/module.h>
#include <linux/init.h>MODULE_LICENSE("GPL");
static int __init my_init(void)
{
printk("<1>Da\n");
return 0;
};static void __exit my_cleanup(void)
{
printk("<1>Net\n");
return;
};module_init(my_init);
module_exit(my_cleanup);Файл makefile
obj-m += mydrv.cКоманда для компиляции:
make -C /lib/modules/`uname -r` SUBDIRS=$PWD makefileПосле чего не выдается ни каких ошибок и сообщений вообще. И получается какбудто команда выполнена. Хотя объектного файла mydrv.o я не нахожу ни где.
makefile и mydrv.c расположены в одной папке /home/Nikolai. Компилирую тоже из этой папки.
ОС ASP Linux 2.6.9-1.667
_________________________________
Заранее благодарен!!!
>Я первый раз с этим сталкиваюсь. Просто возникла необходимость написания драйвера для
>диплома.
>
>Когда я пробую собрать модулю по примерам то че то у меня
>не получается!
>Пожайлуста направте на путь истинный.
>___________________________
>Файл mydrv.c
>
>#include <linux/module.h>
>#include <linux/init.h>
>
>MODULE_LICENSE("GPL");
>
>static int __init my_init(void)
>{
>printk("<1>Da\n");
>return 0;
>};
>
>static void __exit my_cleanup(void)
>{
>printk("<1>Net\n");
>return;
>};
>
>module_init(my_init);
>module_exit(my_cleanup);
>
>Файл makefile
>obj-m += mydrv.c
>
>Команда для компиляции:
>make -C /lib/modules/`uname -r` SUBDIRS=$PWD makefile
>
>После чего не выдается ни каких ошибок и сообщений вообще. И получается
>какбудто команда выполнена. Хотя объектного файла mydrv.o я не нахожу ни
>где.
>
>makefile и mydrv.c расположены в одной папке /home/Nikolai. Компилирую тоже из этой
>папки.
>ОС ASP Linux 2.6.9-1.667
>_________________________________
>Заранее благодарен!!!а через find искать не пробовали
Пробовал. Не помогает. :(
-C /lib/modules/`uname -r`А makefile разве в этой директории?
Что-то с путями нахамутал.
Попробуй все пути абсолютными задать.
Вот еще примерчик пригодится:
http://www.captain.at/programming/rtai/serportint.php
>Вот еще примерчик пригодится:
>http://www.captain.at/programming/rtai/serportint.phpОгромное спасибо за примерчик. Немного сдвинулось. Изменил makefile на:
obj-m := mydrv.cKDIR := /lib/modules/$(shell uname -r)/build
PWD := $#(shell pwd)default:
$(MAKE) -C $(KDIR) SUBDIRS=$(PWD) modulesКомандная строка (из директории с makefile):
make -f makefileТеперь выдает следующее:
[root@localhost Nikolai]# make -f makefile
make -C /lib/modules/2.6.9-1.667asp/build SUBDIRS= modules
make[1]: Entering directory `/lib/modules/2.6.9-1.667asp/build'
CHK include/linux/version.h
SPLIT include/linux/autoconf.h -> include/config/*
CHK include/asm-i386/asm_offsets.h
HOSTCC scripts/genksyms/genksyms.o
HOSTCC scripts/genksyms/lex.o
HOSTCC scripts/genksyms/parse.o
HOSTLD scripts/genksyms/genksyms
CC scripts/mod/empty.o
MKELF scripts/mod/elfconfig.h
HOSTCC scripts/mod/file2alias.o
HOSTCC scripts/mod/modpost.o
HOSTCC scripts/mod/sumversion.o
HOSTLD scripts/mod/modpost
make[2]: *** Нет правила для сборки цели `arch/i386/kernel/msr.c', требуемой для `arch/i386/kernel/msr.o'. Останов.
make[1]: *** [arch/i386/kernel] Ошибка 2
make[1]: Leaving directory `/lib/modules/2.6.9-1.667asp/build'
make: *** [default] Ошибка 2
_____________
В чем проблема?
>KDIR := /lib/modules/$(shell uname -r)/buildBuild должен быть ссылкой на директорию исходников ядра, причем
ядро должно быть скомпилировано.
После компиляции модуля образовался файл mydrv.ko
Но при его инсталяции появляется ошибка:[root@localhost Nikolai]# insmod ./mydrv.ko
insmod: error inserting './mydrv.ko': -1 Invalid module formatЧто это значит?