2013-06-19 1 views
5

У меня есть экспортированные функции foo() и foo1() из a.ko (модуль ядра), foo1() принимает входной параметр, указатель функции. Я вызываю foo1() из b.ko и передаю foo() в качестве входного параметра.EXPORT_SYMBOL в модуле ядра | undefined symbol во время insmod

Я вижу неисправность insmod для b.ko (неизвестный символ foo), хотя a.ko был инсодирован до b.ko.

Любые объяснения/решения?

Благодаря, Лаки

+0

Вы построили модули в разных каталогах? Вы использовали файл .symvers при создании b.ko? См. Также: http://stackoverflow.com/questions/12311867/ – Eugene

+0

Минимальный рабочий пример: https://stackoverflow.com/questions/12311867/how-to-call-exported-kernel-module-functions-from-another- module/44614246 # 44614246 –

ответ

3

Там два способа решить эту проблему, 1) обобщить как модули ядра в том же Makefile, т.е. OBJS-м: = a.o в обратном порядке 2) Включить ** KBUILD_EXTRA_SYMBOLS = < «абсолютный путь к модулю .symvers модуля ядра, который экспортирует функцию или переменную»> в Makefile модуля ядра, который будет использовать экспортированную функцию или переменную.

+0

Каков формат строки KBUILD_EXTRA_SYMBOLS? Make говорит мне «смешанные неявные и нормальные правила: устаревший синтаксис» – jeremiah

+1

@jeremiah, KBUILD_EXTRA_SYMBOLS - это переменная make, и я думаю, что нет формата как такового. GNU делает «смешанные неявные и обычные правила: устаревший синтаксис» из-за использования новой версии GNU make (4.0). Попробуйте использовать версию GNU make (3.8.1) для компиляции модуля. Перейдите по ссылке http://blog.melski.net/2015/01/12/whats-new-in-gnu-make-4-1/ –