ссылка на ошибку уровня журнала консоли в модуле ядра
У меня есть модуль Linux, который имеет функцию отладки, и я просто хочу вызвать эту функцию в режиме отладки. Теперь у меня есть такой код:
if (console_loglevel >= CONSOLE_LOGLEVEL_DEBUG)
dump_my_message(dev, my_msg);
Но когда построите этот код в linux-next, он выбросит ниже ошибку:
CHK include/generated/uapi/linux/version.h
Kernel: arch/x86/boot/bzImage is ready (#2)
Building modules, stage 2.
MODPOST 2738 modules
ERROR: "console_printk" [drivers/mymodule.ko] undefined!
scripts/Makefile.modpost:91: recipe for target '__modpost' failed
make[1]: *** [__modpost] Error 1
Makefile:1117: recipe for target 'modules' failed
make: *** [modules] Error 2
Можете ли вы помочь выяснить, как это сделать? Спасибо!!!
1 ответ:
Ошибка компиляции вызвана тем, что символ
console_printk
не экспортируется, поэтому он не может быть использован модулями.Что вам действительно следует использовать, однако, этодинамическая отладка функциональность и ее
pr_debug()
/dev_dbg()
функции.В основном вам нужно убедиться, что
CONFIG_DYNAMIC_DEBUG
включен в вашем ядре, используйтеdev_dbg()
во всех местах, где вы хотите написать некоторый отладочный код, а затем динамически включите отладочные сообщения, например:
Чтобы включить все сообщения в вашем модуле, добавьте
dyndbg=+p
в конце вашего модуля.insmod
/modprobe
звони.Чтобы выборочно включить только некоторые сообщения, используйте язык запросов, описанный в документации. Например, чтобы включить сообщения только от функций
foo()
иbar()
в вашем модуле, используйте:insmod mymodule.ko dyndbg="func foo +p; func bar +p"