根據預設,大多數 Android 裝置都會隨附已鎖定的系統啟動載入程式,這表示使用者無法刷新系統啟動載入程式或裝置分區。如有需要,您 (以及已啟用開發人員選項的裝置使用者) 可以解鎖啟動載入程式,以便刷新新映像檔。
進入系統啟動載入程式
如要發出 fastboot
指令,您必須處於系統啟動載入程式模式。其中一個方法是傳送 ADB 指令 adb reboot bootloader
。部分手機也可讓您在啟動裝置時按下按鍵組合 (通常會調低音量),重新啟動系統啟動載入程式。
解鎖系統啟動載入程式
進入啟動載入程式模式後,請在裝置上執行 fastboot flashing unlock
指令,以解鎖啟動載入程式並啟用可重新刷新的分區。設定完成後,解鎖模式會在重新啟動後保留。
除非 get_unlock_ability
設為 1
,否則裝置應拒絕 fastboot flashing unlock
指令。如果設為 0
,使用者需要啟動至主畫面,開啟「設定」>「系統」>「開發人員選項」選單,然後啟用「OEM 解鎖」選項 (將 get_unlock_ability
設為 1
)。設定後,這個模式會在重新啟動和恢復原廠設定後持續存在。
傳送 fastboot flashing unlock
指令時,裝置應會提示使用者,警告他們可能會遇到非官方圖像的問題。使用者確認警告後,裝置應執行恢復原廠設定,以防未經授權的資料存取。即使系統啟動載入程式無法正確重新格式化裝置,也應重設裝置。只有在重設後才能設定持續標記,以便重新刷新裝置。
所有未覆寫的 RAM 都應在 fastboot flashing unlock
程序中重設。這項措施可防止從上次啟動時讀取剩餘 RAM 內容的攻擊。同樣地,未鎖定的裝置應在每次啟動時清除 RAM (除非這會造成無法接受的延遲),但應保留用於核心 ramoops
的區域。
鎖定系統啟動載入程式
如要鎖定系統啟動載入程式並重設裝置,請在裝置上執行 fastboot flashing lock
指令。零售版裝置應處於鎖定狀態 (get_unlock_ability
會傳回 0
) 出貨,以確保攻擊者無法透過安裝新的系統或啟動映像檔來入侵裝置。
設定鎖定和解鎖屬性
您應根據裝置是否支援刷新解鎖,在建構時間設定 ro.oem_unlock_supported
屬性。
- 如果裝置支援閃燈解鎖功能,請將
ro.oem_unlock_supported
設為1
。 - 如果裝置不支援閃燈解鎖,請將
ro.oem_unlock_supported
設為0
。
如果裝置支援閃燈解鎖功能,則 Bootloader 應透過將核心指令列變數 androidboot.flash.locked
設為 1
(如果已鎖定) 或 0
(如果已解鎖),來指出鎖定狀態。這個變數必須在 bootconfig 中設定,而非 Android 12 的核心指令列中設定。
如果裝置支援 dm-verity,請使用 ro.boot.verifiedbootstate
將 ro.boot.flash.locked
的值設為 0
;如果驗證開機程序狀態為橘色,這麼做就能解鎖啟動載入程式。
保護關鍵區段
裝置應支援鎖定及解鎖關鍵區塊,關鍵區塊是指啟動裝置進入系統啟動載入程式時所需的任何內容。這類區段可能包括保險絲、感應器中樞的虛擬分區、第一階段的啟動載入程式等。如要鎖定關鍵區塊,您必須使用機制,防止在裝置上執行的程式碼 (核心、復原映像、OTA 程式碼等) 蓄意修改任何關鍵區塊。如果裝置處於鎖定重要狀態,OTA 應無法更新重要區段。
從鎖定狀態切換為解鎖狀態時,必須與裝置進行實體互動。這項互動與執行 fastboot flashing unlock
指令的效果類似,但使用者必須按下裝置上的實體按鈕。裝置不應允許在沒有實體互動情況下,以程式輔助方式從 lock critical
轉換為 unlock critical
,且裝置不應以 unlock critical
狀態出貨。