免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 9757 | 回复: 7
打印 上一主题 下一主题

请大牛解答下Module.symvers文件和CRC值怎么计算的(编译模块到底和哪些环境有关系) [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-02-12 17:34 |只看该作者 |倒序浏览
编译内核后会产生Module.symvers这个文件,
这个文件里计算了导出函数的CRC值。


在编译驱动模块时, 会调用srcipt/mod/modpost处理导出函数的CRC值,
见XXX.mod.c文件
static const struct modversion_info ____versions[]
18 __used
19 __attribute__((section("__versions"))) = {
20     { 0x79f0350e, "module_layout" },
21     { 0xadf42bd5, "__request_region" },
22     { 0xcc4e9169, "cdev_del" },
23     { 0xdfead558, "kmalloc_caches" },
24     { 0xeabd7227, "cdev_init" },
25     { 0xb279da12, "pv_lock_ops" },
26     { 0x6980fe91, "param_get_int" },


如果驱动中调用的函数的CRC值和内核中CRC值不相等,就会导致模块加载失败。


请问Module.symvers这个文件是怎么产生的?文件中各函数的CRC值是如何计算出来的?

谢谢!!!

论坛徽章:
0
2 [报告]
发表于 2011-02-12 19:26 |只看该作者
没研究过,不过编译模块貌似装与内核版本对应的kernel-devel包就可以了(用RPM的话)。

论坛徽章:
0
3 [报告]
发表于 2011-02-12 22:52 |只看该作者
你的模块是否能够插入与模块依赖符号接口的CRC相关联,简单的说:你的模块依赖funa()函数,如果内核中funa()的参数个数,参数类型,返回值类型等有一点变化,Module.symvers中funa()的CRC就不一样了,你的模就需要重新编译你的内核模块,如果funa()接口没有改变,只是函数体变了,没有问题,CRC不变,内核模块不重新编译也可以插入内核。数据结构同理。

论坛徽章:
0
4 [报告]
发表于 2011-02-14 09:41 |只看该作者
funa()这个函数在哪个文件中? 我怎么没找到呢。

论坛徽章:
0
5 [报告]
发表于 2011-02-14 09:41 |只看该作者
funa()这个函数在哪个文件中? 我怎么没找到呢。

论坛徽章:
0
6 [报告]
发表于 2011-02-19 13:31 |只看该作者
funa() 只是举例,此处是指你的主题帖中的 cdev_init 等函数, 晕倒。。。。。。。。。

论坛徽章:
0
7 [报告]
发表于 2012-09-05 17:00 |只看该作者
本帖最后由 nehcc 于 2012-09-05 17:03 编辑

我也迫切想知道 Module.symvers 的 CRC 是怎么算出来的呢 ?


迫切 !


3 楼的说法看似有理,但缺乏证据 !

我发现(不太确定):两个函数一模一样,但导出CRC却不一样了 .....

论坛徽章:
2
天蝎座
日期:2014-07-23 21:17:122015年辞旧岁徽章
日期:2015-03-03 16:54:15
8 [报告]
发表于 2014-12-26 14:32 |只看该作者
IBM developerworks 搜索
《解析Linux内核可装载模块的版本检查机制》
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP