取出開機映像
01-01從選擇分割區、指定讀取範圍,到把資料放入主機記憶體,理解開機讀取的完整流程。
NVMe · 規格與原理
00.01.Boot Partitions 提供存放開機映像的空間。這篇從「還沒建立一般 I/O 佇列時,主機如何取到開機資料」開始,再說明映像更新、選擇啟用的分割區與寫入保護。
01-01從選擇分割區、指定讀取範圍,到把資料放入主機記憶體,理解開機讀取的完整流程。
02-01傳入新映像、替換分割區內容、選擇啟用分割區,各自解決不同問題。
03-01比較不同寫入保護狀態,以及重設或斷電後哪些限制仍然保留。
00.02.讀取時要選對分割區與範圍,並提供接收資料的主機記憶體;更新時則要分清傳入映像、替換內容與選擇啟用分割區。寫入保護限制的是更新行為,其狀態在不同 reset 或斷電條件下的保留方式需要另外判讀。
01.01.Boot Partition 是開機映像的儲存空間,不是一般 I/O 命令用 NSID 選取的 namespace。讀取前要知道控制器支援的路徑、目標分割區及大小;目前啟用的分割區編號與這次想讀的目標編號可以不同。
01.02.CAP.BPS 用於確認支援,BPINFO 提供大小、啟用資訊及讀取狀態。BPRSEL 的 BPID、BPROF、BPRSZ 分別選目標、起點及長度;BPMBL 的 BMBBA 指向主機接收記憶體。把來源範圍與目的位址分開畫,才不會把映像 offset 填到主機位址欄位。
01.03.使用 LID 15h 時,先以對應的 BPID 選分割區,再讀 header 中的 BPINFO。Boot Partition Data 接在 log 的表頭後面;log 內的位移與映像本身的位移有不同起點。計畫分段讀取時,先把兩個起點標在同一張資料配置圖上。
01.04.Properties 路徑依 BRS 等狀態判斷讀取是否完成;Get Log Page 路徑則由該命令的 CQE 判斷結果。主機已配置好 buffer,只代表有接收位置,不能據此認定內容已完成更新。
來源:NVME-BASE-2.4, Rev. 2.4, §8.1.3, 文件頁 586, PDF 頁 612
來源:NVME-BASE-2.4, Rev. 2.4, §8.1.3.1, 文件頁 586-587, PDF 頁 612-613
來源:NVME-BASE-2.4, Rev. 2.4, §5.2.13.1.21, 文件頁 283-284, PDF 頁 309-310
01.06.Boot Partitions 是選用功能;支援時有兩個等大的 partition,ID 為 0h、1h。Host 可在未建立 queues、未啟用 controller 時透過 properties 讀取。
來源:NVME-BASE-2.4, Rev. 2.4, §8.1.3, 文件頁 586, PDF 頁 612
01.07.Host 先檢查 CAP.BPS、BPINFO 的 active ID/size,再配置連續 buffer 與 BPMBL,確認沒有讀取進行中後寫入 BPRSEL。BRS=01b 表示傳輸中,10b 表示成功,11b 表示錯誤;讀取中不得 reset、shutdown 或改動 transport-specific properties。
來源:NVME-BASE-2.4, Rev. 2.4, §8.1.3.1, 文件頁 586-587, PDF 頁 612-613
01.08.LID 15h 以 CDW10.LSP 的 BPID 選 partition,回傳 16-byte header 與其後的資料;BPSZ 以 128 KiB 計。此 log 讀取不改變 BPINFO、BPRSEL 或 BPMBL properties。
來源:NVME-BASE-2.4, Rev. 2.4, §5.2.13.1.21, 文件頁 283-284, PDF 頁 309-310
| 讀取路徑或欄位 | 從哪裡取得資料或狀態 | 操作環境與單位 |
|---|---|---|
| Properties | BRS 回報讀取狀態 | 不要求 CC.EN=1 |
| LID 15h | 16-byte header + data | 由 Admin command CQE 判斷命令結果 |
| BPID | 選取讀取 partition | 不等於 active ID |
| BPSZ | 每單位 128 KiB | 不是 bytes |
02.01.假設目前使用 BP0,準備更新 BP1。下載新映像只把映像交給控制器;Firmware Commit 才依動作與 BPID 寫入目標;選擇 active partition 又是另一個動作。寫入保護決定目標是否允許被修改,並不直接表示哪個映像正在啟用。
02.02.假設目前由 Set Features 控制保護,且 BP1 的狀態允許變更。BP1WPS 在 bits 5:3,填 001b 要求解鎖;BP0WPS 填 000b 表示不要求改變 BP0。CDW11=(1<<3)=08h。Get Features 回覆 BP0 時會給真實狀態,不會回傳這個「不改變」要求值。
02.03.在這套機制下,解鎖狀態可跨 Controller Level Reset 保留,power cycle 後回到 Write Locked。若先前設成 Write Locked Until Power Cycle,要求改變保護狀態的 Set Features 命令會被拒絕;要等 power cycle 才離開該狀態,重新上電後仍是鎖定,還需要明確解鎖才能改寫。
02.04.若 multi-domain NVM subsystem 的控制器 A、B 共享 BP0,將 BP0 設為 Write Locked Until Power Cycle 的要求會以 Feature Not Changeable 結束。這個限制針對特定狀態設定;共享分割區本身並未因此變成不可讀。解除該狀態牽涉共享控制器的同時 power cycle,不能只由其中一個控制器的重設來理解。
02.05.RPMB 是 Replay Protected Memory Block,提供有驗證的操作。啟用其 Boot 保護後,FID 85h 的 Get 回報 100b,保護狀態改由 RPMB 的設定操作控制。解鎖的分割區遇 Controller Level Reset 或 power cycle 會重新鎖定。保護機制不能被停用,與各分割區仍可依規定鎖定或解鎖,是兩個不同層次。
來源: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.2, 文件頁 588, PDF 頁 614
來源:NVME-BASE-2.4, Rev. 2.4, §8.1.3.3, 文件頁 588-589, PDF 頁 614-615
來源: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
來源:NVME-BASE-2.4, Rev. 2.4, §5.2.30.1.39; 8.1.3.3.3, 文件頁 513-514,593-594, PDF 頁 539-540,619-620
02.07.Boot image 從開頭依序用 Firmware Image Download 傳送;將目標解鎖後,以 Firmware Commit CA=110b 寫入 BPID 指定的 partition。Host 可讀回驗證,再以 CA=111b 更新 active ID,最後重新上鎖。更新中斷可能留下新舊混合內容,因此宜先驗證再設為 active。
來源:NVME-BASE-2.4, Rev. 2.4, §8.1.3.2, 文件頁 587-588, PDF 頁 613-614
02.08.Host 不宜在寫入 Boot Partition 時同時讀取,也不宜重疊 firmware/boot image 更新序列。單一序列宜使用同一 controller 或 Management Endpoint;跨端點提交可能使 Commit 以 Invalid Firmware Image 結束。
來源:NVME-BASE-2.4, Rev. 2.4, §8.1.3.2, 文件頁 588, PDF 頁 614
02.09.BPCAP 回報 Set Features 與 RPMB Boot 保護能力。只有 Set Features 機制或 RPMB 尚未啟用時由 FID 85h 控制;RPMB 保護啟用後由 RPMB 控制。同一時刻只有一套機制控制狀態,共享 partition 的所有 controllers 都須執行其保護。
來源:NVME-BASE-2.4, Rev. 2.4, §8.1.3.3, 文件頁 588-589, PDF 頁 614-615
02.10.BP0WPS 位於 CDW11[2:0],BP1WPS 位於 [5:3]。000b 僅用於 Set 的不改變請求;001b/010b/011b 分別為 unlocked/locked/locked until power cycle;100b 由 Get 回報 RPMB 控制,不能作為 Set 值。此 Feature 不可 save,power cycle 後預設 locked。
來源:NVME-BASE-2.4, Rev. 2.4, §5.2.30.1.39, 文件頁 513-514, PDF 頁 539-540
02.11.Set Features 的 unlocked 狀態跨 Controller Level Reset 保留,但 power cycle 後回到 locked;目前為 locked-until-power-cycle 時,Set Features 變更要求會以 Feature Not Changeable 結束;power cycle 後回到 locked,仍需明確解鎖才能寫入。RPMB 保護啟用後,unlocked 遇 power cycle 或 Controller Level Reset 會回到 locked,且啟用本身不可撤回。
來源:NVME-BASE-2.4, Rev. 2.4, §8.1.3.3.1-8.1.3.3.3, 文件頁 589-594, PDF 頁 615-620
02.12.嘗試修改 locked-until-power-cycle 或 RPMB 控制中的狀態,FID 85h 以 Feature Not Changeable 拒絕。Multi-domain subsystem 中共享的 partition 不允許 locked-until-power-cycle。兩套機制並存時,只要任一 partition 在該狀態,就不得啟用 RPMB Boot 保護來繞過它。
來源:NVME-BASE-2.4, Rev. 2.4, §5.2.30.1.39; 8.1.3.3.3, 文件頁 513-514,593-594, PDF 頁 539-540,619-620
| 目前的控制機制與狀態 | 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 |
03.01.以下依概念整理規格中的圖表。每組先說明讀取順序與要判斷的問題,接著列出各圖的欄位或行為說明。可以由正文的連結跳到對應組別,也可以用這一節檢查自己能否把欄位連回完整操作。
03.02.Properties 路徑依序連接 CAP.BPS、BPINFO、BPRSEL、BPMBL:支援能力、狀態、讀取選擇、主機緩衝區。LID 15h 則分開讀 header 與 data,並以 Admin CQE 解讀這筆命令的結果。
回到本節的解釋與範例03.03.Properties 路徑與 LID 15h 路徑都讀 Boot Partition,但要求與完成證據不同;兩條路徑的位移起點也應分別標示。
| 一起判讀的欄位或標示 | 如何共同決定操作或結果 | 帶入情境後怎麼讀 |
|---|---|---|
| ABPID/BPSZ/BRS | 分別給 active partition、以 128 KiB 為單位的分割區大小及 Properties 讀取狀態;ABPID 不等於本次目標 BPID。 | 目前 active 是 BP0 時,主機仍可能指定讀取 BP1。 |
| BPID/BPROF/BPRSZ | BPID 選目標分割區;BPROF 與 BPRSZ 分別以 4 KiB 為單位指定起點與讀取量。 | 先用起點加長度檢查未超出 BPSZ,再提供主機接收位置。 |
| BMBBA | 指向接收開機資料的主機記憶體;與 HMB Feature 借給控制器的記憶體用途不同。 | 圖上標為 Host Memory Buffer 的接收區,不代表必須先啟用 Host Memory Buffer Feature。 |
| LID 15h 的 BPID/BPINFO/BPD | log 先有表頭,再有 Boot Partition Data;Get Log Page 的 offset 從 log 起點計算。 | 讀映像 offset 0 的資料時,需考慮它在 log 內位於表頭之後,不能直接把兩種 offset 畫在同一起點。 |
來源:NVME-BASE-2.4, Rev. 2.4, §5.2.13.1.21, Figure 279, 文件頁 283, PDF 頁 309
來源:NVME-BASE-2.4, Rev. 2.4, §5.2.13.1.21, Figure 280, 文件頁 284, PDF 頁 310
來源:NVME-BASE-2.4, Rev. 2.4, §8.1.3.1, Figure 679, 文件頁 587, PDF 頁 613
來源:NVME-BASE-2.4, Rev. 2.4, §3.1.4.13, Figure 49, 文件頁 69, PDF 頁 95
來源:NVME-BASE-2.4, Rev. 2.4, §3.1.4.14, Figure 50, 文件頁 69-70, PDF 頁 95-96
來源:NVME-BASE-2.4, Rev. 2.4, §3.1.4.15, Figure 51, 文件頁 70, PDF 頁 96
Base279-1Boot Partition log 的參數用 BPID 選要讀的分割區。
來源:NVME-BASE-2.4, Rev. 2.4, §5.2.13.1.21, Figure 279, 文件頁 283, PDF 頁 309
Base279-2同一 LID 配 BPID=0 或 1 會選到不同 partition;LID 指紀錄種類,BPID 才指此次目標。
Base280-1Boot Partition log 先回報 header,再提供分割區資料。
來源:NVME-BASE-2.4, Rev. 2.4, §5.2.13.1.21, Figure 280, 文件頁 284, PDF 頁 310
Base280-2讀回 buffer 後先找 BPD 的開始位置;不能把 header 內容當成開機映像的第一段 bytes。
Base679-1Boot Partition 圖連起裝置分割區與主機接收 buffer。
來源:NVME-BASE-2.4, Rev. 2.4, §8.1.3.1, Figure 679, 文件頁 587, PDF 頁 613
Base679-2沿一次讀取追 Partition 0 或 1 到主機記憶體的資料方向,分清來源、讀取選擇與目的位址。
03.04.CAP.BPS 決定 Boot Partitions 能力;LPA 與 BPCAP 再分別補充 log 讀取及保護方式。multi-domain 是共享配置的判斷條件,不是一種保護狀態。
| 一起判讀的欄位或標示 | 如何共同決定操作或結果 | 帶入情境後怎麼讀 |
|---|---|---|
| CAP.BPS/LPA 的 Boot Partition Log Page Support | 先確認 Boot 功能,再確認是否能透過 LID 15h 取得內容。 | CAP.BPS=1 不能單獨代替 LPA 的 log 支援檢查。 |
| BPCAP | 回報 Set Features 與 RPMB Boot 保護能力;啟用哪一個機制還要看目前控制狀態。 | 同時支援兩套機制時,不是把兩個解鎖命令都送一次;先確認現在由誰控制。 |
| CTRATT.MDS/分割區共享關係 | MDS=1 且分割區跨控制器共享,才形成這裡的 until-power-cycle 限制條件。 | A、B 共享 BP0 的 multi-domain subsystem:不得把 BP0 設為 Write Locked Until Power Cycle;正常讀取 BP0 並未因此被禁止。 |
來源:NVME-BASE-2.4, Rev. 2.4, §3.1.4.1, Figure 36, 文件頁 55-58, PDF 頁 81-84
來源:NVME-BASE-2.4, Rev. 2.4, §5.2.14.2.1, Figure 338, 文件頁 340-382, PDF 頁 366-408
Base36-1CAP 描述控制器能力,主機設定必須落在其支援範圍。
來源:NVME-BASE-2.4, Rev. 2.4, §3.1.4.1, Figure 36, 文件頁 55-58, PDF 頁 81-84
Base36-2設定記憶體頁大小前,先比對 MPSMIN 與 MPSMAX;主機偏好的頁大小不一定就是控制器接受的大小。
Base49-1BPINFO 把啟用分割區、讀取狀態與大小放在一起回報。
來源:NVME-BASE-2.4, Rev. 2.4, §3.1.4.13, Figure 49, 文件頁 69, PDF 頁 95
Base49-2主機要求讀 Partition 1 後,BRS 用來觀察讀取狀態;ABPID 仍是啟用分割區資訊,不能拿它替代此次讀取選擇。
Base50-1BPRSEL 指定 Boot Partition 讀取的目標、起点與長度。
來源:NVME-BASE-2.4, Rev. 2.4, §3.1.4.14, Figure 50, 文件頁 69-70, PDF 頁 95-96
Base50-2要讀 Partition 1 的一段資料,BPID 選 1,BPROF 與 BPRSZ 按欄位單位設定;三者合起來才是一個完整讀取範圍。
Base51-1BPMBL 提供接收 Boot Partition 資料的主機記憶體位置。
來源:NVME-BASE-2.4, Rev. 2.4, §3.1.4.15, Figure 51, 文件頁 70, PDF 頁 96
Base51-2BPRSEL 選的是裝置上的來源區段,BPMBL 選的是主機目的 buffer;相同的數字在兩處代表不同位址空間。
03.05.讀 log 先選 LID 與命令集,再解讀該 log 的 LSP/LSI;NUMD 決定本次量,LPO 決定本次起點,DPTR 決定主機接收位置。
| 一起判讀的欄位或標示 | 如何共同決定操作或結果 | 帶入情境後怎麼讀 |
|---|---|---|
| LID/CSI/LSP/LSI | LID 與 CSI 選紀錄種類,LSP、LSI 的含義由所選 log 定義。 | LSP 在 Boot 中可含 BPID,在 Telemetry 中有建立 capture 的控制位元,不能跨 log 照搬。 |
| NUMDU/NUMDL | 先合成 NUMD=(NUMDU<<16)|NUMDL,再計算 (NUMD+1)×4 bytes。 | 512 bytes 對應 NUMD=127;高低部分不能各自加 1。 |
| LPOU/LPOL/OT | 高低欄位組成 64-bit offset;OT 決定按 byte 位移或項目索引解讀。 | byte-offset 模式下,從 512-byte 表頭後開始讀資料要保留起點差異;index 模式不能直接使用同一個 byte 數。 |
| DPTR/RAE | DPTR 給接收記憶體,RAE 控制相關事件的保留行為。 | 分段讀取先準備每段 buffer,再在恰當時機確認事件,避免中途改變可取得的紀錄。 |
| LSUPP/LID Specific Parameter | Supported Log Pages 回報實際支援及 log 專屬能力。 | 規格列有某個 LID,不代表此裝置一定實作;先查支援再使用進階選項。 |
來源:NVME-BASE-2.4, Rev. 2.4, §5.2.13, Figure 203, 文件頁 213, PDF 頁 239
來源:NVME-BASE-2.4, Rev. 2.4, §5.2.13, Figure 204, 文件頁 213, PDF 頁 239
來源:NVME-BASE-2.4, Rev. 2.4, §5.2.13, Figure 205, 文件頁 214, PDF 頁 240
來源:NVME-BASE-2.4, Rev. 2.4, §5.2.13, Figure 206, 文件頁 214, PDF 頁 240
來源:NVME-BASE-2.4, Rev. 2.4, §5.2.13, Figure 207, 文件頁 214, PDF 頁 240
來源:NVME-BASE-2.4, Rev. 2.4, §5.2.13, Figure 208, 文件頁 214-215, PDF 頁 240-241
來源:NVME-BASE-2.4, Rev. 2.4, §5.2.13, Figure 209, 文件頁 215-216, PDF 頁 241-242
Base203-1Get Log Page 的 DPTR 指向主機接收 log 資料的空間。
來源:NVME-BASE-2.4, Rev. 2.4, §5.2.13, Figure 203, 文件頁 213, PDF 頁 239
Base203-2同樣是 512-byte buffer,LID 不同會得到不同結構;DPTR 只提供位置,不會決定 log 類型。
Base204-1Get Log Page 的 CDW10 選擇 log、低位長度及相關控制參數。
來源:NVME-BASE-2.4, Rev. 2.4, §5.2.13, Figure 204, 文件頁 213, PDF 頁 239
Base204-2讀取 512 bytes 共 128 Dwords,長度原始值為 127;同時填正確 LID,才能知道回來的是哪一份紀錄。
Base205-1CDW11 提供長度高位與 log 特定識別資訊。
來源:NVME-BASE-2.4, Rev. 2.4, §5.2.13, Figure 205, 文件頁 214, PDF 頁 240
Base205-2NUMDU 非零時總長度需與 NUMDL 合併後再加 1;不能把兩個長度欄位各加 1 再相加。
Base206-1LPOL 是 log offset 的低 32 bits,單位還要看 offset 模式。
來源:NVME-BASE-2.4, Rev. 2.4, §5.2.13, Figure 206, 文件頁 214, PDF 頁 240
Base206-2byte-offset 模式下讀下一段 512 bytes,LPOL 設 512;index-offset 模式則以項目索引解釋,數字 512 不再表示相同位置。
Base207-1LPOU 補齊較大 log offset 的高 32 bits。
來源:NVME-BASE-2.4, Rev. 2.4, §5.2.13, Figure 207, 文件頁 214, PDF 頁 240
Base207-2完整 offset=00000001_00000000h 時,LPOU=1、LPOL=0;只讀 LPOL 會誤以為從開頭開始。
Base208-1CDW14 的 CSI、OT、UIDX 決定命令集、offset 模式與相關選擇。
來源:NVME-BASE-2.4, Rev. 2.4, §5.2.13, Figure 208, 文件頁 214-215, PDF 頁 240-241
Base208-2相同 LPOL=4,在 byte-offset 與 index-offset 下表示不同事物;先看 OT 才能正確解讀位置。
Base209-1LID 清單把紀錄編號與其命令集、範圍連在一起。
來源:NVME-BASE-2.4, Rev. 2.4, §5.2.13, Figure 209, 文件頁 215-216, PDF 頁 241-242
Base209-2先依本篇所需的紀錄選取清單中的對應列,再看 CSI 與作用範圍;編號只選紀錄種類,完整欄位排列仍到該 log 的結構表閱讀。
03.06.保護狀態表先選定 FID 85h 或 RPMB 控制,再沿「目前狀態→允許的操作→重設/斷電後狀態」閱讀。RPMB frame 與訊息流程應配對看,分清要求、回應、計數器和驗證資料各自的位置。
回到本節的解釋與範例03.07.先判斷目前由 Set Features 或 RPMB 控制,再選 BP0 或 BP1。讀值、要求變更、重設後保留與驗證操作分別有自己的規則。
| 一起判讀的欄位或標示 | 如何共同決定操作或結果 | 帶入情境後怎麼讀 |
|---|---|---|
| BP0WPS bits 2:0/BP1WPS bits 5:3 | 兩個 3-bit 欄位獨立描述分割區狀態。 | 只要求解鎖 BP1 並保留 BP0,CDW11=(001b<<3)|000b=08h。 |
| 000b/001b/010b/011b/100b | 依序為 Set 不改變、解鎖、鎖定、鎖到 power cycle,以及 Get 回報 RPMB 控制;不是所有編碼都能同時用於 Set 與 Get。 | Get 不回 000b;Set 指定 100b 會是 Invalid Field in Command。 |
| Controller Level Reset/power cycle | Set Features 的解鎖可跨 controller reset;power cycle 會回 locked。RPMB 啟用後,兩種事件都會使已解鎖分割區重新鎖定。 | 要恢復寫入,先看是哪個機制控制,再採用對應的解鎖操作。 |
| Write Locked Until Power Cycle/CTRATT.MDS/共享關係 | 目前狀態與裝置配置一起限制是否可變更;multi-domain 且跨控制器共享的分割區禁止使用此狀態。 | A、B 共享 BP0,將 BP0 設 011b 的要求會回 Feature Not Changeable;不能以只重設 A 來解除。 |
| RPMB Enable/各分割區 Write Protection bits | 啟用機制與分割區鎖定是不同層次;啟用後不能停用機制,但可依驗證流程變更各分割區保護狀態。 | FID 85h 回 100b 表示應改走 RPMB 控制,不表示所有分割區永遠不可解鎖。 |
| Request/Response/Result/Counter/Nonce/MAC | 訊息類型選操作,Result 回報結果,Counter 與 Nonce 配合驗證避免把舊回覆當成新操作結果。 | Configuration Write 後依流程取回結果;Configuration Read 要核對驗證資訊,不能只看到有資料就認定操作成功。 |
來源:NVME-BASE-2.4, Rev. 2.4, §5.2.30.1.39, Figure 542, 文件頁 513-514, PDF 頁 539-540
來源:NVME-BASE-2.4, Rev. 2.4, §8.1.3.3.1, Figure 680, 文件頁 589, PDF 頁 615
來源:NVME-BASE-2.4, Rev. 2.4, §8.1.3.3.1, Figure 681, 文件頁 590, PDF 頁 616
來源:NVME-BASE-2.4, Rev. 2.4, §8.1.3.3.2, Figure 682, 文件頁 591, PDF 頁 617
來源:NVME-BASE-2.4, Rev. 2.4, §8.1.3.3.2, Figure 683, 文件頁 591, PDF 頁 617
來源:NVME-BASE-2.4, Rev. 2.4, §8.1.3.3.3, Figure 684, 文件頁 593, PDF 頁 619
來源:NVME-BASE-2.4, Rev. 2.4, §8.1.24, Figure 756, 文件頁 691-692, PDF 頁 717-718
來源:NVME-BASE-2.4, Rev. 2.4, §8.1.24, Figure 757, 文件頁 692-693, PDF 頁 718-719
來源:NVME-BASE-2.4, Rev. 2.4, §8.1.24, Figure 758, 文件頁 693, PDF 頁 719
來源:NVME-BASE-2.4, Rev. 2.4, §8.1.24, Figure 760, 文件頁 694, PDF 頁 720
來源:NVME-BASE-2.4, Rev. 2.4, §8.1.24.2.1, Figure 761, 文件頁 695-696, PDF 頁 721-722
來源:NVME-BASE-2.4, Rev. 2.4, §8.1.24.2.2, Figure 762, 文件頁 696, PDF 頁 722
來源:NVME-BASE-2.4, Rev. 2.4, §8.1.24.3, Figure 765, 文件頁 700, PDF 頁 726
來源:NVME-BASE-2.4, Rev. 2.4, §8.1.24.4, Figure 766, 文件頁 701, PDF 頁 727
Base542-1Boot Partition Write Protection Config 分別設定兩個分割區的保護狀態。
來源:NVME-BASE-2.4, Rev. 2.4, §5.2.30.1.39, Figure 542, 文件頁 513-514, PDF 頁 539-540
Base542-2Partition 0 鎖定而 Partition 1 未鎖定是可分別描述的配置;不能只用一個「Boot 已鎖」句子忽略目標分割區。
Base680-1Set Features 保護狀態圖用狀態與轉移說明何時能解除鎖定。
來源:NVME-BASE-2.4, Rev. 2.4, §8.1.3.3.1, Figure 680, 文件頁 589, PDF 頁 615
Base680-2Write Locked 與 Write Locked Until Power Cycle 不能同樣用一般解鎖要求處理;先辨識目前狀態,再沿允許箭頭走。
Base681-1Set Features 保護狀態定義補上 reset 與斷電的影響。
來源:NVME-BASE-2.4, Rev. 2.4, §8.1.3.3.1, Figure 681, 文件頁 590, PDF 頁 616
Base681-2比較 Controller Level Reset 與 power cycle 後的鎖定狀態,不能只說「重開機會解鎖」而不交代是哪一種事件。
Base682-1RPMB 保護狀態圖另外描述認證設定的啟用與鎖定。
來源:NVME-BASE-2.4, Rev. 2.4, §8.1.3.3.2, Figure 682, 文件頁 591, PDF 頁 617
Base682-2RPMB protection 尚未啟用與已啟用但未鎖定,是不同狀態;先分清管理方式,再談是否允許寫入。
Base683-1RPMB 保護狀態定義說明其保存及控制方式。
來源:NVME-BASE-2.4, Rev. 2.4, §8.1.3.3.2, Figure 683, 文件頁 591, PDF 頁 617
Base683-2與 Figure 681 並排比較時,看相同 reset 是否保留同一種狀態,不因兩張表都有 Locked 就當成完全等效。
Base684-1整體 Boot 保護模型說明 Set Features 與 RPMB 狀態如何共同決定結果。
來源:NVME-BASE-2.4, Rev. 2.4, §8.1.3.3.3, Figure 684, 文件頁 593, PDF 頁 619
Base684-2兩種來源的狀態不同時,先按圖判斷目前由哪一套控制關係生效,不能直接把兩個數值取較大者當最終狀態。
03.08.這裡只使用 Firmware Download/Commit 與 Boot 更新有關的分支。下載的來源記憶體、完整映像中的位置、目標分割區與啟用選擇是不同座標。
| 一起判讀的欄位或標示 | 如何共同決定操作或結果 | 帶入情境後怎麼讀 |
|---|---|---|
| DPTR/NUMD/OFST | 資料指標指本次主機 buffer;NUMD 是傳輸 Dword 數減 1;OFST 是完整映像中的 Dword 位移。 | 傳 4096 bytes 用 NUMD=1023,接續下一段的 OFST 增加 1024。 |
| CA=110b/BPID | 將下載內容替換指定 Boot Partition 的內容,仍需滿足寫入保護、映像與下載順序等要求。 | BPID=1 選 BP1;若它仍受寫入保護,不能因 Download 成功就推論 BP1 已被改寫。 |
| CA=111b/BPID/ABPID | 選 active Boot Partition 是另一個 Commit 動作,與替換內容分開。 | 先替換 BP1 再選它為 active;讀回 ABPID 確认啟用選擇,與讀回映像核對內容是不同觀察。 |
| MUD/命令專屬狀態 | 完成資訊需按動作與能力判讀;Boot Partition Write Prohibited、Invalid Firmware Image 與下載 Overlapping Range 分別針對不同條件。 | 同樣未完成預期更新,可能是分割區保護、映像驗證或傳輸範圍問題,不能全歸為「映像壞掉」。 |
來源:NVME-BASE-2.4, Rev. 2.4, §5.2.9, Figure 187, 文件頁 203, PDF 頁 229
來源:NVME-BASE-2.4, Rev. 2.4, §5.2.9.1, Figure 188, 文件頁 204, PDF 頁 230
來源:NVME-BASE-2.4, Rev. 2.4, §5.2.9.1, Figure 189, 文件頁 204-205, PDF 頁 230-231
來源:NVME-BASE-2.4, Rev. 2.4, §5.2.10, Figure 190, 文件頁 205, PDF 頁 231
來源:NVME-BASE-2.4, Rev. 2.4, §5.2.10, Figure 191, 文件頁 205, PDF 頁 231
來源:NVME-BASE-2.4, Rev. 2.4, §5.2.10, Figure 192, 文件頁 206, PDF 頁 232
來源:NVME-BASE-2.4, Rev. 2.4, §5.2.10, Figure 193, 文件頁 206, PDF 頁 232
Base187-1Firmware Commit 的 CA 選動作,FS 或 BPID 指相關目標。
來源:NVME-BASE-2.4, Rev. 2.4, §5.2.9, Figure 187, 文件頁 203, PDF 頁 229
Base187-2更新 Boot Partition 時先按 CA 選替換或啟用相關動作,再看 BPID;不要把一般 firmware slot 的 FS 當成 boot partition 編號。
Base756-1RPMB Device Configuration Block 保存 Boot 保護的設定資訊。
來源:NVME-BASE-2.4, Rev. 2.4, §8.1.24, Figure 756, 文件頁 691-692, PDF 頁 717-718
Base756-2讀到 protection enable 與 protection state 時要分開理解:啟用管理機制與把特定 partition 鎖定不是同一欄位。
Base765-1Authenticated Configuration Write 把計數器、寫入與結果確認串成流程。
來源:NVME-BASE-2.4, Rev. 2.4, §8.1.24.3, Figure 765, 文件頁 700, PDF 頁 726
Base765-2主機準備認證寫入後,仍按流程取得 operation result;不能把資料已送達當成保護設定已更新。
Base766-1Authenticated Configuration Read 以本次 nonce 與認證資訊確認讀取結果。
來源:NVME-BASE-2.4, Rev. 2.4, §8.1.24.4, Figure 766, 文件頁 701, PDF 頁 727
Base766-2讀到 Boot protection 狀態後,先確認回覆屬於這次要求,再用它判斷是否允許更新分割區。
Base188-1Firmware Commit 回覆中的旗標描述特定更新偵測結果。
來源:NVME-BASE-2.4, Rev. 2.4, §5.2.9.1, Figure 188, 文件頁 204, PDF 頁 230
Base188-2命令完成後,仍應逐個解讀 MUD 等回覆位元;不能用一個非零 DW0 直接推論「韌體版本已切換」。
Base189-1Firmware Commit 狀態區分映像、slot 與需要重設等條件。
來源:NVME-BASE-2.4, Rev. 2.4, §5.2.9.1, Figure 189, 文件頁 204-205, PDF 頁 230-231
Base189-2回覆需要 reset 的啟用條件,與 Invalid Firmware Image 是不同結果;前者需要安排流程,後者先檢查映像。
Base190-1Firmware Image Download 的 DPTR 指向此次傳入的映像區段。
來源:NVME-BASE-2.4, Rev. 2.4, §5.2.10, Figure 190, 文件頁 205, PDF 頁 231
Base190-2分兩次傳映像時,第二次 DPTR 可以指另一段主機 buffer;映像內的目的偏移另由 OFST 指定。
Base191-1Firmware Download 的 NUMD 以 Dwords 且從零起算表示長度。
來源:NVME-BASE-2.4, Rev. 2.4, §5.2.10, Figure 191, 文件頁 205, PDF 頁 231
Base191-2傳入 4096 bytes 時共有 1024 Dwords,NUMD=1023;若直接填 4096,單位及編碼都會錯。
Base192-1Firmware Download 的 OFST 指定映像中的 Dword 偏移。
來源:NVME-BASE-2.4, Rev. 2.4, §5.2.10, Figure 192, 文件頁 206, PDF 頁 232
Base192-2接續前面 4096 bytes 的區段,OFST=1024;它不是主機記憶體位址,也不是接續區段的 byte 長度。
Base193-1Overlapping Range 狀態指出傳入的映像區段發生不允許的重疊。
來源:NVME-BASE-2.4, Rev. 2.4, §5.2.10, Figure 193, 文件頁 206, PDF 頁 232
Base193-2第一段覆蓋前 4096 bytes,第二段卻又從 byte 2048 開始時,需要按下載規則檢查重疊,不能只核對兩個 buffer 各自長度。
03.09.FID 指功能,Get 的 SEL 指要查哪一種資訊,Set 的 SV 指是否要求保存。支援能力回覆的 bits 與功能值是不同結構。
| 一起判讀的欄位或標示 | 如何共同決定操作或結果 | 帶入情境後怎麼讀 |
|---|---|---|
| FID/UIDX/DPTR | FID 選功能,必要時 UIDX 協助選 UUID,DPTR 傳輸該功能所需的資料結構。 | 不是每個 Feature 都只靠 CQE DW0 回覆;有 buffer 的功能還需讀其資料格式。 |
| SEL=000b/001b/010b/011b | 分別要求目前值、預設值、保存值、支援能力。 | 要確認裝置現在採用什麼值,應讀目前值;保存值不等於正在使用的值。 |
| CHANG/NSSPEC/SVBL → SV | 能力分別指出可變更、是否與 namespace 有關、可否保存;SV 是主機的保存要求。 | SVBL=0 時提出保存要求可能被拒絕;Set 成功也不能一律推論跨 power cycle 保留。 |
來源:NVME-BASE-2.4, Rev. 2.4, §5.2.12, Figure 198, 文件頁 209-210, PDF 頁 235-236
來源:NVME-BASE-2.4, Rev. 2.4, §5.2.12, Figure 199, 文件頁 210, PDF 頁 236
來源:NVME-BASE-2.4, Rev. 2.4, §5.2.30, Figure 464, 文件頁 457, PDF 頁 483
來源:NVME-BASE-2.4, Rev. 2.4, §5.2.30, Figure 465, 文件頁 457, PDF 頁 483
來源:NVME-BASE-2.4, Rev. 2.4, §5.2.30, Figure 466, 文件頁 457-459, PDF 頁 483-485
Base198-1Get Features 的 FID 選功能,SEL 選要查目前值、預設值等資訊。
來源:NVME-BASE-2.4, Rev. 2.4, §5.2.12, Figure 198, 文件頁 209-210, PDF 頁 235-236
Base198-2查 current 與查 saved 可以回不同內容;兩次 FID 相同不表示查詢完全相同。
Base199-1Get Features 的 UIDX 在使用 UUID 選擇時提供索引。
來源:NVME-BASE-2.4, Rev. 2.4, §5.2.12, Figure 199, 文件頁 210, PDF 頁 236
Base199-2UIDX 是 UUID List 中的位置,不是把 128-bit UUID 直接塞進命令欄位;使用前先確認該索引對應誰。
Base338-1Identify Controller 先告知能力與限制,主機再決定可使用的操作。
來源:NVME-BASE-2.4, Rev. 2.4, §5.2.14.2.1, Figure 338, 文件頁 340-382, PDF 頁 366-408
Base338-2規格列出某選用命令時,先查相應支援欄位再發出要求;「命令有定義」與「這台控制器支援」是不同證據。
Base464-1Set Features 的 FID 選功能,SV 表示是否要求保存。
來源:NVME-BASE-2.4, Rev. 2.4, §5.2.30, Figure 464, 文件頁 457, PDF 頁 483
Base464-2主機要求 SV=1 前先確認 Feature 可保存;設定成功與重設後仍保留,是需要分別核對的行為。
Base465-1Set Features 的 UIDX 用於相應 UUID 關聯的選擇。
來源:NVME-BASE-2.4, Rev. 2.4, §5.2.30, Figure 465, 文件頁 457, PDF 頁 483
Base465-2若使用 UUID List 的某一項,先確認索引對應與適用規則;UIDX 不是 Set Features 的新 FID。
Base466-1Set Features 的識別碼清單指引每種功能的專屬欄位。
來源:NVME-BASE-2.4, Rev. 2.4, §5.2.30, Figure 466, 文件頁 457-459, PDF 頁 483-485
Base466-2FID 02h 的 CDW11 是 Power Management,FID 0Ch 的相同位置是 APST;欄位位置相同不表示內容相同。
Base757-1RPMB Message Type 分辨不同要求與回覆。
來源:NVME-BASE-2.4, Rev. 2.4, §8.1.24, Figure 757, 文件頁 692-693, PDF 頁 718-719
Base757-2Configuration Block Read 的 request 與 response 使用各自類型值;不能只因都含配置資料就當成相同訊息。
Base758-1RPMB Operation Result 區分認證、計數器等操作結果。
來源:NVME-BASE-2.4, Rev. 2.4, §8.1.24, Figure 758, 文件頁 693, PDF 頁 719
Base758-2Authentication Failure 表示認證不成立,Counter Failure 則與計數器條件有關;兩者不是不同名稱的同一種失敗。
Base760-1RPMB Data Frame 把訊息類型、nonce、計數器與認證資料分區放置。
來源:NVME-BASE-2.4, Rev. 2.4, §8.1.24, Figure 760, 文件頁 694, PDF 頁 720
Base760-2讀取回覆時先辨識 Message Type,再檢查該操作需要的 nonce/認證資訊;不能把所有欄位在所有操作中都視為有效。
Base761-1RPMB Key 流程描述認證金鑰設定與結果取得的次序。
來源:NVME-BASE-2.4, Rev. 2.4, §8.1.24.2.1, Figure 761, 文件頁 695-696, PDF 頁 721-722
Base761-2先有金鑰設定要求,再讀取相應結果;送出資料的傳輸完成不等於金鑰設定成功。
Base762-1Read Write Counter 流程用 nonce 與認證回覆取得目前計數器。
來源:NVME-BASE-2.4, Rev. 2.4, §8.1.24.2.2, Figure 762, 文件頁 696, PDF 頁 722
Base762-2主機用本次 nonce 對照回覆,確認回覆對應這次要求;僅看到一個較大的 counter 不足以證明回覆新鮮。
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
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