+ -
当前位置:首页 → 问答吧 → 为什么我的内核模块编译出错?

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

时间:2004-06-16

来源:互联网

安装时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 头文件中,有许多东西没有定义。

这是怎么原因阿? 有什么解决对策吗? 请大虾们帮帮忙阿!!

作者: dan   发布时间: 2004-06-16

自己顶一下,没有人知道吗?

作者: dan   发布时间: 2004-06-17

您编译的是 2.6.x 的 module 还是 2.4.x 的 module?

作者: chaisave   发布时间: 2004-06-17

我编译的是2.6.X的模块, 头文件错误的问题解决了。

现在在使用 insmod hello.o是出现Invalid module format的错误,这个问题不知道又如何解决??
我试过cp hello.o hello.ko; insmod hello.ko 但是还是不行

作者: dan   发布时间: 2004-06-17

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

作者: trinity   发布时间: 2004-06-17

了解, 非常感谢!!!

作者: dan   发布时间: 2004-06-17

你的头文件错误问题是怎么解决的

作者: 糊涂龙   发布时间: 2004-08-26

热门下载

更多