持久内存与安全机制 - 第357页
我们继续深入解读 NVMe Base Specification Revision 2.0b 第 346 页的内容,本页详细描述了:
🔹 Boot Partition(引导分区)访问机制的读取与写入流程
🧭 一、Boot Partition 读取流程概览(见 Figure 412)
用途简述:
Boot Partition 提供平台启动阶段(如 UEFI、BMC)无需初始化 NVMe 队列即可访问的 NVM 区域。适用于 ROM 环境中的 Bootloader 加载。
📑 步骤详解:主机读取 Boot Partition 内容
主机通过设置 NVMe 寄存器属性,逐段读取 Boot 分区内容至内存中:
✅ Step 1:初始化传输链路
例如对 PCIe 设备来说,完成链路初始化。
✅ Step 2:检测是否支持 Boot 分区
读取控制器寄存器
CAP.BPS,确认是否支持 Boot Partition(Boot Partition Support)。
✅ Step 3:确认活动 Boot 分区 ID 和大小
读取
BPINFO属性寄存器,字段如下: -ABPID:Active Boot Partition Identifier(当前活动分区 ID) -BPSZ:Boot Partition Size(单位为 4 KiB)
✅ Step 4:在主机内存中分配物理连续缓冲区
用于接收 Boot Partition 数据,必须是物理连续的。
✅ Step 5:设置 Boot Partition Memory Buffer 的基地址
设置
BPMBL.BMBBA:Boot Partition Memory Buffer Base Address,即控制器 DMA 拷贝目标地址。
✅ Step 6:设置 Boot Partition Read 请求
使用 BPRSEL 寄存器,配置如下字段:
| 字段名 | 含义 |
|---|---|
BPID |
选择读取哪个 Boot 分区(0h 或 1h) |
BPRSZ |
读取的数据大小(以 4KiB 为单位) |
BPROF |
从 Boot Partition 中的偏移量(单位也是 4KiB) |
设置该寄存器后,控制器开始将 Boot Partition 内容传输至主机缓冲区。
✅ Step 7:轮询 BPINFO.BRS 以判断传输状态
| BRS 值 | 含义 |
|---|---|
10b |
传输成功,数据已在 Boot Partition Memory Buffer 中 |
11b |
传输错误,主机可重试 |
00b / 01b |
表示非读取中状态或未初始化状态 |
💡 小提示:分段读取 Boot 分区
在内存受限(如 ROM/BIOS)的环境下,可按如下策略操作: 1. 每次读取一小段(比如 1 个页 = 4KiB) 2. 将内容拷贝到其他内存区域 3. 继续下一段读取 4. 直到完整读取整个 Boot Partition
📚 相关扩展:Boot Partition Log Page 支持
如果控制器支持 Boot Partition Log Page(5.16.1.21 节),主机也可以使用标准 Get Log Page 命令访问 Boot Partition 内容。
🔄 二、Boot Partition 写入机制(简述)
虽然读取可以无需启用控制器,但写入 Boot 分区则必须满足以下条件:
- 控制器已启用(
CC.EN = 1) - 使用标准 NVMe 命令:
| 命令 | 功能 |
|---|---|
Firmware Image Download |
上传 Boot 分区内容 |
Firmware Commit |
提交并写入目标 Boot Partition |
✅ 写入过程将在下一页继续展开。你想我继续中文深入解读“Boot Partition 写入流程”的具体步骤(即 8.2.2)吗?还是先回顾 Boot 分区结构与用途?欢迎继续提问~