ссылка на ошибку уровня журнала консоли в модуле ядра


У меня есть модуль 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 4

1 ответ:

Ошибка компиляции вызвана тем, что символ console_printk не экспортируется, поэтому он не может быть использован модулями.

Что вам действительно следует использовать, однако, этодинамическая отладка функциональность и ее pr_debug()/dev_dbg() функции.

В основном вам нужно убедиться, что CONFIG_DYNAMIC_DEBUG включен в вашем ядре, используйте dev_dbg() во всех местах, где вы хотите написать некоторый отладочный код, а затем динамически включите отладочные сообщения, например:

  1. Чтобы включить все сообщения в вашем модуле, добавьте dyndbg=+p в конце вашего модуля.insmod/modprobe звони.

  2. Чтобы выборочно включить только некоторые сообщения, используйте язык запросов, описанный в документации. Например, чтобы включить сообщения только от функций foo() и bar() в вашем модуле, используйте:

    insmod mymodule.ko dyndbg="func foo +p; func bar +p"