#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写到文件里,请高手指导下啊!
magiceyes 于 2008-10-07 18:33:49发表:
我找到原因了
后来加了个扩展名.c就可以写入了
也不知道为什么linux没有扩展名就不行,真怪!!
我还有一个问题,如果在file->f_op->write前memset(buffer,'A',4000)
在write中将buffer写进去,编译没错,加载时报段错误!!!
不知为什么!!!
sheshijie 于 2008-10-07 18:18:26发表:
能创建 不能写入?
file->f_op->write??
请查看文件指针是否正确关闭,或者试着用当前用户修改该文件 看是否能写入。