请选择 进入手机版 | 继续访问电脑版

 找回密码
 立即注册
搜索
查看: 219|回复: 0

Linux 内核打印 printk

[复制链接]

264

主题

0

回帖

1049

积分

管理员

积分
1049
发表于 2024-2-18 14:43:03 | 显示全部楼层 |阅读模式

内核中没有 C 库,所以不能使用 printf 打印。但它提供了类似的 printk 函数,printk 函数输出的字符串前加一个带尖括号的整数来控制打印级别,如 printk("<6>Hello, world!\n")。级别数值越小,优先级越高,其紧急和严重程度就越高。然而,需要注意的是,并不是所有级别的消息都会进行输出,而是根据 printk 的打印级别进行过滤。

printk 打印级别宏定义:

#define KERN_EMERG  KERN_SOH "0"    /* system is unusable */
#define KERN_ALERT  KERN_SOH "1"    /* action must be taken immediately */
#define KERN_CRIT   KERN_SOH "2"    /* critical conditions */
#define KERN_ERR    KERN_SOH "3"    /* error conditions */
#define KERN_WARNING    KERN_SOH "4"    /* warning conditions */
#define KERN_NOTICE KERN_SOH "5"    /* normal but significant condition */
#define KERN_INFO   KERN_SOH "6"    /* informational */
#define KERN_DEBUG  KERN_SOH "7"    /* debug-level messages */

#define KERN_DEFAULT    KERN_SOH "d"    /* the default kernel loglevel */

内核日志打印级别查看:

cat /proc/sys/kernel/printk
4    4    1    7

该文件包含四个数字值,分别表示:

  1. 控制台日志级别(Console log level):只有级别高于设定值的日志消息才会被显示在控制台上(值要小于该值)。
  2. 默认的消息日志级别(Default message log level):用于打印没有优先级的消息,即当 printk 没有指定消息级别时,将使用该默认级别。
  3. 最低的控制台日志级别(Minimum console log level):控制台日志级别可被设置的最小值,也就是最高的优先级。
  4. 默认的控制台日志级别(Default console log level):控制台日志级别的缺省值。

修改内核日志打印级别:

echo "6 4 1 7" | sudo tee /proc/sys/kernel/printk

修改后的值重启后会恢复,如果要保持,可以将它添加到启动脚本中,以便在系统启动时重新设置。

printk 打印的是控制台,也就是 /dev/console。而图形界面中的终端,其实是把 stdin,stdout,stderr 三个文件重定向了一下。所以 printk 是不能在图形界面中的终端中显示的,当然可以在 /var/log/syslog 或者用 dmesg 查看。

不够打印级别的信息会被写到日志中可通过 dmesg 命令来查看。

dmesg 命令:

实时监控 dmesg 的日志输出:

watch "dmesg | tail -20"

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|深圳市棱讯科技有限公司 ( 粤ICP备2024228160号-2|粤公网安备44030002003510号 )

GMT+8, 2024-5-29 05:06 , Processed in 0.016885 second(s), 19 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表