• 全部
  • 系统维护与使用
  • 应用程序开发
  • 内核源代码
  • 驱动程序开发
  • CPU和硬件区
  • UNIX文化
  • Solaris
  • Power Linux
  • 问答

小弟因工作需要,要写Linux的设备驱动,正学习中,一起没搞过Linux方面的开发,没经验,现碰到一个简单问题,请多多指点

土豆 2003-11-28 11:06:19
我写了一个非常简单的使用proc的小例子mytest.c,希望能在Linux下运行,Linux使最新的Redhat9,下面是源代码:

#ifndef MODULE
#define MODULE
#endif

#include <linux/module.h>
#include <linux/types.h>
#include <linux/proc_fs.h>


int test_read_proc(char *buf, char **start, off_t offset,int count, int *eof, void *data)
{
int len;
len = sprintf(buf,"\nOnly a test\n");
*eof = 1;

return len;
}

int init_module(void)
{
create_proc_read_entry("test2003",
0,
NULL, /* parent dir */
test_read_proc,
NULL /* client data */);
return 0;
}

void cleanup_module(void)
{
remove_proc_entry("test2003", NULL /* parent dir */);
}


可是一编译就出错,而起报的错误报到头文件中了。In file included from mytest.c:7:
/usr/include/linux/proc_fs.h:70: parse error before "atomic_t"
/usr/include/linux/proc_fs.h:72: parse error before "rdev"
/usr/include/linux/proc_fs.h:187: parse error before "kdev_t"
/usr/include/linux/proc_fs.h:203: parse error before "void"

更有甚者,我即使即使一个空的init_module和clearup_module,仅仅包含proc_fs.h也出同样的错误,如下:
#ifndef MODULE
#define MODULE
#endif

#include <linux/module.h>
#include <linux/types.h>
#include <linux/proc_fs.h>

int init_module(void)
{
return 0;
}

void cleanup_module(void)
{
}
请熟悉此道的朋友指点指点,领我进门,分是小事,要多少加多少,我不胜感激。
...全文
10 点赞 收藏 7
写回复
7 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
CoolQ 2003-11-28
这种问题都问过不知道多少遍了,你编译Module的话,不能用/usr/include里的头文件,需要使用/usr/src/linux-2.4/include里的头文件,需要用-I来指定路径!
回复
土豆 2003-11-28
唉,还是不行,其实我原来也定义过__KERNEL__
回复
土豆 2003-11-28
我试下看
回复
blh 2003-11-28
你可能没有定义__KERNEL__宏
用下面的命令行编译
gcc -c -D__KERNEL__ -DLINUX -DMODULE -DMODULEVERSION mytest.c
回复
土豆 2003-11-28
对不起,分给错了,本来是给CoolQ()的,给成bjyjy了
回复
土豆 2003-11-28
谢谢Cool,老猫,所谓会者不难,难者不会,就这个道理,在你们看来很简单,在我来看就难了,呵呵,总之,不胜感谢。
回复
bjyjy 2003-11-28
参考LDD,《Linux Device Driver》
回复
发帖
Linux/Unix社区
创建于2007-08-27

2.0w+

社区成员

Linux/Unix社区 应用程序开发区
申请成为版主
帖子事件
创建了帖子
2003-11-28 11:06
社区公告
暂无公告