LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 806|回复: 0

file_operation的编译问题

[复制链接]
发表于 2007-7-7 11:27:23 | 显示全部楼层 |阅读模式
file_operation的问题

小弟刚接触驱动程序设计
这是小弟的一段代码
#ifndef _KERNEl_
# define _KERNEl_
#endif
#ifndef MODULE
# define MODULE
#endif
#i nclude
#i nclude
#i nclude
#i nclude
#i nclude
#i nclude
#i nclude
//#i nclude
#i nclude
#i nclude
#i nclude
#i nclude
//#i nclude


#define DEVICE_NAME "demo"
//SET_MODULE_OWNER(&(demo_fops));
#define demo_MAJOR 254
#define demo_MINOR 0
static int MAX_BUF_LEN =1024;
static char drv_buf[1024];
static int WRI_LENGTH=0;

static ssize_t demo_write(struct file *filp,const char *buffer,size_t count )
{
if(count>MAX_BUF_LEN)count=MAX_BUF_LEN;
//_copy_from_user(drv_buf,buffer,count);
WRI_LENGTH=count;
printk("usrer write data todriver");
return count;

}
static ssize_t demo_read(struct file *filp, char *buffer,size_t count )
{
if(count>MAX_BUF_LEN)count=MAX_BUF_LEN;
//_copy_to_user(buffer,drv_buf,count);
WRI_LENGTH=count;
printk("usrer read data from driver");
return count;

}
static demo_ioctl(struct innode *innode,struct file *file,unsigned int cmd,unsigned long arg)
{
switch(cmd)
{
case 1:printk("runing command 1\n");
case 2:printk("runing command 2\n");
default:
printk("error cmd number\n");
}
return 0;
}
static int demo_open(struct innode *innode ,struct file *filp)
{
sprintf(drv_buf,"device open success\n");
printk("device open success");

}
static int demo_release(struct innode *innode ,struct file *filp)
{
//MODDEC_DEC_USE_COUNT;
printk("device release\n");
return 0;
}
static struct file_operations demo_fops= {

owner:THIS_MODULE,
// .llseek=NULL,
read:demo_read,
write: demo_write,
ioctl: demo_ioctl,
open: demo_open,
release:demo_release,
};
//#ifdef CONFIG_DEVICE_FS
//devfs_handle_t devfs_demo_dir,devfs_demoraw;
//#endif
//static devfs_handle_t
static int demo_init(void)
{
int result;
//static struct file_operations demo_fops;
result=register_chrdev(demo_MAJOR,"sucll",&demo_fops);
if(result<0)
return result;
//#endif
printk("DEVICE_NAME initialize\n");
return 0;
}

static void demo_exit(void)
{
unregister_chrdev(demo_MAJOR,"demo");
printk("device name unloaded\n");
}
module_init(demo_init);
module_exit(demo_exit);
MODULE_LICENSE("GPL");
编译时出现了下面的问题:

r/local/arm/2.95.3/bin/arm-linux-gcc -I -w -O -D_KERNEL_ -DMODULE -I/home/mymnt/gg/linux-2.4.27/include -c demo.c
demo.c:30: warning: `struct file' declared inside parameter list
demo.c:30: warning: its scope is only this definition or declaration, which is probably not what you want.
demo.c:39: warning: `struct file' declared inside parameter list
demo.c:48: warning: `struct file' declared inside parameter list
demo.c:48: warning: `struct innode' declared inside parameter list
demo.c:59: warning: `struct file' declared inside parameter list
demo.c:59: warning: `struct innode' declared inside parameter list
demo.c:65: warning: `struct file' declared inside parameter list
demo.c:65: warning: `struct innode' declared inside parameter list
demo.c:71: variable `demo_fops' has initializer but incomplete type
demo.c:73: unknown field `owner' specified in initializer
demo.c:73: warning: excess elements in struct initializer
demo.c:73: warning: (near initialization for `demo_fops')
demo.c:75: unknown field `read' specified in initializer
demo.c:75: warning: excess elements in struct initializer
demo.c:75: warning: (near initialization for `demo_fops')
demo.c:76: unknown field `write' specified in initializer
demo.c:76: warning: excess elements in struct initializer
demo.c:76: warning: (near initialization for `demo_fops')
demo.c:77: unknown field `ioctl' specified in initializer
demo.c:77: warning: excess elements in struct initializer
demo.c:77: warning: (near initialization for `demo_fops')
demo.c:78: unknown field `open' specified in initializer
demo.c:78: warning: excess elements in struct initializer
demo.c:78: warning: (near initialization for `demo_fops')
demo.c:79: unknown field `release' specified in initializer
demo.c:79: warning: excess elements in struct initializer
demo.c:79: warning: (near initialization for `demo_fops')
make: *** [demo.o] 错误 1
我测试过,我加不加#i nclude 都出现同样的编译结果,很郁闷。
解决很长时间也没有解决,请各位高手帮帮忙。小弟先谢谢大家了
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表