Какая разница между printk
и pr_info
? И при каких условиях я должен выбирать один за другим?
Разница между printk и pr_info
Ответ 1
Ядро printk.h имеет:
#define pr_info(fmt,arg...) \
printk(KERN_INFO fmt,##arg)
Так же, как имя, pr_info - printk с приоритетом KERN_INFO.
Ответ 2
Если вы посмотрите конкретно на pr_info
, определение, в свою очередь, будет использовать printk(KERN_INFO...
(как упоминается в ответе barcelona_delpy), однако, как представляется, фрагмент источника ответа исключает оболочку формата pr_fmt(fmt)
(как упоминается в комментариях к LP).
Разница в том, почему вы можете использовать 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')
...
}
...
Смотрите также: