Здравствуйте. Помогите пожалуйста в решении проблемы. Вот простейший пример:#include <linux/module.h>
#include <linux/kernel.h>
#include <linux/fcntl.h>
#include <linux/unistd.h>int init_module(void)
{
int fd;fd = open("/dev/input/mice", 0);
close(fd);printk("<1>Hello world 1.\n");
return 0;
}void cleanup_module(void)
{
printk(KERN_ALERT "Goodbye world 1.\n");
}Makefile: obj-m += sip.o
Параметры сборки: make -C /usr/src/linux-headers-`uname -r` SUBDIRS=$PWD^C
Вот что выдает:
root@shad:/home/shad/li# make -C /usr/src/linux-headers-`uname -r` SUBDIRS=$PWD
make: Вход в каталог `/usr/src/linux-headers-2.6.32-21-generic'
CC [M] /home/shad/li/sip.o
/home/shad/li/sip.c: In function ‘init_module’:
/home/shad/li/sip.c:10: error: implicit declaration of function ‘open’
/home/shad/li/sip.c:11: error: implicit declaration of function ‘close’
make[1]: *** [/home/shad/li/sip.o] Ошибка 1
make: *** [_module_/home/shad/li] Ошибка 2
make: Выход из каталога `/usr/src/linux-headers-2.6.32-21-generic'Почему не находит объявление функции open?
>Почему не находит объявление функции open?Потому что нет этой функции в ядре. Фаловый ввод-вывод связан с виртуальной памятью, open не обходится без page fault и его обработчика.
По этой же причине в ядре не может быть никакого open. Посмотри как читает файлы nfsd.
Ну ти глянь реализацыю функции open. Она должна визывать ядерну функцию после переключения контекста с user space в в kernel space. Ну и еще компилер ругается потому что у тебя хедера не заинклюджени