LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 1131|回复: 6

为什么我的内核模块编译出错?

[复制链接]
发表于 2004-6-16 17:18:46 | 显示全部楼层 |阅读模式
安装时Sarge 的kernel 为2.4.26, 装完后从kernel.org下载2.6.6 kernel进行编译,现在整个系统使用已经十分正常了,就是在编译内核模块时出错,源代码为:
#include <linux/init.h>
#include <linux/module.h>
#include <linux/kernel.h>

static int
hello_init (void)
{
        printk ("<1>Hello, world\n");
        return 0;
}

static void
hello_exit (void)
{
        printk ("<1>Goodbye, cruel world\n");
}

module_init (hello_init);
module_exit (hello_exit);

编译方式:
gcc -c -O3 hello.c
gcc -c -O3 hello.c -I/usr/src/linux/include
都不行。

错误出现在linux/module.h 头文件中,有许多东西没有定义。

这是怎么原因阿? 有什么解决对策吗? 请大虾们帮帮忙阿!!
 楼主| 发表于 2004-6-17 08:51:57 | 显示全部楼层
自己顶一下,没有人知道吗?:help
发表于 2004-6-17 11:05:13 | 显示全部楼层
您编译的是 2.6.x 的 module 还是 2.4.x 的 module?
 楼主| 发表于 2004-6-17 11:32:24 | 显示全部楼层
我编译的是2.6.X的模块, 头文件错误的问题解决了。

现在在使用 insmod hello.o是出现Invalid module format的错误,这个问题不知道又如何解决??
我试过cp hello.o hello.ko; insmod hello.ko 但是还是不行
发表于 2004-6-17 13:03:10 | 显示全部楼层
2.6内核的模块使用.ko扩展名。
你的hello.o不可以更名为hello.ko做模块用。生成.ko是要使用新方法的,请查看2.6内核的文档和内核源文件中的Makefile。
简单地说,先写一个Makefile如下:
obj-m := module.o
然后用如下命令:
make -C /path/to/kernel/source SUBDIRS=$PWD modules
 楼主| 发表于 2004-6-17 14:06:46 | 显示全部楼层
了解, 非常感谢!!!
发表于 2004-8-25 20:24:05 | 显示全部楼层

请问 dan

你的头文件错误问题是怎么解决的
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表