NVMe Base 2.4:Boot Partitions:讀取、更新與寫入保護

3 minute read

English

00.01.Boot Partitions 提供存放開機映像的空間。這篇從「還沒建立一般 I/O 佇列時,主機如何取到開機資料」開始,再說明映像更新、選擇啟用的分割區與寫入保護。

I/O
Input/Output,對 namespace 執行資料輸入與輸出的操作類別。

這篇的主軸

01

取出開機映像

01-01從選擇分割區、指定讀取範圍,到把資料放入主機記憶體,理解開機讀取的完整流程。

02

更新並選擇啟用映像

02-01傳入新映像、替換分割區內容、選擇啟用分割區,各自解決不同問題。

03

保護已寫入的內容

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

Boot 的兩條讀取路徑
讀取路徑或欄位從哪裡取得資料或狀態操作環境與單位
PropertiesBRS 回報讀取狀態不要求 CC.EN=1
LID 15h16-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

採用的規格版本

NVM Express Base Specification, Revision 2.4

Jia-Chang

Jia-Chang

Human

Comments

  Write a comment ...