4.6.2. mem-dump 功能指导
4.6.2.1. 概述
简介
Mem-dump,即
mem-dump 信息
用户空间信息
进程
内存 信息 程序代码
和 数据:当前 运行 程序 的 代码段、数据 段(例如 全局变量 和 静态 变量),堆栈、堆 内存 的 内容 等。 堆栈(Stack):堆栈
中 保存 了 当前 线程 的 调用 信息、局部变量、返回 地址 等。特别 是 在 程序 崩溃 时,堆栈 信息 对于 定位 崩溃点 至关重要。 程序
计数器(Program Counter,PC):指示 当前 执行 指令 的 地址,这 有助于 分析程序 崩溃 时 到底 执行 到 了 哪 一行 代码。
线程
信息 线程
的 堆栈 信息:每个 线程 都 有 一个 独立 的 堆栈,内存 转储 通常 会 记录 每个 线程 的 堆栈 信息。线程 堆栈 帮助 调试器 了解 线程 执行 的 调用 链。 线程
状态:线程 的 运行 状态,如 运行、等待、阻塞 等 状态,以及 是否 发生 了 死锁 等 信息。
寄存器
信息 CPU 寄存器
保存 了 程序执行 的 状态 信息,例如 寄存器 中 的 程序 计数器(PC)、栈 指针(SP)、基 指针(BP)、通用寄存器 等。
内存
映射 进程
的 内存 映射:包括 代码段、数据 段、堆、共享 库、栈 等 的 内存 区域。有助于 分析 进程 内存 的 分布 情况。
内核信息
内核
堆栈(Kernel Stack) 内核
堆栈 保存 了 内核 函数 的 调用 链,通常 是 操作系统 内核 或 驱动程序 在 崩溃 时 的 执行 状态。
内核模块
和 驱动 信息 内存
转储 会 记录 加载 的 内核模块 和 驱动程序 的 状态。有助于 确定 系统 崩溃 是否 由 某个 特定 的 模块 或 驱动程序 引起。 加载
的 模块:包括 设备 驱动、系统 服务 等 模块,它们 的 内存地址、大小、状态 等。
内核
数据结构 内存
转储 可能 还会 包含 一些 重要 的 内核 数据结构,如 调度 队列、进程 调度 信息、锁 状态、文件系统 状态 等。
内核
日志 和 状态 信息 内核
会 记录 有关 硬件、驱动、文件系统 等 的 状态 信息。
崩溃时上下文
崩溃
时 的 调用 堆栈(Backtrace) 调用
堆栈(stack trace)是 最 重要 的 崩溃 分析 信息 之一,它 提供 了 从 崩溃点 到 函数调用 的 完整 路径。
崩溃
的 堆栈 回溯(Stack Trace) 堆栈
回溯 显示 了 程序 崩溃 时,所有 活动 线程 的 调用 堆栈 信息。
内存
分配 信息 一些
内存 转储 工具 可以 记录 内存 分配 的 历史,如 内存 泄漏、过度 分配 等。
4.6.2.2. X5 mem-dump 功能介绍
功能特点
在
功能原理
mem-dump 是
目前 X5 使用
| 地址 | 寄存器 | 说明 |
|---|---|---|
| 0x31021000 | aon_status | aon_status 基 |
| 0x31021004 | panic-action | panic-action配置 |
目前
| Boot Index | 类型 | 说明 | 备注 |
|---|---|---|---|
| 0 | normal | 正常 |
默认 |
| 1 | ubootonce | uboot 内 |
当 |
4.6.2.3. mem-dump 配置
Kernel 提供/sys/kernel/hobot-swinfo/panic_action
获取 panic-action
查看
cat /sys/kernel/hobot-swinfo/panic_action
0: normal
配置 panic-action
配置 panic-action 状态
echo 1 > /sys/kernel/hobot-swinfo/panic_action
4.6.2.4. mem-dump 使用方法
配置 panic-action
针对
配置 panic-action 为 ubootonce。
echo 1 > /sys/kernel/hobot-swinfo/panic_action
配置
mem-dump 到 emmc 操作
在 uboot 下
memdump userdata
mem-dump 执行/userdata 目录
cpu-contexts.bin: cpu 寄存器
的 信息 DDRCS0-0.bin:2G 以下
的 内存 文件 DDRCS1-0.bin: 2G 以上
的 内存 文件,如果 使用 的 内存 大于 2G,会 存在 该 文件
执行 mem-dump 内存
4.6.2.5. mem-dump 分析方法
mem-dump 使用 crash 工具software_tools\crash_tool 进行
├── arm64-regs.so // arm64 寄存器扩展文件
├── crash // 调试工具
└── parse-cpu-contexts.py // python 脚本用于解析 CPU 寄存器信息
使用
解析 cpu 的
寄存器 信息
python3 parse-cpu-contexts.py cpu-contexts.bin >./coreregs.txt
使用 crash 工具
进入 crash 现场
./crash vmlinux文件 ./DDRCS0-0.bin@0x84000000,./DDRCS1-0.bin@0x100000000 --machdep vabits_actual=48
注意: vmlinux 文件out/build/kernel/vmlinux 获取
添加
扩展 文件
crash> extend arm64-regs.so
./arm64-regs.so: shared object loaded
添加 cpu 寄存器
信息
crash> arm64_core_set -l coreregs.txt
loading cpu core regs from coreregs.txt
loading cpu core regs from coreregs.txt done
系统
调试
例如:打印
crash> bt
PID: 957 TASK: ffff0000c6be9c80 CPU: 2 COMMAND: "bash"
#0 [ffff80000d75bab0] __arm_smccc_smc at ffff800008026e8c
#1 [ffff80000d75bad0] __invoke_psci_fn_smc at ffff8000087a0f14
#2 [ffff80000d75bb10] psci_sys_reset at ffff8000087a1338
#3 [ffff80000d75bb20] atomic_notifier_call_chain at ffff800008068d10
#4 [ffff80000d75bb60] do_kernel_restart at ffff80000806b2a0
#5 [ffff80000d75bb70] machine_restart at ffff8000080188f8
PID: 957 TASK: ffff0000c6be9c80 CPU: 2 COMMAND: "bash"
#0 [ffff80000d75bab0] __arm_smccc_smc at ffff800008026e8c
#1 [ffff80000d75bad0] __invoke_psci_fn_smc at ffff8000087a0f14
#2 [ffff80000d75bb10] psci_sys_reset at ffff8000087a1338
#3 [ffff80000d75bb20] atomic_notifier_call_chain at ffff800008068d10
#4 [ffff80000d75bb60] do_kernel_restart at ffff80000806b2a0
#5 [ffff80000d75bb70] machine_restart at ffff8000080188f8
#6 [ffff80000d75bb90] emergency_restart at ffff80000806a6d4
#7 [ffff80000d75bba0] panic at ffff800008a9d6ac
#8 [ffff80000d75bc80] sysrq_handle_crash at ffff8000084fdf98
#9 [ffff80000d75bc90] __handle_sysrq at ffff8000084fe7e8
#10 [ffff80000d75bce0] write_sysrq_trigger at ffff8000084fee60
#11 [ffff80000d75bd00] proc_reg_write at ffff80000824de70
#12 [ffff80000d75bd20] vfs_write at ffff8000081d0eb0
#13 [ffff80000d75bdc0] ksys_write at ffff8000081d1264
#14 [ffff80000d75be00] __arm64_sys_write at ffff8000081d130c
#15 [ffff80000d75be10] invoke_syscall at ffff800008027014
#16 [ffff80000d75be40] el0_svc_common.constprop.0 at ffff800008027124
#17 [ffff80000d75be70] do_el0_svc at ffff80000802720c
#18 [ffff80000d75be80] el0_svc at ffff800008ab21d8
#19 [ffff80000d75bea0] el0t_64_sync_handler at ffff800008ab25a8
#20 [ffff80000d75bfe0] el0t_64_sync at ffff800008011544
4.6.2.6. 常见问题
发生 crash 前未配置 panic-action
如果memdump userdata 将
配置 panic-action 是否影响 reboot 或冷启动
对于