命名空间管理 - 🔧 固件更新流程(Firmware Update Process)概览 (第138页)
NVME2.0协议解读 1 min read

命名空间管理 - 🔧 固件更新流程(Firmware Update Process)概览 (第138页)

Blog Author

我们继续对 《NVM Express® Base Specification, revision 2.0b》第127页 中关于 Firmware Update Process(固件更新流程) 的内容进行中文深入解析与教学讲解。该部分说明了两种固件更新激活方式:通过重置激活无需重置直接激活,并辅以验证、提交、通知等机制。


🔧 固件更新流程(Firmware Update Process)概览

🔄 固件更新操作的核心命令:

  1. Firmware Image Download
  2. Firmware Commit
  3. 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) 立即激活,无需重启控制器
命令组合 DownloadCommitReset DownloadCommit (011b)
适用场景 一般设备、固件大改动 高可用系统、小型补丁更新
控制器行为 重置 → 初始化 直接热更新
通知机制 通常不需要 可能触发 Firmware Activation Starting 异步事件

🧠 深度教学要点:

  1. Firmware Image Download 支持分段传输,因此主机端需要精确管理 offset。
  2. 镜像必须符合粒度(Granularity)要求,这是主机和控制器之间“对齐协议”的体现。
  3. 所有控制器可能都有各自的 firmware slot 管理机制。
  4. “无需重启激活”功能是否支持,需通过 Identify Controller 数据结构中的能力字段确认。
  5. 控制器可能会阻止无效镜像提交或激活,返回状态码需特别处理。

如果你需要我继续讲解下一页(第 128 页)关于 固件提交过程中的错误处理与通知机制,或者想学习 Firmware Commit 命令中的 具体字段定义与合法值表,我可以接着带你看。

是否继续?