现有的Linux模块符号

时间:2011-09-30 17:30:24

标签: linux linux-kernel linux-device-driver kernel kernel-module

我将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内核上失败。

我见过类似的问题,但由于我无法修改其他模块,这些解决方案无济于事。

如果它有所不同,模块源位于不同的文件夹中。

1 个答案:

答案 0 :(得分:0)

要使init_pgmgr对其他模块可见,请添加

EXPORT_SYMBOL(init_pgmgr);

PageMgrMod模块。如果没有上述声明,该符号可用于内核中内置的任何代码(在某些地方称为外部符号),但不适用于其他可加载模块。

这类似于问题#413955 How to write Linux driver module call/use another driver module?