Boot Partitions提供了一个可选的 NVM 存储区域,主机可以读取该区域,而无需主机初始化队列或enable控制器。访问Boot Partitions的简化接口可用于平台初始化代码(例如,从主机 ROM 执行的bootloader)以引导至预操作系统环境(例如 UEFI)而不是将image存储在另一个存储介质(例如, SPI 闪存)。有关读取Boot Partitions内容的过程,请参阅第 8.2.1 节。
支持Boot Partitions的 NVMe 控制器有两个大小相同的Boot Partitions,使用Boot Partitions标识符 0h 和 1h。这两个Boot Partitions允许主机在将Boot Partitions标记为active之前更新其中一个并验证内容。 NVM 子系统中的控制器可以共享相同的Boot Partitions。
Boot Partitions的内容只能使用Firmware Image Download和Firmware Commit命令(请参阅第 8.2.2 节)进行修改,并且可以使用Replay Protected Memory Block进行保护以防止未经授权的修改(请参阅第 8.2.3 节)。
8.2.1 Reading from a Boot Partition
一个Boot Partition就是一个连续的数据块,如图 412 所示,主机可以通过 NVMe 属性读取该数据块。

要使用 NVMe 属性读取Boot Partitions的内容,Host会在Host Memory中分配Boot Partitions Memory Buffer,以便控制器从Boot Partitions复制内容。 Host初始化Boot Partitions Memory Buffer Base Address。 Host通过设置Boot Partition ID、Boot Partition Read Size和Boot Partition Read Offset来enable Boot Partition读操作。 Host可以继续从Boot Partitions读取,直到读取了整个Boot Partitions。
Host可以在 NVM 子系统上电时随时读取Boot Partitions的一部分(即,无论 CC.EN 是否设置为“1”)。 当正在进行Boot Partitions读取时,Host不得修改传输特定properties(在适用的 NVMe Transport binding specification中描述)、Reset或者shutdown controller。
要从Boot Partitions读取数据,Host要执行以下步骤:
- 如有必要,对传输初始化(比如 PCIe link);
- 判断控制器是否支持Boot Partitions(CAP.BPS);
- 确定哪个Boot Partition是active(BPINFO.ABPID),Boot Partition的大小

本文详细介绍了NVMe规范中关于BootPartition的使用,包括如何通过属性读取内容,使用FirmwareImageDownload和FirmwareCommit命令进行写入更新,以及利用BootPartitionProtection进行安全防护。在读取过程中,主机可以从ROM执行的bootloader直接访问BootPartition,而在写入时,需先解锁并验证内容。此外,BootPartition的内容可以使用RPMB(Replay Protected Memory Block)进行保护,防止未经授权的修改。

239

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



