Символ существующего модуля Linux - PullRequest
3 голосов
/ 30 сентября 2011

Я портирую модуль 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 голосов
/ 02 октября 2011

Чтобы сделать init_pgmgr видимым для других модулей, добавьте

EXPORT_SYMBOL(init_pgmgr);

до PageMgrMod модуля. Без вышеуказанного объявления символ доступен для любого кода, встроенного в ядро ​​(в некоторых местах называемого внешним символом), но не для других загружаемых модулей.

Это похоже на вопрос # 413955 Как записать вызов модуля драйвера Linux / использовать другой модуль драйвера?

...