阅读:2275回复:0
file_operation的问题
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 都出现同样的编译结果,很郁闷。 解决很长时间也没有解决,请各位高手帮帮忙。小弟先谢谢大家了 |
|