红联Linux门户
Linux帮助

写了个简单的模块,内核函数为何没有运行

发布时间:2008-10-07 12:54:51来源:红联作者:magiceyes
#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");
int errno;
#define __KERNEL_SYSCALLS__
#include


int init_module(void)
{
int fd,n;
char* buffer=NULL;
struct file *file=filp_open("/usr/src/Hello",O_RDWR|O_CREAT,0666);
if(file->f_op->write)
{
printk(KERN_DEBUG "AAAAA!\n");
file->f_op->write(file,"11111",5,&file->f_pos);
}
return 0;
}
void cleanup_module(void)
{
printk(KERN_DEBUG "Sophia: Good-bye, kernel!\n");
}

编译:
gcc -D__KERNEL__ -I/usr/src/linux-2.4.20-8/include/ -DMODULE -Wall -O2 -c test.c -o test.o
通过,没有报错
insmod test.o能够正确加载,并能够创建文件Hello
但是通过dmesg|tail查看日志,发现
if(file->f_op->write)
{
printk(KERN_DEBUG "AAAAA!\n");
file->f_op->write(file,"11111",5,&file->f_pos);
}没有执行
不知道为什么没有将11111写到文件里,请高手指导下啊!
文章评论

共有 2 条评论

  1. magiceyes 于 2008-10-07 18:33:49发表:

    我找到原因了
    后来加了个扩展名.c就可以写入了
    也不知道为什么linux没有扩展名就不行,真怪!!

    我还有一个问题,如果在file->f_op->write前memset(buffer,'A',4000)
    在write中将buffer写进去,编译没错,加载时报段错误!!!
    不知为什么!!!

  2. sheshijie 于 2008-10-07 18:18:26发表:

    能创建 不能写入?
    file->f_op->write??
    请查看文件指针是否正确关闭,或者试着用当前用户修改该文件 看是否能写入。