NVMe Base 2.4:Boot Partitions:讀取、更新與寫入保護
00.01.Boot Partitions 提供存放開機映像的空間。這篇從「還沒建立一般 I/O 佇列時,主機如何取到開機資料」開始,再說明映像更新、選擇啟用的分割區與寫入保護。
- I/O
- Input/Output,對 namespace 執行資料輸入與輸出的操作類別。
這篇的主軸
取出開機映像
01-01從選擇分割區、指定讀取範圍,到把資料放入主機記憶體,理解開機讀取的完整流程。
更新並選擇啟用映像
02-01傳入新映像、替換分割區內容、選擇啟用分割區,各自解決不同問題。
保護已寫入的內容
03-01比較不同寫入保護狀態,以及重設或斷電後哪些限制仍然保留。
把主軸連起來
00.02.讀取時要選對分割區與範圍,並提供接收資料的主機記憶體;更新時則要分清傳入映像、替換內容與選擇啟用分割區。寫入保護限制的是更新行為,其狀態在不同 reset 或斷電條件下的保留方式需要另外判讀。
01 Boot 的兩條讀取路徑
01.01.先問 controller 是否已建立 Admin command 環境,再選 property 或 LID 15h。兩條路徑讀同一類 Boot 內容,但回傳格式與狀態觀察點不同。
- controller
- controller,實作 NVMe 介面、取走 command 並回報 completion 的控制實體。
- Admin
- Administrative,建立、設定、查詢或管理 controller 與 queue 的控制路徑。
- LID
- Log Page Identifier;指定要讀取哪一種 log page 的編號。
01.02.Boot Partitions 是選用功能;支援時有兩個等大的 partition,ID 為 0h、1h。Host 可在未建立 queues、未啟用 controller 時透過 properties 讀取。
- Host
- 主機;執行作業系統並送出 NVMe 命令的一端。
來源:Base 2.4 §8.1.3
來源:NVME-BASE-2.4, Rev. 2.4, §8.1.3, 文件頁 586, PDF 頁 612
| 讀取路徑或欄位 | 從哪裡取得資料或狀態 | 操作環境與單位 |
|---|---|---|
| Properties | BRS 回報讀取狀態 | 不要求 CC.EN=1 |
| LID 15h | 16-byte header + data | 由 Admin command CQE 判斷命令結果 |
| BPID | 選取讀取 partition | 不等於 active ID |
| BPSZ | 每單位 128 KiB | 不是 bytes |
- BPID
- Boot Partition Identifier;選取 0 或 1,與目前 active partition 分開。
- BPSZ
- Boot Partition Size;每單位 128 KiB。
- BRS
- Boot Read Status;00b 未請求、01b 進行中、10b 成功、11b 錯誤。
- CQE
- Completion Queue Entry,CQ 中的一筆完成結果資料結構。
- CC
- Controller Configuration,host 用來選擇設定並啟用或停用 controller 的 property。
- EN
- Enable,CC 中控制 controller enable state 的 bit。
02 映像更新、啟用與寫入保護
02.01.把 image transfer、partition content、active selection、write protection 分開追蹤。成功下載尚未寫入 Boot Partition;寫入成功也未自動選成 active。
02.02.Boot image 從開頭依序用 Firmware Image Download 傳送;將目標解鎖後,以 Firmware Commit CA=110b 寫入 BPID 指定的 partition。Host 可讀回驗證,再以 CA=111b 更新 active ID,最後重新上鎖。更新中斷可能留下新舊混合內容,因此宜先驗證再設為 active。
- CA
- Commit Action,Firmware Commit 中選擇 replace、activate 與 reset policy 的欄位。
來源:Base 2.4 §8.1.3.2
來源:NVME-BASE-2.4, Rev. 2.4, §8.1.3.2, 文件頁 587-588, PDF 頁 613-614
| 目前的控制機制與狀態 | Controller Level Reset 後 | Power cycle 後 |
|---|---|---|
| Set Features:Write Unlocked | 保持 Write Unlocked | 回到 Write Locked |
| Set Features:Write Locked Until Power Cycle | 保持原狀態 | 回到 Write Locked,需另行解鎖才能寫入 |
| RPMB 已啟用:Write Unlocked | 回到 Write Locked | 回到 Write Locked |
接著打開 Spec 看什麼
03.01.以下按概念列出閱讀位置。報告時先用上面的流程說明問題,再打開對應章節看欄位與完整條件。中文教學 HTML 另有本篇全部圖表的逐圖重點、案例與細節。
| 要說明的觀念 | Spec 閱讀位置 |
|---|---|
| Boot 的兩條讀取路徑 | Base 2.4 §8.1.3 · Base 2.4 §8.1.3.1 · Base 2.4 §5.2.13.1.21 |
| 映像更新、啟用與寫入保護 | Base 2.4 §8.1.3.2 · Base 2.4 §8.1.3.3 · Base 2.4 §5.2.30.1.39 · Base 2.4 §8.1.3.3.1-8.1.3.3.3 · Base 2.4 §5.2.30.1.39; 8.1.3.3.3 |
學完後想一想
1. 新 boot image 已寫入 partition,下一次使用的 active partition 就已改變了嗎?
04.01.寫入與選擇 active ID 是兩個動作。CA=110b 寫入指定 partition;可讀回確認內容後,再以 CA=111b 選擇 active ID。把兩步分開,才能在切換前確認新 image。
來源
來源:NVME-BASE-2.4, Rev. 2.4, §8.1.3.2, 文件頁 587-588, PDF 頁 613-614
來源:NVME-BASE-2.4, Rev. 2.4, §8.1.3, 文件頁 586, PDF 頁 612
2. Boot Partition 解鎖後,Controller Level Reset 一定會重新上鎖嗎?
04.02.要先知道由哪個機制控制。Set Features 的 unlocked 狀態可跨此 reset 保留,但 power cycle 會上鎖;已啟用的 RPMB 保護則在這兩種事件都會重新上鎖。
來源
來源:NVME-BASE-2.4, Rev. 2.4, §5.2.30.1.39, 文件頁 513-514, PDF 頁 539-540
來源:NVME-BASE-2.4, Rev. 2.4, §8.1.3.3.1-8.1.3.3.3, 文件頁 589-594, PDF 頁 615-620


Comments