0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

RK平台Android问题排查神器!LOG系统全方位使用指南

jf_44130326 来源:Linux1024 作者:Linux1024 2026-03-06 08:10 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

瑞芯微RK平台Android开发/技术支持的同学,想必都遇见过内核panic、应用Crash、ANR这类头疼的问题,排查的核心难点往往是日志难获取、有效信息少、user版本无日志。而瑞芯微自研的RK Android LOG系统,完美解决了这些痛点——它基于异常触发记录日志,user版本可用,还能自动保存内核和Android层的各类异常信息,是RK平台问题排查的核心工具。

今天这篇文章,我们就把这套LOG系统的使用方法、排查思路、配置技巧讲透,从日志存储、获取到问题定位,一步到位帮你搞定RK平台的Android问题排查!

一、先搞懂:RK LOG系统的核心优势

和传统Android日志系统相比,RK LOG系统专为线上/线下问题排查设计,核心亮点直击开发者痛点,也是我们优先选择它的原因:

1.User版本可用:无需切换到userdebug/eng版本,线上设备也能捕获异常日志,解决线上问题排查无日志的核心难题;

2.异常触发式记录:避免无意义日志刷屏,仅当系统出现异常时才生成日志,有效信息密度高;

3.全链路异常捕获:既支持内核层panic/卡死,也能捕获Android层Crash/ANR/低内存/Watchdog等几乎所有异常;

4.重启后日志不丢失:内核panic重启、Android系统重启后,会自动保存重启前的异常信息,不会因重启丢失关键日志;

5.存储与访问便捷:日志有固定存储路径,还提供软链接快速访问,支持ADB和U盘/SD卡两种获取方式;

6.智能控容+防抖:限制日志总大小,自动删除最早日志;相同异常5分钟内仅记录一次,避免日志爆仓。

二、基础必备:日志的存储路径与获取方式

排查问题的第一步,是找到日志在哪、怎么把日志拿到本地。RK LOG系统的日志存储做了专门的优化,路径清晰、获取方式简单,新手也能快速上手。

2.1日志存储路径(核心)

所有异常日志最终都保存在主路径

/data/user_de/0/com.android.shell/files/bugreports

为了方便开发者访问,系统在根目录创建了软链接,直接访问以下路径即可,无需输入长路径:

/bugreports/

(验证软链接:在设备端执行ls bugreports -l,可看到链接指向主路径)

2.2两种日志获取方式

方式1:ADB命令获取(推荐开发/调试时使用)

设备连接电脑并开启ADB调试后,直接执行拉取命令,将日志文件夹拉到本地指定路径即可:

# 拉取全部日志到本地桌面(示例,可修改本地路径)adbpull /bugreports/ ~/Desktop/RK_LOG/# 仅拉取指定异常日志(如内核panic日志)adbpull /bugreports/2022-09-24-09-58-10-kernel_panic.zip ~/Desktop/

方式2:U盘/SD卡拷贝(适合无电脑连接的线下设备)

无需ADB,直接通过设备自带的文件管理器拷贝,前提是先开启设备的【开发者选项】,具体步骤如下:

1.进入设备「设置」,点击「Storage(存储)」;

2.点击「Go to Files app to manage and free up space」进入Files文件管理器;

3.点击左上角列表图标/从左向右滑动调出列表菜单,找到「Bug reports」选项;

4.进入后可看到所有日志压缩包,直接选择需要的日志,拷贝到U盘/SD卡即可(也可直接删除无用日志)。

2.3关键:日志文件的命名规则

RK LOG系统的日志均为日期开头的zip压缩包,文件名直接包含时间+异常类型,能让我们快速定位「最新日志」和「问题类型」,核心命名规则如下:

1.时间前缀:YYYY-MM-DD-HH-MM-SS,精确到秒,按时间排序即可找到最新异常;

2.固定标识

3.SYSTEM_BOOT:设备开机时生成的日志,此文件之后的日志均为本次开机后产生的,是排查开机后问题的时间锚点;

4.SYSTEM_RESTART:Android系统重启时生成的日志,看到此文件说明设备发生过系统重启;

5.异常类型标识:如kernel_panic/TOMBSTONE/system_app_crash等,直接对应具体异常(后续会详细讲解)。

示例

2023-03-14-10-04-27-SYSTEM_BOOT.zip→ 2023-03-14 1027的开机日志

2022-09-24-09-58-10-kernel_panic.zip→ 2022-09-24 0910的内核panic异常日志

2023-03-14-10-04-39-system_app_crash.zip→ 2023-03-14 1039的系统应用崩溃日志

三、核心排查思路:按日志类型定位问题根源

RK LOG系统将异常分为内核层Android层两大类,不同类型的异常对应不同的日志文件,我们只需根据文件名的异常标识,就能快速定位问题根源,无需在海量日志中筛选。

3.1内核层问题排查:关注kernel_panic.zip

内核层问题主要为内核panic内核卡死,是底层硬件/内核驱动的核心问题,排查重点如下:

1.内核panic重启:系统会生成kernel_panic.zip,压缩包内包含panic的具体内核日志,直接解析即可定位panic原因(如段错误segment fault);

2.内核卡死(无重启):默认情况下,仅segment fault会触发kernel panic,而hard lock/soft lock/rcu stall等情况会导致内核卡死但不重启,此时无默认日志,需按以下方式处理:

3.若能接串口:在串口使用fiq工具抓取更多内核日志;

4.若无法接串口:开启内核配置,让卡死触发panic并生成日志,需开启的配置如下:

CONFIG_BOOTPARAM_HUNG_TASK_PANIC=yCONFIG_BOOTPARAM_SOFTLOCKUP_PANIC=yCONFIG_BOOTPARAM_HARDLOCKUP_PANIC=yCONFIG_BOOTPARAM_RCU_STALL_PANIC=y

5.版本注意事项:瑞芯微SDK/补丁仅在user版本默认开启上述配置,若在userdebug版本使用,需手动在arch/arm64/configs/rockchip_defconfig文件中添加上述配置。

3.2 Android层问题排查:按标识匹配异常类型

Android层异常覆盖系统服务、系统App、用户App、框架层,共10余种核心异常,每种异常都有专属的日志标识,TOMBSTONE默认强制触发日志(除非配置为0),其他异常可通过配置筛选。

以下是Android层核心异常标识与问题对应表,建议收藏备用:

日志标识 对应具体问题 问题层级
TOMBSTONE Native层代码Crash 框架/应用底层
system_server_crash Android系统服务崩溃 系统核心服务
system_server_anr Android系统服务ANR 系统核心服务
system_server_lowmem 系统服务触发低内存异常 系统资源
system_server_watchdog 系统服务出现Watchdog看门狗异常 系统核心服务
system_server_wtf Android框架层严重错误(WTF) 系统框架
SYSTEM_RESTART Android系统重启 整体系统
system_app_crash 系统自带App崩溃(Force Close) 系统应用
system_app_anr 系统自带App出现ANR 系统应用
system_app_wtf 系统自带App触发框架严重错误 系统应用
data_app_crash 用户安装的第三方App崩溃 第三方应用
data_app_anr 用户安装的第三方App出现ANR 第三方应用
data_app_wtf 用户安装的第三方App触发框架错误 第三方应用

排查技巧:先看日志的SYSTEM_BOOT时间,确定本次开机范围,再从最新日志的标识判断问题类型——比如看到data_app_anr,直接定位到用户第三方App的ANR问题,无需排查系统层。

四、灵活配置:根据需求调整日志抓取规则

RK LOG系统提供了异常抓取级别日志最大容量两大核心配置,开发者可根据排查需求(如仅抓内核问题、限制日志大小)灵活修改,适配不同的使用场景。

4.1配置1:异常抓取级别(persist.sys.rklog.level)

通过系统属性persist.sys.rklog.level可配置需要捕获的Android层异常范围,内核panic日志不受此配置影响(除非配置为0),核心规则:

默认值:7,覆盖大部分核心异常,满足日常排查需求;

配置为0:不抓取任何Android层异常,仅捕获内核panic日志,适合仅排查内核问题的场景;

数值含义:数值为N时,会捕获枚举中1~N的所有异常,TOMBSTONE默认触发(除非配置0)。

异常枚举定义(关键)

enum{DROPBOX_SYSTEM_SERVER_CRASH =1, // 系统服务CrashDROPBOX_SYSTEM_SERVER_ANR =2,  // 系统服务ANRDROPBOX_SYSTEM_SERVER_LOWMEM =3,// 系统服务低内存DROPBOX_SYSTEM_SERVER_WATCHDOG =4,// 系统服务WatchdogDROPBOX_SYSTEM_RESTART =5,   // 系统重启DROPBOX_SYSTEM_APP_CRASH =6,  // 系统App CrashDROPBOX_SYSTEM_APP_ANR =7,   // 系统App ANRDROPBOX_SYSTEM_SERVER_WTF =8,  // 系统服务WTFDROPBOX_SYSTEM_APP_WTF =9,   // 系统App WTFDROPBOX_DATA_APP_ANR =10,    // 用户App ANRDROPBOX_DATA_APP_CRASH =11,   // 用户App CrashDROPBOX_DATA_APP_WTF =12,    // 用户App WTF};

配置方法(ADB临时配置,重启后失效;若需永久配置,需修改系统属性默认文件):

# 配置为12,捕获所有Android层异常(适合全面排查)adbshell setprop persist.sys.rklog.level12# 配置为0,仅抓内核panicadbshell setprop persist.sys.rklog.level0

4.2配置2:日志最大容量(dumpstate.max_log_size)

RK LOG系统默认限制日志总大小为300M,避免日志占满设备存储,可通过该属性调整容量,核心规则:

1.单位:MB,配置值为N则日志总大小限制为N M;

2.触发机制:日志总大小超过限制时,自动删除最早生成的日志,保证新日志能正常生成;

3.核心说明(回应核心疑问):①原文确实未提及getprop dumpstate.max_log_size相关配置,补充该命令是因为:原文仅讲配置方法,未提供「验证配置是否生效」的实操手段,而getprop是Android系统通用的属性查询命令,能快速确认配置是否落地,完善配置全流程(修改→生效→验证),适配开发者实际调试场景;②该配置虽在dumpstate.cpp中通过代码实现,但支持动态修改(临时生效),核心逻辑的结合你找到的代码分析如下:

代码核心行:long long int max_log_size = (long long int)android::GetIntProperty("dumpstate.max_log_size", 300);
逻辑拆解:函数GetIntProperty的优先级是「动态系统属性>代码默认值」——先读取系统中dumpstate.max_log_size的动态属性值(若用setprop设置过),若未设置,则使用代码中定义的默认值300;因此,动态修改(setprop)是临时生效(重启后动态属性消失,恢复代码默认值),永久修改需修改代码默认值并编译生效。

1.临时配置(ADB动态修改,重启失效)

适合调试阶段快速调整,无需编译源码,直接通过setprop动态修改,验证效果:

# 设置日志最大容量为200M(数值可自定义)adbshell setprop dumpstate.max_log_size200# 立即查询动态修改后的数值(验证动态修改是否生效)adbshell getprop dumpstate.max_log_size

注意:动态修改仅在本次开机有效,重启设备后,动态属性消失,恢复为dumpstate.cpp中定义的代码默认值。

2.永久配置(适配RK3576 Android 15,源码层修改)

适合正式版本固化配置,需修改代码默认值并编译,步骤如下:

步骤1:打开源码文件

vim~/teamstore/xiesc/RK72/rk3576_android15/frameworks/native/cmds/dumpstate/dumpstate.cpp

步骤2:修改代码默认值

找到你通过grep定位到的核心代码行(默认值为300):

// 修改前longlongintmax_log_size = (longlongint)android::GetIntProperty("dumpstate.max_log_size",300);// 修改后(以200M为例,可自定义数值)longlongintmax_log_size = (longlongint)android::GetIntProperty("dumpstate.max_log_size",200);

保存并退出(Esc→:wq)。

步骤3:编译dumpstate模块

在源码根目录执行编译命令(Android 15推荐用mm替代旧版mmm):

# 进入源码根目录cd~/teamstore/xiesc/RK72/rk3576_android15/# 单独编译dumpstate模块(仅编译修改的文件,速度快)mm frameworks/native/cmds/dumpstate/

步骤4:让配置生效(两种方式任选)

调试场景(无需全量刷镜像)

正式发布场景(全量编译镜像)

3.配置生效验证(核心:getprop命令的作用)

无论临时动态修改,还是永久源码修改,均需通过getprop命令验证,确保配置落地:

adb root# Android 15需先关闭分区验证才能重挂载adb shell disable-verityadb rebootadb rootadb remount# 推送编译后的文件到设备adb push out/target/product/<你的板型名称>/system/bin/dumpstate /system/bin/# 修改权限并重启服务adb shellchmod755 /system/bin/dumpstateadb shell stop dumpstate && adb shell start dumpstate

4.3特殊机制:5分钟异常防抖

为避免相同异常短时间反复触发导致日志爆仓(如同一处system_server_wtf反复报错),RK LOG系统做了防抖处理:

本次开机内,相同原因的异常5分钟内仅生成一次日志

注意:并非系统未捕获异常,而是防抖机制限制,5分钟后若异常再次触发,会生成新的日志。

wKgZO2mqHIaAVQbTAAKhPtXT5KE252.png

五、排查实战小技巧(效率翻倍)

1.快速找最新日志:设备端执行ls -l /bugreports/,日志会按时间倒序排列,最后一行即为最新异常日志;

2.按异常类型筛选:使用ls /bugreports/ | grep 异常标识快速筛选,如ls /bugreports/ | grep crash筛选所有Crash日志;

3.线上设备排查:优先用「U盘/SD卡拷贝」方式获取日志,无需开启ADB,避免线上设备调试风险;

4.内核问题优先串口:若能接设备串口,内核卡死时优先用fiq工具抓取日志,比开启配置更高效;

5.日志及时备份:异常日志为zip压缩包,拉取到本地后建议按「设备号+时间+异常类型」重命名,方便后续归档和分析;

6.多设备批量排查:通过ADB批量命令拉取多台设备的/bugreports/日志,统一分析异常规律;

7.Android 15权限适配:修改/system/bin/下文件时,需先执行adb shell disable-verity关闭分区验证,否则remount会失败。

六、总结

RK Android LOG系统是瑞芯微为RK平台量身打造的问题排查核心工具,其「user版本可用、异常触发、全链路捕获」的特性,完美解决了Android开发中日志难获取、有效信息少的痛点。

针对RK3576 Android 15版本,结合代码实现和实际调试场景,掌握这套工具的核心要点:

1.记路径:日志核心路径/bugreports/(软链接),无需记忆长路径;

2.识命名:通过日志文件名的「时间+异常标识」快速定位问题类型;

3.调配置:异常抓取级别改persist.sys.rklog.level;日志最大容量支持「临时动态修改(setprop,重启失效)」和「永久源码修改(改dumpstate.cpp默认值,编译生效)」,两者优先级:动态属性>代码默认值;

希望这篇适配RK3576 Android 15的指南能帮你搞定RK平台的日志排查,让问题定位更高效!

审核编辑 黄宇

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • Android
    +关注

    关注

    12

    文章

    4035

    浏览量

    134494
  • Log
    Log
    +关注

    关注

    0

    文章

    17

    浏览量

    11740
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    瑞芯微RK平台Android音频 EQ/DRC调试全攻略

    ,支持全局流绑定和动态应用两种模式,配合官方调试工具可快速实现个性化音效调校。 本文基于瑞芯微官方《 Android EQ/DRC 开发指南 V1.1.0 》,结合实际开发经验,从 编译集成、音效启用、状态验证、参数调试 四个维度,手把手教你完成
    的头像 发表于 04-12 10:23 9488次阅读
    瑞芯微<b class='flag-5'>RK</b><b class='flag-5'>平台</b><b class='flag-5'>Android</b>音频 EQ/DRC调试全攻略

    Xilinx器件封装全方位指南:设计与应用要点解析

    Xilinx器件封装全方位指南:设计与应用要点解析 在电子设计领域,器件封装犹如电子设备的“外衣”,不仅影响着器件的性能,还对整个系统的稳定性和可靠性起着关键作用。Xilinx作为FPGA领域的领军
    的头像 发表于 03-27 11:00 181次阅读

    一文吃透RK平台OTA升级开发:从逻辑到调试的完整指南

    ,能让开发者高效解决固件更新、功能迭代等问题。本文将从升级逻辑、核心技巧、调试要点到问题排查全方位拆解 RK 平台 OTA 升级开发,附关键流程图示,助力开发者快速上手。
    的头像 发表于 02-09 16:26 730次阅读
    一文吃透<b class='flag-5'>RK</b><b class='flag-5'>平台</b>OTA升级开发:从逻辑到调试的完整<b class='flag-5'>指南</b>

    RK平台Android设备OTA升级教程:从原理到U盘实操

    OTA(Over-The-Air)升级是 Android 系统标准的软件更新方式,在 RK(瑞芯微)平台上,OTA 升级不仅支持本地升级(如 U 盘、SD 卡),还支持网络升级,同时提
    的头像 发表于 02-09 16:23 2238次阅读
    <b class='flag-5'>RK</b><b class='flag-5'>平台</b><b class='flag-5'>Android</b>设备OTA升级教程:从原理到U盘实操

    RK3576平台Android HAL层故障排查:从lshal命令看透问题本质

    RK3576 作为瑞芯微主流的中高端芯片,其 HAL 层基于 HIDL ( Android 硬件接口定义语言)实现,排查这类问题的核心工具就是 lshal —— 一个能直接暴露 HIDL 服务运行状态的命令
    的头像 发表于 02-06 07:12 599次阅读
    <b class='flag-5'>RK</b>3576<b class='flag-5'>平台</b><b class='flag-5'>Android</b> HAL层故障<b class='flag-5'>排查</b>:从lshal命令看透问题本质

    利用Last Log(Ramoops)排查系统问题:配置与实践指南

    在嵌入式系统(如基于瑞芯微 RK3399 的 Android 设备)开发或维护中,系统常因内核崩溃(Panic)、用户空间异常等突发情况重启,导致关键日志丢失。此时,Last
    的头像 发表于 02-05 13:54 487次阅读
    利用Last <b class='flag-5'>Log</b>(Ramoops)<b class='flag-5'>排查</b><b class='flag-5'>系统</b>问题:配置与实践<b class='flag-5'>指南</b>

    RK3568 Android11编译环境搭建及报错解决指南

    在嵌入式开发领域,RK3568 芯片凭借其出色的性能被广泛应用。基于 RK3568 进行 Android11 系统的开发,首先要搭建好编译环境。本文将详细介绍在 Ubuntu20.04
    的头像 发表于 02-04 17:37 2102次阅读
    <b class='flag-5'>RK</b>3568 <b class='flag-5'>Android</b>11编译环境搭建及报错解决<b class='flag-5'>指南</b>

    RK3399 Android12自动调节屏幕亮度问题排查与解决

    在嵌入式设备开发中,屏幕自动亮度调节功能直接影响用户体验与功耗控制。近期在 RK3399 芯片 + Android12 系统的设备上,遇到了自动亮度调节的异常问题 —— 系统自动调节时
    的头像 发表于 02-04 17:36 1800次阅读
    <b class='flag-5'>RK</b>3399 <b class='flag-5'>Android</b>12自动调节屏幕亮度问题<b class='flag-5'>排查</b>与解决

    RK平台网络问题排查指南:从初始化到吞吐量,一文搞定常见故障

    在嵌入式开发中,RK(瑞芯微)平台凭借高性能、高兼容性广泛应用于物联网、工业控制等场景,而以太网作为核心通信接口,其稳定性直接决定了设备的可用性。但实际开发中,我们常会遇到初始化失败、网络不通、丢包等问题,排查起来耗时费力。
    的头像 发表于 02-02 17:22 4194次阅读
    <b class='flag-5'>RK</b><b class='flag-5'>平台</b>网络问题<b class='flag-5'>排查</b><b class='flag-5'>指南</b>:从初始化到吞吐量,一文搞定常见故障

    RK 平台 SPI 开发完全指南(驱动 + 配置 + 测试 + 优化)

    全方位拆解 RK 平台 SPI 开发流程。 一、 RK 平台 SPI 核心特性速览     1.  基础支持能力     • 协议
    的头像 发表于 01-30 22:35 1176次阅读
    <b class='flag-5'>RK</b> <b class='flag-5'>平台</b> SPI 开发完全<b class='flag-5'>指南</b>(驱动 + 配置 + 测试 + 优化)

    RK平台固件升级失败?排查流程图+脑图+实操指南,一步搞定!

          在固件升级过程中, 设备频繁报错、升级中断是工程师和工厂常遇的难题。为了让问题排查更高效,我们整理了这份 “ 流程图 + 脑图 + 实操 ” 的完整指南,覆盖所有常见故障场景,无需复杂
    的头像 发表于 01-30 22:34 1065次阅读
    <b class='flag-5'>RK</b><b class='flag-5'>平台</b>固件升级失败?<b class='flag-5'>排查</b>流程图+脑图+实操<b class='flag-5'>指南</b>,一步搞定!

    硬核进阶:RK3576 Android15 驱动与系统开发实战指南

    RK3576 探索之旅】系列文章导航及功能全景介绍(基于android14) 之前有出过系列的文章,但这是自己公司定制项目,暂时没有相关硬件,有需求可以私信我,这个系列主要还是驱动的开发,接下来
    的头像 发表于 01-26 22:29 819次阅读
    硬核进阶:<b class='flag-5'>RK</b>3576 <b class='flag-5'>Android</b>15 驱动与<b class='flag-5'>系统</b>开发实战<b class='flag-5'>指南</b>

    RK 平台升级开发:全场景方案与实践指南,覆盖常规系统和ab系统

    用户体验的核心模块,其开发质量直接影响产品的市场竞争力。本文基于 Rockchip Linux updateEngine 升级方案官方文档,系统梳理 RK 平台升级开发的核心技术方案、实现流程及关键
    的头像 发表于 01-13 15:35 1461次阅读
    <b class='flag-5'>RK</b> <b class='flag-5'>平台</b>升级开发:全场景方案与实践<b class='flag-5'>指南</b>,覆盖常规<b class='flag-5'>系统</b>和ab<b class='flag-5'>系统</b>

    迅为RK3588开发板Android系统烧写及注意事项

    迅为RK3588开发板Android系统烧写及注意事项
    的头像 发表于 12-03 15:17 7394次阅读
    迅为<b class='flag-5'>RK</b>3588开发板<b class='flag-5'>Android</b><b class='flag-5'>系统</b>烧写及注意事项

    Quartus工具使用指南

    电子发烧友网站提供《Quartus工具使用指南.pdf》资料免费下载
    发表于 07-15 16:34 1次下载