Android7.1+msm8937系统/proc/sys/kernel/printk参数介绍及日志打印设置
发布日期:2021-06-30 21:59:12 浏览次数:2 分类:技术文章

本文共 3409 字,大约阅读时间需要 11 分钟。

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设置

 

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

 

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

 

转载地址:https://loongembedded.blog.csdn.net/article/details/80536165 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:msm8937 充电相关
下一篇:高通android新建项目

发表评论

最新留言

表示我来过!
[***.240.166.169]2024年04月08日 21时05分06秒

关于作者

    喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!

推荐文章

一周拿下百度Offer!211本+985硕+计算机专业~ 2019-05-01
闭关三月!猛男逆道而行,四杀斩获阿里 / 腾讯 / 京东 / 百度等大厂 offer 2019-05-01
花了3个达不溜!让隔壁小姐姐从圈内大佬手中拿到“阿里面试官手册”,看完之后我大呼“不亏”! 2019-05-01
上线三天获 22w 浏览量!2021 最新一线大厂 Java 高级架构师面试题总结~ 2019-05-01
电信物联网平台SOTA升级(软件升级)的全流程说明 2019-05-01
电信物联网平台插件开发相关总结 2019-05-01
ARM之一 分散加载文件(scatter)详述 2019-05-01
centos6 python3.6 安装配置jupyer 2019-05-01
CDH5.14 spark2.4.0配置python3 以及读取hive表 2019-05-01
VMware安装centos7.2后配置网络并设置固定ip 2019-05-01
在 centos7.2安装docker 并设置阿里云源 2019-05-01
centos7.2 将mysql添加到服务中 2019-05-01
【nifi数据采集】nifi给kafka打数据遇到的坑 - kafka2.1 的listeners配置 2019-05-01
【linux用户模块】/etc/passwd的字段含义 2019-05-01
【linux用户模块】用户/用户组的管理 2019-05-01
【spark2】【源码学习】【环境编译】在idea导入spark源码,执行example并debug 2019-05-01
【spark2】【源码学习】【分区数】spark读取 本地/可分割/单个 的文件时是如何划分分区 2019-05-01
【大数据】【调度】Airflow 和 Azkaban的选型 2019-05-01
用zabbix监控nginx 2019-05-01
计算机网络 —— 数据链路层 3. 2019-05-01