Qualcomm Robotics RB5 平台软件用户指南(17)
6.7 RAM 转储到 SD 卡
-
更新启动代码中的以下命令以生成 SD 卡 RAM 转储。
QcomPkg/SDMPkg/Library/XBLLoaderLib/boot_target.h
define FEATURE_DLOAD_MEM_DEBUG
define FEATURE_BOOT_RAMDUMPS_TO_SD_CARD
define CONVERT_TO_MB_SHIFT 20
define SD_PATH "/mmc1/"
define SD_RAM_DUMP_PATH SD_PATH "ram_dump/"
-
确保执行以下代码。
"./QcomPkg/XBLRamDump/boot_sd_ramdump.c static void boot_ramdump_reset( void ){ … (" <<< rtcookie >>> File exists: %s\n",__func__); … } "./QcomPkg/XBLRamDump/boot_sd_ramdump.c" void boot_ram_dumps_to_sd_card(void) { char mount_path[] = "/mmc1"; /* dummy while loop which executes only once and used to break on error */ (" start: %s \n",__func__); … }
-
将SD卡格式化为Fat32,挂载到SD卡中adb shell,并将 rdcookie.txt和rtcookie.txt文件存储在SD卡中。
cd / mount /dev/mmcblk2p1 /mmc1 cd mmc1 mkdir ram_dump cd ram_dump create rdcookie.txt file cd .. create rdcookie.txt file The root directory of "SD_PATH": ├── ram_dump │ ├── rdcookie.txt ├── rdcookie.txt
-
触发 RAM 转储。显示以下日志。
B - 770247 - DisplayDxeBoot: SW renderer only B - 787327 - DisplayDxe: Resolution 1440x2880 (1 intf) B - 1133075 - Mem dump cmd, entry D - 30 - Mem dump cmd, exit B - 1424990 - Mem dump cmd, entry D - 31 - Mem dump cmd, exit D - 122 - sbl1_load_ddr_training_data B - 1431548 - Pimem status cmd, entry D - 0 - Pimem status cmd, exit B - 1511824 - RAM dump to SD card B - 1514416 - start addr:0x0000000014680000 size:0x0000000000040000 file: /mmc1/ram_dump/1/OCIMEM.BIN B - 1541348 - done B - 1551962 - start addr:0x000000000b000000 size:0x0000000000018000 file: /mmc1/ram_dump/1/CODERAM.BIN B - 1568005 - done B - 1574959 - start addr:0x000000000b0e0000 size:0x0000000000008000 file: /mmc1/ram_dump/1/DATARAM.BIN B - 1588989 - done B - 1595943 - start addr:0x000000000c300000 size:0x0000000000000400 file: /mmc1/ram_dump/1/MSGRAM0.BIN B - 1606130 - done B - 1617262 - start addr:0x000000000c310000 size:0x0000000000000400 file: /mmc1/ram_dump/1/MSGRAM1.BIN B - 1627449 - done ............... ............... ............... B - 266239227 - start addr:0x0000000180000000 size:0x0000000080000000 file: /mmc1/ram_dump/1/DDRCS1_0.BIN B - 397716584 - done B - 397725093 - start addr:0x0000000200000000 size:0x0000000080000000 file: /mmc1/ram_dump/1/DDRCS1_1.BIN B - 529298403 - done B - 529310633 - start addr:0x00000000807bb9a8 size:0x0000000000000cf4 file: /mmc1/ram_dump/1/load.cmm B - 529321918 - done B - 529328415 - No error, errfile.txt deleted B - 529328415 - Set dump header as valid B - 529340981 - SD card dump done
RAM 转储也显示在 SD 卡中,如下图所示。
6.8 解析设备崩溃的 RAM 转储
从 Qualcomm Package Manager (QPM) 安装 RAM 转储提取工具 QCAP。有关 QCAP 的更多信息,请参阅QCAP 系统概述(80-NR964-54)。
该工具从崩溃日志位置提取并分析重要的调试数据。
6.9 硬件看门狗
QRB5165 上默认启用硬件看门狗,这会在 CPU 挂起情况下触发设备崩溃。有关详细信息,请参阅QRB5165 软件参考手册(80-88500-4)。
6.10 收集时钟转储
如果设备具有 JTAG 功能,请使用 JTAG 方法。如果设备没有 JTAG,请使用 ADB 方法进行时钟转储。
有关详细信息,请参阅QRB5165 软件参考手册(80-88500-4)。
6.10.1 使用 JTAG 收集时钟转储
-
打开任何 TRACE32 窗口(建议使用 AOP)。
-
键入sys.m.a将 TRACE32 连接到被测设备。
-
加载.elf文件并根据需要设置断点。
-
重新创建用例场景。
-
使用以下方法之一中断 TRACE32:
- 单击TRACE32 用户界面中的暂停。
- 按 F8。
- 用户定义的断点。
- 键入以下命令。
do <GLUE_BUILD>\common\core\tools\tools\systemdrivers\clock\<target id> \testclock.cmm
-
要获取所有时钟的转储,请在弹出窗口中键入 all。时钟转储打印在 TRACE32 的消息区域中。
6.10.2 使用 ADB shell 收集时钟转储
-
连接 USB。
-
运行以下命令。
adb shell mount -t debugfs none /sys/kernel/debug sleep 5 && while true; do echo \=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\= \=\=\=\=\=\=\=\=\=\=\=\=\=\=\=; cat /proc/uptime; cd /sys/kernel/debug/clk; for i in *; do if [ -d $i ]; then if [ -e $i/clk_measure ]; then echo $i \=\> measure:`cat $i/clk_measure`; else echo $i \=\> rate:`cat $i/clk_rate`; fi; fi; done; echo \-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\- \-\-\-\-\-\-\-\-\-\-\-\-\-; cd /sys/class/regulator; for i in *; do if [ -d $i ]; then if [ -e $i/state ]; then if [ "$(cat $i/state)" == "enabled" ]; then if [ -e $i/microvolts ]; then echo $i \=\> name:`cat $i/name` state:`cat $i/state` microvolt:`cat $i/microvolts`; else echo $i \=\> name:`cat $i/name` state:`cat $i/state` microvolt: N\/A; fi; fi; fi; fi; done; sleep 3; done > /data/dumpclk.txt &
-
当PID出现时拔掉USB。
-
连接 USB 并通过键入以下命令终止时钟检查 PID。
-
运行测试场景。执行测试场景至少 2 分钟。
adb shell ps | grep [PID] adb shell "kill [PID]" adb pull /data/dumpclk.txt
6.11 收集核心转储
默认情况下,仅在调试版本上启用核心转储收集。当任何用户空间应用程序崩溃时,转储文件默认保存在/data/coredump路径中。
要在 perf 构建上启用核心转储收集,请在 DISTRO 配置中添加COREDUMP_qti-distro-user = "1"并将 SYSTEMD_COREDUMP_PATH 设置为指向适当的核心转储路径。
例子
COREDUMP_qti-distro-user = "1"
SYSTEMD_COREDUMP_PATH ?= "${userfsdatadir}/coredump"
此命令在目标上创建包含以下内容的/etc/sysctl.d/sysctl-coredump.conf文件。
kernel.core_pattern = @COREDUMP_PATH@/core.%e.%p
fs.suid_dumpable = 2
要更改倾销模式,请执行以下操作。
- 作为 RW 修改的系统重新安装
- 保存存档。
- 重启设备。
从下次启动开始,核心转储将使用更新的模式生成。