小弟因工作需要,要写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)
{
}
请熟悉此道的朋友指点指点,领我进门,分是小事,要多少加多少,我不胜感激。
...全文
56 7 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
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》

23,217

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧