有时候kernel log内容过多/过少影响我们分析问题,因此需要对kernel log进行设置。
查看平台默认kernel loglevel
$ cat /proc/sys/kernel/printk
6 6 1 7
kernle log级别为6 6 1 7
关闭所有kernel log
$ echo "0 6 1 7" >proc/sys/kernel/printk //往printk文件写入“0 6 1 7”,关闭所有kernle log
$ cat /proc/sys/kernel/printk //查看修改后的kernle log
0 6 1 7
注意
:只能临时关闭,重启后重置,默认值修改见下文
修改kernel log默认值
以Android 10.0 qcom平台为例,修改如下:
device/qcom/common/rootdir/etc/init.qcom.sh
case "$buildvariant" in
"userdebug" | "eng")
#set default loglevel to KERN_INFO
- echo "6 6 1 7" > /proc/sys/kernel/printk
+ echo "0 6 0 7" > /proc/sys/kernel/printk
;;
*)
#set default loglevel to KERN_WARNING
echo "4 4 1 4" > /proc/sys/kernel/printk
;;
esac
printk文件解读
该文件中4个数字,如“6 6 1 7”,根据日志记录消息的重要性/优先级(数值越小,优先级越高),定义将其发送到何处。
源码定义如下:
kernel/msm-4.14/kernel/printk/printk.c
int console_printk[4] = {
CONSOLE_LOGLEVEL_DEFAULT, /* console_loglevel 控制台日志级别,优先级高于该值的消息将被打印至控制台*/
MESSAGE_LOGLEVEL_DEFAULT, /* default_message_loglevel 默认的消息日志级别,将用该优先级来打印没有优先级的消息*/
CONSOLE_LOGLEVEL_MIN, /* minimum_console_loglevel 最低的控制台日志级别,控制台日志级别可被设置的最小值(最高优先级)*/
CONSOLE_LOGLEVEL_DEFAULT, /* default_console_loglevel 默认的控制台日志级别,控制台日志级别的缺省值*/
};
kernel/msm-4.14/include/linux/kernel_level.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 */