URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID9
Нить номер: 8746
[ Назад ]

Исходное сообщение
"Открытие файла из модуля ядра"

Отправлено XShadow , 24-Май-10 11:05 
Здравствуйте. Помогите пожалуйста в решении проблемы. Вот простейший пример:

#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?


Содержание

Сообщения в этом обсуждении
"Открытие файла из модуля ядра"
Отправлено svn , 24-Май-10 21:26 
>Почему не находит объявление функции open?

Потому что нет этой функции в ядре. Фаловый ввод-вывод связан с виртуальной памятью, open не обходится без page fault и его обработчика.

По этой же причине в ядре не может быть никакого open. Посмотри как читает файлы nfsd.



"Открытие файла из модуля ядра"
Отправлено ramol , 07-Июл-10 09:20 
Ну ти глянь реализацыю функции open. Она должна визывать ядерну функцию после переключения контекста с user space в в kernel space. Ну и еще компилер ругается потому что у тебя хедера не заинклюджени