曲径通幽论坛

标题: CONFIG_MODVERSIONS [打印本页]

作者: beyes    时间: 2011-5-20 10:15
标题: CONFIG_MODVERSIONS
CONFIG_MODVERSIONS 用来决定是否开启版本控制,该选项防止将接口定义和当前内核版本不再匹配的废弃模块载入内核。

在编译 vmlinux 时,最后会利用 modpost 来解析 vmlinux.o 对象文件,并将基本内核导出的所有符号都记录到文件 Module.symvers 中去。如果没有打开 CONFIG_MODVERSIONS 选项,那么你看到的 Module.symvers 文件中第一列符号 CRC 校验值都是 0x00000000 。如果打开该选项,那么第一列就会显示出各个符号的 CRC 校验值,如:
0x2d6c0f40      put_mnt_ns      vmlinux EXPORT_SYMBOL
0x6c386a8c      clear_bdi_congested     vmlinux EXPORT_SYMBOL
... ...

一旦设置过这个配置选项,就意味着打开了内核的 Module versioning功能。Module versioning 功能应用在我们使用模块的场合。如果 Module versioning 功能被打开的话,它会以每个导出符号的 C 原型声明作为输入,计算出对应的CRC校验值,保存在文件 Module.symvers 中。如此一来,内核在后面要加载使用模块的时候,会两相比较模块中的CRC值和保存下来的CRC值,如果发现不相等,内核就拒绝加载这个模块。




欢迎光临 曲径通幽论坛 (http://www.groad.net/bbs/) Powered by Discuz! X3.2