Author-------Dansen-----xzd2734@163.com
编写模块时一般都需要包含头文件<linux/module.h>,而在module.h中定义了符号__module_kernel_version
static const char __module_kernel_version[] __attribute__((section(".modinfo"))) =
"kernel_version=" UTS_RELEASE;
#define UTS_RELEASE "2.4.18-rmk7-pxa1" //include/linux/version.h
符号__module_kernel_version在编译后被放在.o文件的.modinfo段,insmod使用它检查模块和当前内核版本是否匹配.
看到《linux设备驱动程序2》中所说的如果把模块代码分为两块,则需要在另一个文件包含module.h前定义__NO_VERSION__ 使得不再重复定义__module_kernel_version,不过在我的源代码里并没什么用,在我的module.h并没有这种条件包含,而且编译也不会出错,只是用objdump工具察看时,确实在.modinfo出现了两个__module_kernel_version符号。objdump -s hello.o
下面是一个Makefile文件
CC = /opt/host/armv4l/bin/armv4l-unknown-linux-gcc
LD = /opt/host/armv4l/bin/armv4l-unknown-linux-ld
CF