更新套件是包含檔案和系統更新規則的套件。
系統更新
系統更新檢查工具會查看所更新系統映像檔的分子根 套件與其執行中系統的 Merkle 根層級比較。它還會檢查 更新套件的 Merkle 根層級,並與系統版本 更新檢查工具上次使用時間。如果兩者不同,表示系統並非由系統更新工具更新。
系統更新成功後,裝置就會重新啟動。
系統更新檢查器會定期使用套件解析器擷取更新套件,並查看套件是否有異動。如果更新套件不同 系統會觸發套件更新
系統更新器的設計可讓程序隨時中斷,且不會讓系統處於無法啟動或損毀的狀態。
首先,系統更新程式會讀取 update_mode
檔案,判斷要執行哪些作業。接著,主面板檔案會讀取並驗證設定是否有誤。
接著,更新套件會擷取要提供的套件。最後,更新套件會寫入
,並確保將 vbmeta
寫入核心映像檔之後。
更新套件的內容
更新套件 fuchsia-pkg://fuchsia.com/update
的結構包含以下內容:
/board
主面板名稱。Updater 會驗證內容,只在這個值與值相符時才執行更新作業 之前的白板名稱這項檢查可避免裝置意外嘗試更新至不支援的架構。舉例來說,嘗試將x64
目標更新為arm64
版本會失敗。/bootloader
啟動載入器韌體的映像檔。已淘汰:請改用firmware
。/epoch.json
系統無法透過 OTA 降級的期間。詳情請見 RFC-0071。例如:{ "version": "1", "epoch": 5 }
/firmware[_<type>]
韌體映像檔。例如:firmware
、firmware_bl2
、firmware_full
。每部裝置 支援自訂韌體類型組合,且系統會忽略不支援的類型。這名國家/地區 兩個主要用途- 指定多個韌體;例如,具有多個引導程式階段的裝置。
- 提供簡單安全的方式,讓您轉換至新韌體類型;只要新增後端 paver 邏輯,然後將新檔案放入更新套件即可。
/packages.json
屬於目標 OS 映像檔基本套件集的梅克勒固定套件網址,以 JSON 格式列出。更新套件會查看/packages.json
來判斷內容 內容 (以及順序) 需要更新。 例如:{ “version”: “1”, “content”: [ "fuchsia-pkg://fuchsia.com/component_index/0?hash=40da91deffd7531391dd067ed89a19703a73d4fdf19fe72651ff30e414c4ef0a", "fuchsia-pkg://fuchsia.com/system_image/0?hash=c391b60a35f680b1cf99107309ded12a8219aedb4d296b7fa8a9c5e95ade5e85" ] }
/version
格式與/config/build-info/version
檔案相同。/zbi[.signed]
核心映像檔。如果update-mode
為force-recovery
,則不得使用。如果update-mode
為normal
,則必須提供zbi
或zbi.signed
。/recovery
復原映像檔/meta/contents
和/meta/package
中繼資料檔案會出現在所有套件中。/update_mode.json
選用。如果檔案不存在,則update-mode
為normal
。另一個選項是force-recovery
,可用來寫入復原映像檔,並重新啟動至該映像檔。任何其他update-mode
的值無效。 例如:{ "version": "1", "content": { "mode" : "force-recovery" } }