hero_zxf
驱动牛犊
驱动牛犊
  • 注册日期2003-12-30
  • 最后登录2004-02-03
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1359回复:1

请教LINUX下的驱动开发,file_operations结构如何用

楼主#
更多 发布于:2003-12-31 13:03
/*
我的信箱: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_chartest.txt (4KB)  0
tigerzd
驱动老牛
驱动老牛
  • 注册日期2001-08-25
  • 最后登录2004-12-13
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2003-12-31 15:11
http://www.driverdevelop.com/read.php?t=A&id=168
犯强汉者,虽远必诛! [img]http://www.driverdevelop.com/forum/upload/tigerzd/2002-12-13_sf10.JPG[/img]
游客

返回顶部