命名空间管理 - 🔧 固件更新流程(Firmware Update Process)概览 (第138页)
我们继续对 《NVM Express® Base Specification, revision 2.0b》第127页 中关于 Firmware Update Process(固件更新流程) 的内容进行中文深入解析与教学讲解。该部分说明了两种固件更新激活方式:通过重置激活 和 无需重置直接激活,并辅以验证、提交、通知等机制。
🔧 固件更新流程(Firmware Update Process)概览
🔄 固件更新操作的核心命令:
- Firmware Image Download
- Firmware Commit
- Reset 激活(可选)
🧭 一、通过重置激活的固件更新流程(Reset-Based Activation)
这是标准的、最常见的固件更新方式,适用于大多数控制器。
✅ 步骤详解:
Step 1:下载固件镜像
- 主机使用
Firmware Image Download命令将新固件镜像写入控制器缓存中。 - 支持分段下载,因此每段需要指定偏移地址(offset)。
- 数据应符合
Identify Controller返回的 Firmware Update Granularity(固件更新粒度),否则更新可能失败。
Step 2:提交固件镜像
- 使用
Firmware Commit命令提交刚才下载的固件镜像。 - 会对镜像进行完整性验证,如:
- 是否从 offset = 0 开始;
- 是否无间隙;
- 是否无重叠;
- 控制器还可能使用 厂商特定方式(例如 CRC、Hash、签名)进行进一步验证。
✳️ 此命令还可用于激活一个已提交的旧版本固件(通过指定槽位)。
Step 3:激活固件(通过重置)
- 使用重置命令使新的固件正式生效。支持以下几类 Reset:
- NVM Subsystem Reset
- Conventional Reset
- Function Level Reset
- Controller Reset(即 CC.EN 从 1 → 0)
⚠️ 某些情况中,必须使用 Subsystem Reset 或 Conventional Reset 才能激活新固件,该要求可通过 Firmware Commit 返回状态码得知。
Step 4:控制器重新初始化
- 固件激活后,主机需重新初始化控制器:
- 重新创建 I/O Submission Queues 与 Completion Queues;
- 重新配置控制器功能;
- 参考第 3.5.1 和 3.5.2 节的初始化过程。
⚡ 二、无需重置的固件更新流程(In-Place Activation / No Reset)
适用于支持热插拔、虚拟化或高可用系统,无需 Reset 即可生效固件,减少中断时间。
✅ 步骤详解:
Step 1:下载固件
- 同样使用
Firmware Image Download命令分段下载镜像; - 镜像应符合粒度要求(Firmware Update Granularity)。
Step 2:提交并立即激活
- 使用
Firmware Commit命令,并设置: - Commit Action = 011b,表示无需 Reset,立即激活
- 镜像将替换目标固件槽位中的固件;
- 如果跳过了第一步(未下载新镜像),则表示主机希望激活已有槽位中的固件。
🔔 如果激活的固件影响其他控制器,并且启用了 Firmware Activation Notices,那么控制器需向主机发送 Firmware Activation Starting 异步事件通知(参见 Figure 326)。
Step 3:固件激活完成
- 控制器完成固件提交。
- 如果出错(下一页继续说明),控制器将执行特定处理。
📌 小结:两种固件激活方式对比
| 项目 | 通过重置激活 | 无需重置激活 |
|---|---|---|
| 激活方式 | 重置后激活(Subsystem / Function / Controller Reset) | 立即激活,无需重启控制器 |
| 命令组合 | Download → Commit → Reset |
Download → Commit (011b) |
| 适用场景 | 一般设备、固件大改动 | 高可用系统、小型补丁更新 |
| 控制器行为 | 重置 → 初始化 | 直接热更新 |
| 通知机制 | 通常不需要 | 可能触发 Firmware Activation Starting 异步事件 |
🧠 深度教学要点:
Firmware Image Download支持分段传输,因此主机端需要精确管理 offset。- 镜像必须符合粒度(Granularity)要求,这是主机和控制器之间“对齐协议”的体现。
- 所有控制器可能都有各自的 firmware slot 管理机制。
- “无需重启激活”功能是否支持,需通过
Identify Controller数据结构中的能力字段确认。 - 控制器可能会阻止无效镜像提交或激活,返回状态码需特别处理。
如果你需要我继续讲解下一页(第 128 页)关于 固件提交过程中的错误处理与通知机制,或者想学习 Firmware Commit 命令中的 具体字段定义与合法值表,我可以接着带你看。
是否继续?