Qualcomm Robotics RB5 平台软件用户指南(17)

150 篇文章 8 订阅
25 篇文章 0 订阅


6.7 RAM 转储到 SD 卡

  1. 更新启动代码中的以下命令以生成 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/"
    
  2. 确保执行以下代码。

    "./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__);}
    
    
  3. 将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
    
    
  4. 触发 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 收集时钟转储

  1. 打开任何 TRACE32 窗口(建议使用 AOP)。

  2. 键入sys.m.a将 TRACE32 连接到被测设备。

  3. 加载.elf文件并根据需要设置断点。

  4. 重新创建用例场景。

  5. 使用以下方法之一中断 TRACE32:

    • 单击TRACE32 用户界面中的暂停。
    • 按 F8。
    • 用户定义的断点。
    • 键入以下命令。
      do <GLUE_BUILD>\common\core\tools\tools\systemdrivers\clock\<target id>
      \testclock.cmm
      
      
  6. 要获取所有时钟的转储,请在弹出窗口中键入 all。时钟转储打印在 TRACE32 的消息区域中。

6.10.2 使用 ADB shell 收集时钟转储

  1. 连接 USB。

  2. 运行以下命令。

    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 &
    
    
  3. 当PID出现时拔掉USB。

  4. 连接 USB 并通过键入以下命令终止时钟检查 PID。

  5. 运行测试场景。执行测试场景至少 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

要更改倾销模式,请执行以下操作。

  1. 作为 RW 修改的系统重新安装
  2. 保存存档。
  3. 重启设备。
    从下次启动开始,核心转储将使用更新的模式生成。
  • 17
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值