如何选择性地启用printk?

如何选择性地启用printk?

我想从内核打印一些语句,但不是全部。

那么我可以选择性地使用 printk 吗?

我所说的选择性是指我只想在特定位置启用 printk 并在其他地方禁用它。

现在我只能全局启用(在内核配置中启用 printk)或禁用它;我根本没有选择。

答案1

(编辑:附加信息也在这里:kernel.printk 值的描述

您可以使用 sysctl 命令/系统根据需要更改内核 printk 设置。

sysctl -w kernel.printk="4 4 1 7"

会将 printk 设置设置为“默认”值,而

sysctl -w kernel.printk="3 4 1 3"

会阻止低级别消息输出到控制台。

sysctl kernel.printk

将显示您当前的设置。

来自Linux文档(内核文档):

打印:

printk中的四个值分别表示:console_loglevel、default_message_loglevel、minimum_console_loglevel和default_console_loglevel。

这些值会影响打印或记录错误消息时 printk() 的行为。有关不同日志级别的更多信息,请参阅“man 2 syslog”。

  • console_loglevel:优先级高于此的消息将打印到控制台
  • default_message_loglevel:没有明确优先级的消息将以此优先级打印
  • minimum_console_loglevel:console_loglevel 可以设置的最小(最高)值
  • default_console_loglevel:console_loglevel的默认值

您通常需要成为 root 用户,或者拥有 sudo 权限才能使用 sysctl 写入 (-w) 新值。您还可以将值回显到 /proc/sys/kernel/printk 中,也需要是 root(ish)。


编辑2:

我的 Monkey 调试助手刚刚提醒我,还有另一种获取内核 printk 消息的方法,这可能很有用。

可以请求 syslog/rsyslog/whateverlog 守护进程将内核输出发送到特定文件、管道或套接字,以便由您选择的程序读取、解析、保存或丢弃(视情况而定)。

我的 rsyslog.conf 显示所有紧排。*级别消息发送至/var/log/kern.log,您可以轻松收听该文件并获取您想要的任何消息。

也可以定义自己的设施输入并让 rsyslog 将它们发送到特殊的地方。甚至选择性发送内核警告或者内核临界值如果需要的话,可以向某个地方发送消息。

rsyslog 和 syslog 的配置设置不同,一如既往,手册页是您的朋友。

相关内容