我将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内核上失败。
我见过类似的问题,但由于我无法修改其他模块,这些解决方案无济于事。
如果它有所不同,模块源位于不同的文件夹中。
答案 0 :(得分:0)
要使init_pgmgr
对其他模块可见,请添加
EXPORT_SYMBOL(init_pgmgr);
到PageMgrMod
模块。如果没有上述声明,该符号可用于内核中内置的任何代码(在某些地方称为外部符号),但不适用于其他可加载模块。
这类似于问题#413955 How to write Linux driver module call/use another driver module?