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的研究