当前位置: 技术问答>linux和unix
内核态下进行read/write系统调用的问题
来源: 互联网 发布时间:2015-06-23
本文导语: 写了一个模块,想在模块初始化时调用本地文件中的一些配置信息 但不知内核态下能不能调用open(),read()这些文件操作函数 写了一个小程序想验证,编译没有问题,但插入设备时报错: [root@Vanillasky temp]# /sbin/insmod...
写了一个模块,想在模块初始化时调用本地文件中的一些配置信息
但不知内核态下能不能调用open(),read()这些文件操作函数
写了一个小程序想验证,编译没有问题,但插入设备时报错:
[root@Vanillasky temp]# /sbin/insmod temp.o
temp.o: unresolved symbol errno
[root@Vanillasky temp]#
问题就出在这个errno,先看看我的程序吧(很简单的):
#if defined(CONFIG_SMP)
#define __SMP__
#endif
#if defined(CONFIG_MODVERSIONS)
#define MODVERSIONS
#include
#endif
#include
#include
#include
#include
#define BUFLEN 50
MODULE_LICENSE("GPL");
#define __KERNEL_SYSCALLS__
#include
int init_module(void)
{
int fd,n;
char* buffer=NULL;
fd=open("/home/sophia/module/Hello",O_RDWR,S_IRWXU);
if((n=read(fd,buffer,BUFLEN))f_op->write)
file->f_op->write(file,"12345",5, &file->f_pos);
set_fs(old_fs);
OK..上面没有判断一些指针是否有效!!!
但不知内核态下能不能调用open(),read()这些文件操作函数
写了一个小程序想验证,编译没有问题,但插入设备时报错:
[root@Vanillasky temp]# /sbin/insmod temp.o
temp.o: unresolved symbol errno
[root@Vanillasky temp]#
问题就出在这个errno,先看看我的程序吧(很简单的):
#if defined(CONFIG_SMP)
#define __SMP__
#endif
#if defined(CONFIG_MODVERSIONS)
#define MODVERSIONS
#include
#endif
#include
#include
#include
#include
#define BUFLEN 50
MODULE_LICENSE("GPL");
#define __KERNEL_SYSCALLS__
#include
int init_module(void)
{
int fd,n;
char* buffer=NULL;
fd=open("/home/sophia/module/Hello",O_RDWR,S_IRWXU);
if((n=read(fd,buffer,BUFLEN))f_op->write)
file->f_op->write(file,"12345",5, &file->f_pos);
set_fs(old_fs);
OK..上面没有判断一些指针是否有效!!!
|
加上:
#ifndef __KERNEL__
#define __KERNEL__
#endif
#ifndef MODULE
#define MODULE
#endif
试试看.
#ifndef __KERNEL__
#define __KERNEL__
#endif
#ifndef MODULE
#define MODULE
#endif
试试看.
|
在内核中可以读写文件,但是不能直接调用open,read等函数。可以参考内核代码自己整理。