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

编译内核后会产生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值是如何计算出来的?

谢谢!!!

作者: Leeu365   发布时间: 2011-02-12

没研究过,不过编译模块貌似装与内核版本对应的kernel-devel包就可以了(用RPM的话)。

作者: tempname3   发布时间: 2011-02-12