Bootstrap

Linux之printk研究

Linux之printk研究



前言

本文主要介绍printk日志打印的使用


一、printk的基本介绍

函数原型

int printk(const char * fmt, ...);

方法声明

printk(KERN_INFO "Message: %s\n", arg);
- KERN_INFO 的位置代表的是 要打印的消息级别
- printk 的第一个参数 `KERN_INFO "Message: %s\n"` 整体是一个,格式化字符串
- arg 参数的位置, 对应占位的值

printk官方文档对于消息列表的描述
在这里插入图片描述
可以将printk的消息列表简述为以下8个级别,数值越大,表示级别越低,对应的消息也就不重要
在这里插入图片描述
上述消息列表的定义见include/linux/kern_levels.h,具体如下

#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 */

二、printk变量打印格式

1.基本变量

在这里插入图片描述

2.指针

在这里插入图片描述

具体使用

1、查看信息

printk函数所打印的消息,可以通过cat /dev/kmsg或dmesg | tail命令查看历史消息

1、配置输出

不是所有级别的消息都会进行输出,他有一个控制开关:/proc/sys/kernel/printk
在这里插入图片描述
上述四个值的含义:
1、当前可以消息级别
2、默认的消息级别
3、最小消息级别
4、Boot启动时默认消息级别
因此,可以通过控制该文件的值,来管控消息。

打开消息打印
echo 0 > /proc/sys/kernel/printk 
如果想要把所有信息都打印出来
echo 8 > /proc/sys/kernel/printk
关消息打印
echo 0 1 4 7 > /proc/sys/kernel/printk
将这些打印记录进一个文件,则可以使用 klogd 进行重定向
klogd -o -f ./kernel.msg

总结

以上便是关于在Linux下对printk的研究

;