LinuxSir.cn,穿越时空的Linuxsir!

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

编译一个简单的模块出错,请帮我分析一下错误原因。

[复制链接]
发表于 2007-6-20 23:03:09 | 显示全部楼层 |阅读模式
一个非常简单的模块:
root@etch:~$ cat hello.c
#include <linux/init.h>
#include <linux/kernel.h>
#include <linux/module.h>

MODULE_LICENSE ("GPL");
static int __init hello_init(void)
{
printk (KERN_ALERT "hello, world\n");
return 0;
}
static void __exit hello_exit(void)
{
printk (KERN_ALERT "Good bye, cruel world\n");
}
module_init(hello_init);
module_exit(hello_exit);


在debian etch 编译的结果如下:
root@etch:~$ make -C /usr/src/linux-source-2.6.18 M=`pwd` modules
\make: Entering directory `/usr/src/linux-source-2.6.18'
  Building modules, stage 2.
  MODPOST
make[1]: *** [__modpost] 错误 255
make: *** [modules] 错误 2
make: Leaving directory `/usr/src/linux-source-2.6.18'

我不清楚,make的错误255和错误2都代表什么含义。请有经验的人指点下一步具体怎么做。先谢谢。
发表于 2007-6-21 15:11:27 | 显示全部楼层
把Makefile文件拿出来看看
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-6-21 20:11:01 | 显示全部楼层
Makefile 也很简单。

root@etch:~$ cat Makefile
obj-m :=hello.o
#$(MAKE) -C /usr/src/linux-source-2.6.18 M=`pwd` modules

这个模块,我以前在etch还是testing的时候,编译是成功了的。不清楚为什么会这样。
回复 支持 反对

使用道具 举报

发表于 2007-6-22 01:06:07 | 显示全部楼层
Post by Wallace.lee
Makefile 也很简单。

root@etch:~$ cat Makefile
obj-m :=hello.o
#$(MAKE) -C /usr/src/linux-source-2.6.18 M=`pwd` modules

这个模块,我以前在etch还是testing的时候,编译是成功了的。不清楚为什么会这样。
我觉得那可能就是你系统的问题,而不是这段代码的问题了。
看一下你的内核目录树下面的东西是不是全的。如果有必要,重新再编译一下试试看。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-6-22 22:29:29 | 显示全部楼层
感谢楼上的回答。
我读了一下文档/usr/src/linux-source-2.6.18/Documentation/kbuild/modules.txt
发现我的编译命令有问题,应该是 make -C /lib/modules/`uname -r`/build M=`pwd`
这样,编译就成功了。而且编出来的模块可以正常加载。以前编译的方法不对。
回复 支持 反对

使用道具 举报

发表于 2007-6-22 23:49:35 | 显示全部楼层
[QUOTE=][/QUOTE]
呵呵,你这是标准的做法。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

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