printk params和syslog.h设施名称

时间:2012-10-25 19:23:15

标签: linux module linux-kernel

我们可以传递给printk的许多参数:

 printk (KERN_INFO  "blahahaha");
 printk (KERN_EMERG "bababa");

等等。这些标签是否与syslog.conf中的设施级别有关? KERN_EMERG要打印到“kern.emerg”指定的设施吗?这两个实体是如何捆绑的?

由于

1 个答案:

答案 0 :(得分:1)

按顺序排列:

  

这些标签是否与syslog.conf中的设施级别有关?

是。该标记实际上是一对,KERN EMERG,即KERN工具和EMERG级别 - 它们是大写的,因为它是一个预处理器宏,按惯例以大写字母书写。 Linux内核只关心KERN工具,因此未定义其他工具。

所有这些printk命令都会记录到内部内核环缓冲区。根据您的内核设置,此消息可能会也可能不会复制到控制台(可能是屏幕或串行终端)。

  

KERN_EMERG会打印到“kern.emerg”指定的设施吗?

假设您的意思是登录到与kern.emerg匹配的文件,那么是。 syslog.conf中符合此条目的条目示例为kern.*kern.emerg*.emerg。级别emerg的消息被视为致命,即发生了严重错误。

来自此级别的内核的消息可能不会以syslog文件结尾,因为该错误可能会阻止将数据写入硬盘驱动器。

  

这两个实体是如何捆绑的?

有一个辅助守护程序,通常称为klogd。它接受来自内核环形缓冲区的输出,默认情况下将它们传递给syslogd,并根据syslog.conf文件记录它们。

总结如下

printk将邮件放入ring bufferring bufferklogd读取,syslogd将其转发给Syslogdsyslogd.conf将此数据记录到{{1}}文件指定的目标中。