【发布时间】:2011-11-28 15:50:05
【问题描述】:
我正在将一个 Linux 模块 (PageMgrMod) 移植到更新的内核,但现在这些功能对其他模块不可见。例如,加载使用PageMgrMod 的模块会出现错误
no symbol version for init_pgmgr
Unknown symbol init_pgmgr
但读取/proc/kallsyms 显示符号存在
ffffffff81883c0d T x86_init_pgd_noop
ffffffffa012a5c0 r __ksymtab_init_pgmgr [PageMgrMod]
ffffffffa012a669 r __kstrtab_init_pgmgr [PageMgrMod]
ffffffffa012a600 r __kcrctab_init_pgmgr [PageMgrMod]
ffffffffa012a380 T init_pgmgr [PageMgrMod]
此功能在 2.6.18 内核上有效,但在 2.6.32-24 内核上失败。
我见过类似的问题,但由于我无法修改其他模块,因此这些解决方案没有帮助。
如果有所不同,则模块源位于不同的文件夹中。
【问题讨论】:
-
您在构建使用
PageMgrMod的模块时是否使用了来自PageMgrMod模块的Module.symvers 文件?使用不正确的 .symvers 文件(或根本没有文件)可能会导致您描述的错误。
标签: linux linux-kernel linux-device-driver kernel kernel-module