Android系统设置kernel log level的方法

  Android log相关文档索引:

使用ADB命令控制logcat日志本地存储功能-CSDN博客

Android系统通过属性设置来控制log输出的方案-CSDN博客

Android系统设置kernel log level的方法-CSDN博客

Android系统设置kernel log level的方法

背景

kernel log内容过多/过少会影响分析问题,各种系统的版本对kernel log的等级要求也不一样,因此需要对kernel log进行设置

使用平台

高通8775+Android 14

修改方案

1、动态修改kernel log level

适用场景:因为设备重启后重置,因此只适用于临时调试

修改步骤

查看当前log等级,进入adb shell

$ cat /proc/sys/kernel/printk 4 6 1 7

修改log等级-->关闭所有kernel log,进入adb shell

echo 0 6 1 7 > proc/sys/kernel/printk //往printk文件写入“0 6 1 7”,关闭所有kernel log

说明:只需修改第一个数即可,数值越小,优先级越高。

修改完查看

$ cat /proc/sys/kernel/printk      //查看修改后的kernle log
0       6       1       7

2、修改默认log等级

使用场景:适用于确认问题之后,明确什么等级适用当前系统

修改默认log等级,需修改相应的文件配置信息;这里使用最简单明了的方案,只从使用的角度来看这个问题,不去管它的原理;

查看平台默认kernel loglevel
$ cat /proc/sys/kernel/printk
4       6       1       7

kernle log级别为4 6 1 7

修改kernel log默认值

以高通8775 Android 14平台为例,修改如下: device/qcom/common/rootdir/etc/init.qcom.sh

case "$buildvariant" in
    "userdebug" | "eng")
        #set default loglevel to KERN_INFO
-       echo "4 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

修改完,重新编译即可

Kernel log level基础常识

确定了两种有效方案后,回头再了解一下内核日志的其他设置和参看方法,以及常识性问题。在Android设备中,内核日志(Kernel Log)对于调试和排查问题非常有用。以下是设置和查看Android内核日志的几种方法和步骤,包括如何通过命令行工具进行配置和查看。

printk文件解读

先了解下kernel log level是如何定义的,这部分内容在printk.c文件和kernel_level.h中。

该文件中4个数字,如“4 6 1 7”,根据日志记录消息的重要性/优先级(数值越小,优先级越高),定义将其发送到何处。 源码定义如下: /kernel_platform/msm-kernel/kernel/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 默认的控制台日志级别,控制台日志级别的缺省值*/
};
EXPORT_SYMBOL_GPL(console_printk);

也可在Google源码的kernel分支上进行查看

log等级的定义的源码在/kernel_platform/msm-kernel/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 */

#define KERN_DEFAULT        ""                /* the default kernel loglevel */

这里定义了8个level的优先级,其中0的优先级最高,7的优先级最低,具体等级说明如下:

宏定义级别描述
KERN_EMERG0紧急信息,此信息会引起系统崩溃
KERN_ALERT1提示要马上采取某些行动
KERN_CRIT2关键信息,通常有严重的软件或者硬件问题发生了
KERN_ERR3通常用来报告错误,例如设备驱动通常会用来报告硬件操作失败等
KERN_WARNING4警告信息,用来警告那些并不会造成严重的系统异常的问题
KERN_NOTICE5用于正常但是值得注意的情况,比如大量安全相关的log
KERN_INFO6信息,许多驱动程序都会在硬件启动的时候使用这个级别打印Log
KERN_DEBUG7用于调试信息的打印

如果KERN_DEFAULT = 4,那么printk默认的loglevel=4,那么0,1,2,3等级的log可以在控制台直接显示,4或4后面的log无法在控制台直接显示。

但是可以通过cat /proc/kmsg或dmesg的方式查看输出内容。

其他设置及查看方法

1. 查看内核日志

要查看Android设备上的内核日志,可以在adb shell中使用以下命令:

dmesg

这个命令会输出内核日志消息。如果需要查看实时日志,可以使用:

dmesg -w

2. 调整内核日志级别

内核日志级别决定了哪些类型的内核消息会被记录。可以通过以下命令查看当前的日志级别:

cat /proc/sys/kernel/printk

输出四个数字,分别表示不同的日志级别:

<console_level> <default_level> <minimum_console_level> <default_console_level>

例如,4 4 1 7 表示:

  • console_level: 4(错误及更严重的消息会输出到控制台)

  • default_level: 4(错误及更严重的消息会记录到环形缓冲区)

  • minimum_console_level: 1(最低记录到控制台的日志级别)

  • default_console_level: 7(日志的默认级别)

要调整日志级别,可以使用以下命令:

echo <new_console_level> > /proc/sys/kernel/printk

例如,要设置日志级别为 3

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

3. 配置内核日志

在构建自定义Android内核时,可以配置内核日志的详细程度:

  • CONFIG_PRINTK: 确保内核配置中启用了printk功能。

  • CONFIG_LOGLEVEL: 配置默认的内核日志级别,调整内核编译配置以设置这个值。通常在Kernel .config文件中可以设置。

例如:

CONFIG_PRINTK=y
CONFIG_LOGLEVEL=4

4. 使用logcat查看日志

logcat是Android的日志工具,但它默认查看的是用户空间的日志。如果你想要查看内核相关的日志,你应该使用dmesg

如果你需要在logcat中查看来自内核的日志(通常这些信息会以kernel标签显示),可以使用以下命令:

logcat -b kernel

5. 配置内核日志到文件

可以将dmesg的输出重定向到文件中以便于后续查看:

dmesg > /path/to/kernel_log.txt

6. 设置内核日志参数

在内核启动时,可以通过引导参数来设置日志级别:

console=ttyS0,115200n8 printk.devkmsg=on

在设备的/proc/cmdline文件中添加引导参数:

cat /proc/cmdline

在引导引导参数中添加loglevel=4可以设置日志级别为4

console=ttyS0,115200n8 loglevel=4

7. 通过/sys目录查看内核日志

也可以在/sys目录中查找内核日志相关的信息:

cat /sys/kernel/debug/dmesg

8. 设置logcat过滤器

有时logcat也可以通过设置过滤器来帮助调试内核相关的问题:

logcat -b kernel -v time

示例:设置内核日志级别和查看

# 查看当前内核日志级别
cat /proc/sys/kernel/printk

# 设置日志级别
echo "7 7 1 7" > /proc/sys/kernel/printk

# 实时查看内核日志
dmesg -w

# 将内核日志保存到文件
dmesg > /sdcard/kernel_log.txt

参考链接

  • Android内核调试文档

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/792594.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

oak相机使用oak官网方式标定

目录 一、depthai ROS驱动 一、depthai ROS驱动 &#xff08;1&#xff09;驱动下载地址&#xff1a;2. C 开发快速上手 — DepthAI Docs 0.3.0.0 documentation sudo apt install ./depthai_2.17.1_arm64.deb //运行 Python3 utilities/cam_test.py -mres 400 -cams rgb,m …

Wireshark 对 https 请求抓包并展示为明文

文章目录 1、目标2、环境准备3、Wireshark 基本使用4、操作步骤4.1、彻底关闭 Chrome 进程4.2、配置 SSLKEYLOGFILE [核心步骤]4.3、把文件路径配置到 Wireshark 指定位置4.4、在浏览器发起请求4.5、抓包配置4.6、过滤4.6.1、过滤域名 http.host contains "baidu.com4.6.2…

AIGC时代创意设计师从“创作”向“智作”升级

随着人工智能技术的飞速发展&#xff0c;AIGC&#xff08;AI Generated Content&#xff0c;即人工智能生成内容&#xff09;时代已经到来&#xff0c;为创意设计领域带来了前所未有的变革。在这一时代背景下&#xff0c;创意设计师们正经历着从传统的“创作”向“智作”的转型…

FreeRTOS 队列

队列是一种任务到任务、任务到中断、中断到任务数据交流的一种机制。在队列中可以存 储数量有限、大小固定的多个数据&#xff0c;队列中的每一个数据叫做队列项目&#xff0c;队列能够存储队列项 目的最大数量称为队列的长度&#xff0c;在创建队列的时候&#xff0c;就需要指…

html5——CSS基础选择器

目录 标签选择器 类选择器 id选择器 三种选择器优先级 标签指定式选择器 包含选择器 群组选择器 通配符选择器 Emmet语法&#xff08;扩展补充&#xff09; 标签选择器 HTML标签作为标签选择器的名称&#xff1a; <h1>…<h6>、<p>、<img/> 语…

在pycharm中使用jupyter

在pycharm中使用jupyter 前置条件&#xff1a;你的环境中应该有juptyer &#xff0c;没有的话 pip install jupyter 点击项目目录&#xff0c;右键->new->jupyter notebook 打开file settings 找到 jupyter server &#xff08;按照默认的用代理服务器就行&#xff09; P…

ollama + lobechat 搭建自己的多模型助手

背景 人工智能已经推出了快2年了&#xff0c;各种模型和插件&#xff0c;有渐渐变成熟的趋势&#xff0c;打造一个类似 hao123网站的人工智能模型入口&#xff0c;也变得有需求了。用户会去比较多个ai给出的答案&#xff0c;作为程序员想拥有一台自己的GPU服务器来为自己服务。…

react启用mobx @decorators装饰器语法

react如果没有经过配置&#xff0c;直接使用decorators装饰器语法会报错&#xff1a; Support for the experimental syntax ‘decorators’ isn’t currently enabled 因为react默认是不支持装饰器语法&#xff0c;需要做一些配置来启用装饰器语法。 step1: 在 tsconfig.js…

always块敏感列表的相关报错,

在综合的时候&#xff0c;报错如下 Synthesis synth_1 [Synth 8-91] ambiguous clock in event control ["E:/FPGA/FPGA_project/handwrite_fft/handwrite_fft.srcs/sources_1/new/reg_s2p.v":140] 猜测报错原因&#xff08;暂时没有时间寻找原因&#xff0c;后续在…

【linux】服务器卸载cuda

【linux】服务器卸载cuda 文章目录 【linux】服务器卸载cuda1、查找已安装的 CUDA 包&#xff1a;2、卸载 CUDA&#xff1a;3、删除残留文件4、更新系统的包索引&#xff1a;5、检查是否卸载干净&#xff1a; 1、查找已安装的 CUDA 包&#xff1a; dpkg -l | grep cuda2、卸载…

Unity之OpenXR+XR Interaction Toolkit实现 Gaze眼部追踪

使用 Unity OpenXR 实现Gaze眼部追踪 在虚拟现实(VR)和增强现实(AR)应用中,眼动追踪是一项强大而受欢迎的技术。它可以让开发者更好地理解用户的注意力和行为,并创造出更加沉浸和智能的体验。在本文中,我们将探讨如何使用 Unity OpenXR 实现Gaze眼部追踪功能。 Unity …

IEEE顶刊“放水”?稳居1区Top,发文扩张IF稳长,CCF推荐,审稿友好!

本周投稿推荐 SCI • 能源科学类&#xff0c;1.5-2.0&#xff08;25天来稿即录&#xff09; • CCF推荐&#xff0c;4.5-5.0&#xff08;2天见刊&#xff09; • 生物医学制药类&#xff08;2天逢投必中&#xff09; EI • 各领域沾边均可&#xff08;2天录用&#xff09…

python3读取shp数据

目录 1 介绍 1 介绍 需要tmp.shp文件和tmp.dbf文件&#xff0c;需要安装geopandas第三方库&#xff0c;python3代码如下&#xff0c; import geopandas as gpdshp_file_path "tmp.shp" shp_data gpd.read_file(shp_file_path) for index, row in shp_data.iterro…

【Neo4j】实战 (数据库技术丛书)学习笔记

Neo4j实战 (数据库技术丛书) 第1章演示了应用Neo4j作为图形数据库对改进性能和扩展性的可能性, 也讨论了对图形建模的数据如何正好适应于Neo4j数据模型,现在到了该动 手实践的时间了。第一章 概述 Neo4j将数据作为顶点和边存储(或者用Neo4j术语,节点和关系存 储)。用户被定…

DSC主备归档报错

先看一个报错&#xff1a; 2024-07-10 22:12:21.725 [ERROR] database P0000003511 T0000000000000003696 rafil_list_overlap_consecutive_check failed, rfil(DMDATA/data/DSC02/arch/ARCHIVE_LOCAL1_0x57843343_EP1_2024-07-10_20-44-40.log)->next_seq(2901) > nex…

2.54插座开口朝板内还是板外?

答&#xff1a;开口朝板内。 这样无论是安装立式插座&#xff0c;还是卧式插座&#xff0c;引脚定义都一致。并且从左往右&#xff1a;1,2,3,4

Nordic 蓝牙5产品简介

蓝牙5.0 有四个重要的新功能&#xff1a; 更高的比特率为 2 Mbps。长距离模式在 500 kbps 和 125 kbps 两个新的较低比特率下具有更好的灵敏度。通过广告扩展&#xff0c;广播能力提高了 8 倍。改进的信道选择算法 (CSA #2)&#xff0c;可以提高与其他蓝牙和非蓝牙流量的信道协…

初识C++ | 基本介绍、命名空间、输入输出、缺省函数、函数重载、引用、内联函数、nullptr

基本介绍 C的起源 1979年&#xff0c;当时的 Bjarne Stroustrup 正在⻉尔实验室从事计算机科学和软件⼯程的研究⼯作。⾯对项⽬中复杂的软件开 发任务&#xff0c;特别是模拟和操作系统的开发⼯作&#xff0c;他感受到了现有语⾔&#xff08;如C语⾔&#xff09;在表达能⼒、可…

The First项目报告:创新型金融生态Lista DAO

一、Lista DAO是什么&#xff1f; LISTA是Lista DAO的原生加密协议代币&#xff0c;设计为一种可互操作的实用代币&#xff0c;旨在促进去中心化金融&#xff08;DeFi&#xff09;领域内的支付、治理与激励。LISTA的诞生源于Lista DAO项目&#xff0c;该项目是一个基于BNB链的…

修BUG:程序包javax.servlet.http不存在

貌似昨晚上并没有成功在tomcat上面运行&#xff0c;而是直接运行了网页。 不知道为啥又报错这个。。。 解决方案&#xff1a; https://developer.baidu.com/article/details/2768022 就整了这一步就行了 而且我本地就有这个tomcat就是加进去了。 所以说啊&#xff0c;是不是&a…