4.7.15. hrut_switch_reason

hrut_switch_reason 是为 A/B 双分区系统设计的启动故障诊断工具,可通过解析 misc 分区的存储数据,显示系统异常切换的根本原因。

4.7.15.1. 语法说明

以下是执行 hrut_resetreason 的命令格式:

hrut_switch_reason [misc_path] <--current|--all>

4.7.15.2. 参数选项说明

  • misc_path:可选参数,指定 misc 分区或文件路径(默认为 /dev/block/platform/by-name/misc)。

  • –current:显示最后一次异常切换的原因。

  • –all:显示所有异常切换的原因。

4.7.15.3. 各项命令选项及其功能说明

显示最后一次异常切换的原因

命令:

root@buildroot:~# hrut_switch_reason --current

功能:

从指定的 misc 文件中提取最后一次异常切换的原因,并输出打印。

打印输出:

misc broken

结果分析:

  • misc broken:表示最后一次异常切换的原因是 misc 分区损坏。

显示所有异常切换的原因

命令:

root@buildroot:~# hrut_switch_reason --all

功能:

从指定的 misc 文件中提取所有异常切换的原因,并按从最新到最旧的顺序输出打印。

打印输出:

All Reasons (From the latest to the oldest):
  1: misc broken
  2: unused
  3: unused
  4: unused
  5: unused
  6: unused
  7: unused
  8: unused
  9: unused
  10: unused

结果分析:

  • misc broken:表示 misc 分区损坏。

  • unused:表示未使用的条目。

各异常切换原因

以下是一些可能导致异常切换的原因及其具体触发场景:

  • misc broken( misc 分区损坏)​

    • 触发原因:

      • 分区表错误: GPT 分区表中 misc 分区信息损坏

      • ​异常断电:在更新 misc 信息时断电导致数据不完整

      • 存储介质故障: EMMC/NAND FLASH 坏块导致数据损坏

  • boot corrupted(启动镜像损坏)

    • 触发原因:

      • OTA 更新失败:下载的 boot.img 不完整或验证失败

  • dm-verity corrupted( dm-verity 验证失败)​

    • 触发原因:

      • 系统文件篡改:/system 分区被非授权修改

      • ​哈希树损坏: dm-verity 的哈希树数据块损坏

  • uboot corrupted( U-Boot 损坏)​

    • 触发原因:

      • QSPI Flash 故障: U-Boot 存储介质损坏

      • 刷机操作错误: fastboot flash uboot 时断电或失败

  • miniboot corrupted( MiniBoot 损坏)​

    • 触发原因:

      • 安全启动链断裂:上一级 Bootloader 验证失败