printk向用户空间的输出,两个守护进程syslogd和klogd用于处理日志信息。小于控制台级别的信息会被输出到console,而大于控制台级别的信息不输出,只是写入/var/log/messages和/proc/kmsg中。可以通过dmesg查看。
1.查看当前控制台日志信息的打印级别:
$ cat /proc/sys/kernel/printk
4 4 1 7
分别对应:当前的日志级别、未明确指定日志级别时默认消息级别、最小允许的日志级别、引导时的默认日志级别。
2.若需要需改当前的日志打印日志级别为7,则修改打印的命令如下:
(1).echo 7 > /proc/sys/kernel/printk
(2).klogd -c 7 需要先关闭klogd,用ps -C klogd 查出这个进程的pid,然后kill。(注:printk函数将消息写到一个长度为__LOG_BUF_LEN字节的循环缓冲区中,然后唤醒任何睡眠在syslog系统调用或正在读取/proc/kmsg的进程。循环缓冲区满了以后,会绕回开始处填写新的内容。printk()可以在中断中调用。当printk()的调用频率过高时,还可以通过printk_ratelimit()限制输出)。
3.不够打印级别的信息会被写到日志中可通过dmesg 或者 cat /proc/kmsg查看。
4.printk的打印级别定义在include/linux/Printk.h
#define KERN_EMERG "<0>" /* system is unusable */
#define KERN_ALERT "<1>" /* action must be taken immediately */
#define KERN_CRIT "<2>" /* critical conditions */
#define KERN_ERR "<3>" /* error conditions */
#define KERN_WARNING "<4>" /* warning conditions */
#define KERN_NOTICE "<5>" /* normal but significant condition */
#define KERN_INFO "<6>" /* informational */
#define KERN_DEBUG "<7>" /* debug-level messages */
5.printk打印优先级别由KERN_EMERG开始往下依次递减,即数字越小优先级越高。
6.全志平台下更改开机默认日志优先级级别,lichee/tools/pack/chips/sun8iw5p1/configs/default/env.cfg文件中修改,修改如下:
9 loglevel=7