荔园在线

荔园之美,在春之萌芽,在夏之绽放,在秋之收获,在冬之沉淀

[回到开始] [上一篇][下一篇]


发信人: HowTo.bbs@bbs.sjtu.edu.cn (howto), 信区: Linux
标  题: Re: 模块编译,求助
发信站: 饮水思源 (Thu May  1 12:47:26 2003)
转信站: SZU!news.tiaozhan.com!news.neu.edu.cn!SJTU

那是因为你包含的头文件不同的原因
/usr/include/linux/verison.h与/usr/src/linux/include/version.h的内容是不同的
/**/usr/include...*/
#define UTS_RELEASE "2.4.20"
#define LINUX_VERSION_CODE 132116
#define KERNEL_VERSION(a,b,c) (((a) << 16) + ((b) << 8) + (c))

/**/usr/src/....*/
#include <linux/rhconfig.h>
#if defined(__module__smp)
#define UTS_RELEASE "2.4.20-8smp"
#elif defined(__module__BOOT)
#define UTS_RELEASE "2.4.20-8BOOT"
#elif defined(__module__bigmem)
#define UTS_RELEASE "2.4.20-8bigmem"
#else
#define UTS_RELEASE "2.4.20-8"
#endif
#define LINUX_VERSION_CODE 132116
#define KERNEL_VERSION(a,b,c) (((a) << 16) + ((b) << 8) + (c))

在module.h中,只要你定义了MODULE,就会包含version.h,好象与__VERSION__没关系。
搜遍内核源代码,只看到很多#define __NO_VERSION__却没看到对__NO_VERSION__的
运用。
/**linux/module.h **/
#if defined(MODULE) && !defined(__GENKSYMS__)
....
#include <linux/version.h>
static const char __module_kernel_version[]
__attribute__((section(".modinfo"))) =
"kernel_version=" UTS_RELEASE;
....
#else
....
系统应该就是拿这个kernel_version与内核的当前版本对比。

不过搞不懂__NO_VERSION__这个宏有什么作用。(好象是没什么作用)

 【 在 ananda (ananda) 的大作中提到: 】
: #define __NO_VERSION__,好像是这个
: 【 在 zhenghao (浩然*星空) 的大作中提到: 】
: : 尝试着编了一个“hello world”级的模块,只有init和cleanup,什么事也不做的。编

: : 通过,用insmod test.o加载,说内核版本不匹配,这个模块是为2.4.9.9编译的,当前

: : 2.4.18.X。
: : 为什么会这样?我在REDHAT下,内核是2.4.18,为什么编译出来的内核是另一个版本呢

: : 问题出在哪里,GCC还是内核代码?
: : 另外怎样查看当前内核和编译的内核?
--
※ 来源:·饮水思源 bbs.sjtu.edu.cn·[FROM: 211.66.8.100]


[回到开始] [上一篇][下一篇]

荔园在线首页 友情链接:深圳大学 深大招生 荔园晨风BBS S-Term软件 网络书店