Какая разница между printk
и pr_info
функциями? И при каких условиях я должен выбирать один за другим?Разница между printk и pr_info
ответ
kernel's printk.h имеет:
#define pr_info(fmt,arg...) \
printk(KERN_INFO fmt,##arg)
Так же, как имя, pr_info является printk с приоритетом KERN_INFO.
Если вы посмотрите конкретно на pr_info
, определение, в свою очередь, будет использовать printk(KERN_INFO ...
(как указано в barcelona_delpy's answer); однако, исходный фрагмент ответа, похоже, исключает обертку формата pr_fmt(fmt)
(как упоминается в LP comment).
Разница почему вы можете использовать pr_info
над printk(KERN_INFO ...
это пользовательское форматирование можно установить. Если вы хотите, чтобы префикс вашего сообщения в модуле с printk
, метод является явно добавить префикс в каждой строке:
printk(KERN_INFO "mymodule: hello there\n");
// outputs "mymodule: hello there"
или:
printk(KERN_INFO KBUILD_MODNAME " hello there\n");
// outputs "mymodule: hello there"
Однако, если вы используете pr_info
(и другие pr_*
функции), вы можете заново определить формат и просто использовать pr_info
без дополнительной работы:
... (includes)
#ifdef pr_fmt
#undef pr_fmt
#endif
#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
...
{
...
pr_err("hello there\n");
// outputs "mymodule: hello there" (assuming module is named 'mymodule')
...
}
...
Смотрите также:
@CL. Да, мое плохое. – LPs
Все они эквивалентны, кроме отладочной. – 0andriy