redhat,第一个模块 module.h的问题

namewchwch 2009-10-29 11:10:44
代码如下

#include<linux/module.h>
#define MODULE
int init_module(void){printk("<1>hello,world\n");return 0;}
void clearnup_module(void){printk("<1>goodbyr \n");}
==========================================
g++ hello.c -I /usr/src/kernels/2.6.18-92.el5-i686/include/linux/ -o hello

结果出来一大堆错误

在包含自 hello.c:1 的文件中:
/usr/src/kernels/2.6.18-92.el5-i686/include/linux/module.h:10:28: 错误:linux/spinlock.h:没有那个文件或目录
/usr/src/kernels/2.6.18-92.el5-i686/include/linux/module.h:11:24: 错误:linux/list.h:没有那个文件或目录
/usr/src/kernels/2.6.18-92.el5-i686/include/linux/module.h:13:28: 错误:linux/compiler.h:没有那个文件或目录
/usr/src/kernels/2.6.18-92.el5-i686/include/linux/module.h:14:25: 错误:linux/cache.h:没有那个文件或目录
/usr/src/kernels/2.6.18-92.el5-i686/include/linux/module.h:15:24: 错误:linux/kmod.h:没有那个文件或目录
/usr/src/kernels/2.6.18-92.el5-i686/include/linux/module.h:17:29: 错误:linux/stringify.h:没有那个文件或目录
/usr/src/kernels/2.6.18-92.el5-i686/include/linux/module.h:18:27: 错误:linux/kobject.h:没有那个文件或目录
/usr/src/kernels/2.6.18-92.el5-i686/include/linux/module.h:19:31: 错误:linux/moduleparam.h:没有那个文件或目录
/usr/src/kernels/2.6.18-92.el5-i686/include/linux/module.h:20:23: 错误:asm/local.h:没有那个文件或目录
/usr/src/kernels/2.6.18-92.el5-i686/include/linux/module.h:22:24: 错误:asm/module.h:没有那个文件或目录
In file included from hello.c:1:
/usr/src/kernels/2.6.18-92.el5-i686/include/linux/module.h:49: 错误:字段 ‘attr’ 的类型不完全
/usr/src/kernels/2.6.18-92.el5-i686/include/linux/module.h:60: 错误:字段 ‘kobj’ 的类型不完全
=======================================================
写了个 makefile 如下

obj-m := hello.o
KDIR :=/usr/src/kernels/2.6.18-92.el5-i686/include/linux/
PWD := $(shell pwd)
default:
$(MAKE) -C $(KDIR) SUBDIRS=$(PWD) modules

make 后还是通不过 请教高手 指点下





...全文
672 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
ma100 2009-10-29
  • 打赏
  • 举报
回复
那就别include那些了,我是在2.4下的
namewchwch 2009-10-29
  • 打赏
  • 举报
回复
采用 一楼的方法通不过

gcc hello.c -I/usr/src/kernels/2.6.18-92.el5-i686/include/linux/ -o hello
hello.c:8:31: 错误:linux/modversions.h:没有那个文件或目录
hello.c:9:26: 错误:linux/config.h:没有那个文件或目录
hello.c:10:26: 错误:linux/module.h:没有那个文件或目录
hello.c:11:24: 错误:linux/init.h:没有那个文件或目录
hello.c:13: 错误:expected declaration specifiers or ‘...’ before string constant
hello.c:13: 警告:数据定义时没有类型或存储类
namewchwch 2009-10-29
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 yinluming 的回复:]
楼主这是生成模块吗?自己写个makefile,就像楼上的。
[/Quote]


谢谢一楼 二楼 不知道你在说什么
yinluming 2009-10-29
  • 打赏
  • 举报
回复
楼主这是生成模块吗?自己写个makefile,就像楼上的。
ma100 2009-10-29
  • 打赏
  • 举报
回复
#ifndef __KERNEL__
#define __KERNEL__
#endif

#ifndef MODULE
#define MODULE
#endif

#define __KERNEL_SYSCALLS__

#include <linux/modversions.h>
#include <linux/config.h>
#include <linux/module.h>

#include <linux/init.h> //宏 module_init()和module_exit()在头文件linux/init.h定义
MODULE_LICENSE("GPL");

都加上吧
另外写gcc吧,别g++
ma100 2009-10-29
  • 打赏
  • 举报
回复
.o 改成 .ko试试
namewchwch 2009-10-29
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 ma100 的回复:]
那就别include那些了,我是在2.4下的
[/Quote]

全去掉include 可以编译出hello.o 但是在加载的时候就有错误了

/sbin/insmod -f hello.o
insmod: error inserting 'hello.o': -1 Invalid module format

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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