linux 内核模块中的宏

本文介绍了在Linux内核模块编程中常见的宏,如__module_kernel_version、THIS_MODULE及其作用。讨论了模块编译过程,特别是如何处理__.modinfo段,并通过实例解析了MOD_INC_USE_COUNT、MOD_DEC_USE_COUNT等计数宏的使用。同时,提到了Makefile中的编译选项和模块作者、描述等信息的定义方式。
摘要由CSDN通过智能技术生成

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

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值