阅读:1360回复:1
请教LINUX下的驱动开发,file_operations结构如何用
/*
我的信箱:hero_zxf@163.com 帮帮我啊!帮帮我啊!帮帮我啊!帮帮我啊!帮帮我啊!帮帮我啊!帮帮我啊!帮帮我啊!帮帮我啊!帮帮我啊! 我是刚学LINUX的超级新手,最近买了本LINUX内核源码分析的书看了几天,然后荡了篇关于“字符设备驱动程序” 开发的例子。欣喜若狂的把这些代码敲进机器一编译,妈呀出现了许多的警告和错误。我彻底晕菜了,不知能否帮 忙分析一下啊啊啊啊......! 我所用的操作系统是 redhat9.0 内核版本:2.4.20-8 这是我编译过程中出现的所有信息: 编译所用的命令: [root@localhost pcitest]# gcc -D__KERNEL__ -DMODULE -LINUX -c chartest.c 编译后的警告: In file included from /usr/include/linux/fs.h:23, from chartest.c:28: /usr/include/linux/string.h:8:2: warning: #warning Using kernel header in userland! chartest.c:35: warning: `struct file\' declared inside parameter list chartest.c:35: warning: its scope is only this definition or declaration, which is probably not what you want chartest.c:35: warning: `struct inode\' declared inside parameter list chartest.c:42: warning: `struct file\' declared inside parameter list chartest.c:42: warning: `struct inode\' declared inside parameter list chartest.c:47: warning: `struct file\' declared inside parameter list chartest.c:47: warning: `struct inode\' declared inside parameter list chartest.c:52: warning: `struct file\' declared inside parameter list chartest.c:52: warning: `struct inode\' declared inside parameter list chartest.c:57: variable `test_fops\' has initializer but incomplete type chartest.c:58: unknown field `read\' specified in initializer chartest.c:58: warning: excess elements in struct initializer chartest.c:58: warning: (near initialization for `test_fops\') chartest.c:59: unknown field `write\' specified in initializer chartest.c:59: warning: excess elements in struct initializer chartest.c:59: warning: (near initialization for `test_fops\') chartest.c:60: unknown field `open\' specified in initializer chartest.c:60: warning: excess elements in struct initializer chartest.c:60: warning: (near initialization for `test_fops\') chartest.c:61: unknown field `release\' specified in initializer chartest.c:62: warning: excess elements in struct initializer chartest.c:62: warning: (near initialization for `test_fops\') chartest.c:57: storage size of `test_fops\' isn\'t known [root@localhost pcitest]# */ 代码: #define __NO_VERSION__ #include <linux/module.h> #include <linux/version.h> char kernel_version [] = UTS_RELEASE; #include <linux/types.h> #include <linux/fs.h> //#include <linux/mm.h> #include <linux/errno.h> #include <asm/segment.h> unsigned int test_major = 0; static int read_test(struct inode *node,struct file *file,char *buf,int count) { printk(\"in read process\"); return count; } static int write_test(struct inode *inode,struct file *file,const char *buf,int count) { printk(\"in write process\"); return count; } static int open_test(struct inode *inode,struct file *file ) { printk(\"in open process\"); return 0; } static void release_test(struct inode *inode,struct file *file ) { printk(\"in release process\"); } struct file_operations test_fops = { read: read_test, write: write_test, open: open_test, release: release_test }; int init_module(void) { int result; result = register_chrdev(0, \"test\", &test_fops); if (result < 0) { printk(\"test: can\'t get major number\\n\"); return result; } if (test_major == 0) test_major = result; /* dynamic */ return 0; } void cleanup_module(void) { unregister_chrdev(test_major, \"test\"); } |
|
|
沙发#
发布于:2003-12-31 15:11
http://www.driverdevelop.com/read.php?t=A&id=168
|
|
|