通过reset 激活firmware 更新的过程
- host发Firmware Image Download命令来将固件映像下载至控制器。固件映像(firmware image)可能有多个部分要下载,所以,要下载的固件映像的每一个部分的Offset 都应在Firmware Image Download中指定,Firmware Image Download命令里提供的数据需要符合Identify Controller 数据结构中指定的Firmware Update Granularity,否则,更新可能失败。
- 在固件下载到控制器之后,下一步是host提交Firmware Commit 命令。Firmware Commit会验证上次Download的固件映像是否有效,并将该映像提交到指定的Firm Slot以便后面使用。Offset 不是从0开始,含有空隙或者重叠Offset的固件映像视为无效。控制器可以额外采用其他vendor指定的方式(如校验和,CRC,密码哈希或数字签名)来确定固件映像的有效性:
a. Firmware Commit命令还可以用于激活与先前提交的Firmware Slot关联的固件映像。 - 最后一步是reset,然后激活”Firmware Commit”命令中”特定Firm Slot”字段里的固件映像。Reset 可以是The reset may be an NVM Subsystem Reset, Conventional Reset, Function Level Reset, or Controller Reset (CC.EN 从 ‘1’ 置为 ‘0’):
a. 在某些情况下,需要Conventional Reset 或 NVM Subsystem Reset才能激活固件映像。这种会在”Firmware Commit“中特定状态指示(NVME1.4 5.11.1)。 - Reset 完成后,host软件将重新初始化控制器。这包括重新分配I/O Submission Queues和Completion Queues. NVME1.4

博客介绍了两种激活固件更新的过程。一是通过reset激活,包括host下载固件映像、提交Firmware Commit命令验证并提交映像,最后reset激活;二是不通过reset激活,host下载映像后通过特定CA值提交Firmware Commit命令立即激活,还说明了不同错误情况的处理。


被折叠的 条评论
为什么被折叠?



