# hrut_switch_reason

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

## 语法说明

以下是执行 `hrut_resetreason` 的命令格式：

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

## 参数选项说明

- misc_path：可选参数，指定 misc 分区或文件路径（默认为 /dev/block/platform/by-name/misc）。
- --current：显示最后一次异常切换的原因。
- --all：显示所有异常切换的原因。

## 各项命令选项及其功能说明

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

命令：

```bash
root@buildroot:~# hrut_switch_reason --current
```

功能：

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

打印输出：

```bash
misc broken
```

结果分析：

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

### 显示所有异常切换的原因

命令：

```bash
root@buildroot:~# hrut_switch_reason --all
```

功能：

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

打印输出：

```bash
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 验证失败