Android7.1+msm8937系统/proc/sys/kernel/printk参数介绍及日志打印设置

Android7.1+msm8937系统/proc/sys/kernel/printk参数介绍及日志打印设置

 

1.    相关概念

Console,控制台,通常是一个字符模式的终端、一个串口打印机或是一个并口打印机。我们这里是指串口。

 

显示系统消息的终端就叫控制台,Linux 默认所有虚拟终端都是控制台,都能显示系统消息。

/dev/console即控制台,是与操作系统交互的设备,系统将一些信息直接输出到控制台上.

 

2.    /proc/sys/kernel/printk参数的含义

cat /proc/sys/kernel/printk

7 4 1 7

这是当前控制台的打印级别,数值越小,优先级越高,这4个值对应的含义kernel\msm-3.18\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 */

};

打印等级

含义

CONSOLE_LOGLEVEL_DEFAULT

控制台日志级别,如7,优先级高于该值的消息将在控制台显示,那么就是0-6级别的消息才会被输出到控制台。

MESSAGE_LOGLEVEL_DEFAULT

默认的printk消息日志级别,如4,printk没指定日志级别时,默认级别是DEFAULT_MESSAGE_LOGLEVEL(一般为4),由于4优先级高于第17,所以会输出到控制台。

CONSOLE_LOGLEVEL_MIN

最低控制台日志级别,如1

控制台日志级别可被设置的最小值(最高优先级)

CONSOLE_LOGLEVEL_DEFAULT

默认的控制台日志级别,如7,即第1个参数的默认级别

 

如果kernel的打印等级/proc/sys/kernel/printk是默认值7 4 1 7, (四个值的含义:控制台日志级别、默认的消息日志级别、最低的控制台日志级别和默认的控制台日志级别)

内核通过printk() 输出的信息具有日志级别,日志级别是通过在printk() 输出的字符串前加一个带尖括号的整数来控制的,如printk("<6>Hello,world!\n");。内核中共提供了八种不同的日志级别,在 linux/kernel.h 中有相应的宏对应。

Y:\MU980\Code\LA.UM.5.6\LINUX\android\kernel\msm-3.18\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 */

 

printk没有指定日志级别的printk语句默认采用的级别是MESSAGE_LOGLEVEL_DEFAULT(这个默认级别一般为<4>,即与KERN_WARNING在一个级别上),其定义在linux26/kernel/printk.c中可以找到

linux/printk.h:37:#defineMESSAGE_LOGLEVEL_DEFAULT CONFIG_MESSAGE_LOGLEVEL_DEFAULT

3.    编译系统/proc/sys/kernel/printk的值的确定


(1)  device\qcom\common\rootdir\etc\init.qcom.rc-----------193:1

# Set the console loglevel to <KERN_INFO,这里是指第1个6

    #Set the default message loglevel to KERN_INFO,这里指第2个6

write/proc/sys/kernel/printk "6 6 1 7"

service qcom-sh /system/bin/sh/init.qcom.sh

   class late_start

   user root

oneshot

 

service qcom-post-boot /system/bin/sh/system/etc/init.qcom.post_boot.sh

   class late_start

   user root

   disabled

oneshot

 

(2)  device\qcom\common\rootdir\etc\init.qcom.sh---2

#check build variant for printk logging

#current default minimum boot-time-default

buildvariant=`getprop ro.build.type`

case "$buildvariant" in

   "userdebug" | "eng")

       #set default loglevel to KERN_INFO

       echo "6 6 1 7" > /proc/sys/kernel/printk

       ;;

   *)

       #set default loglevel to KERN_WARNING

       echo "4 4 1 4" > /proc/sys/kernel/printk

       ;;

Esac

根据是user、userdebug和eng版本设置不同的默认loglevel。

 

(3)  device\qcom\common\rootdir\etc\init.qcom.post_boot.sh----3

# Change console log level as per consoleconfig property

console_config=`getprop persist.console.silent.config`

case "$console_config" in

   "1")

       echo "Enable console config to $console_config"

       echo 0 > /proc/sys/kernel/printk

       ;;

   *)

       echo "Enable console config to $console_config"

       ;;

Esac

persist.console.silent.config的值是1,

 

可以通过修改这些文件的赋值来决定系统默认的值。

 

4.    设置控制级别的方法

可用下面的命令设置当前日志级别:

echo 8 > /proc/sys/kernel/printk

这样所有级别<8,(0-7)的消息都可以显示在控制台上.

 

其实printk始终是能输出信息的,只不过不一定是到了终端上。我们可以通过dmesg或是kmsg获取。

 

参考链接:

/proc/sys/kernel/printk 打印log设置

https://blog.csdn.net/u012385733/article/details/76088274

 

修改kernel的打印等级的几种方法

https://blog.csdn.net/ysh149216447/article/details/53435864

 

linux内核打印数据到串口控制台,printk数据不打印问题

https://www.cnblogs.com/wmx-learn/p/5344821.html

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

loongembedded

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值