在 Android 12 中,bootconfig 功能取代了
與 Android 11 搭配使用的 androidboot.*
核心 cmdline 選項
下方。Bootconfig 功能是用來傳遞設定的機制
從建構和系統啟動載入程式到 Android 12 的詳細內容
這項功能可讓您分隔 Android 的設定參數
核心使用者空間移動較長的 androidboot.*
核心
參數新增至 bootconfig 檔案。 會在核心 cmdline 上建立空間,然後
供日後擴展時使用
核心和 Android 使用者空間都必須支援 bootconfig
。
- 支援此支援功能的第一個版本:Android 12
- 提供這項支援的第一個核心版本:12-5.4.xx 核心
為使用 12-5.10.xx 版本的新裝置實作開機設定功能 核心版本如果您要升級裝置,則不需要實作這個步驟。
範例和來源
查看本節的範例和原始碼時,請注意格式
bootconfig
程式碼的格式與
Android 11 以下版本使用的核心 cmdline。
不過,下列差異會影響您的使用:
- 參數必須以新行逸出序列
\n
分隔,而非 聊天室。
系統啟動載入程式範例
如需系統啟動載入程式範例,請參閱 Cuttlefish U-boot 參考系統啟動載入程式 。參考資料中列出兩個修訂版本。首次更新 開機標頭版本支援至最新版本。在本例中,第一個 將版本支援更新 (或升級) 到下一個 v4。第二個 執行兩項工作並示範如何使用 bootconfig 處理功能,並示範如何新增參數 的廣告:
建構範例
針對顯示 mkbootimg
變更以建構
含有廠商啟動標頭 v4 的 vendor_boot.img
,請參閱 mkbootimg changes for
bootconfig
。
請參閱 Cuttlefish 變更以執行下列操作:
- 使用 (或升級至) 供應商啟動標頭版本 v4。
- 將bootconfig 新增至核心 cmdline,並將所選參數移至 bootconfig。
實作
合作夥伴必須對其系統啟動載入程式新增支援,並移動建構時間
androidboot.*
參數從核心 cmdline 到 bootconfig
檔案。採行這項變更的最佳方式就是逐步完成。請參閱
漸進式導入和驗證一節
參閱相關文章,瞭解如何完成漸進式程序。
如果您變更了搜尋「androidboot.*
」的 /proc/cmdline 檔案
參數,請改為指向 /proc/bootconfig
檔案。ro.boot.*
屬性以新的 bootconfig
值設定,因此您無需設定
對使用這些屬性的程式碼進行變更
版本變更
首先,將 Boot 標頭版本更新為第 4 版:
- BOARD_BOOT_HEADER_VERSION := 3
+ BOARD_BOOT_HEADER_VERSION := 4
新增 bootconfig
核心 cmdline 參數。如此一來,核心就會
啟動 Bootconfig 設定
BOARD_KERNEL_CMDLINE += bootconfig
Bootconfig 參數是透過
BOARD_BOOTCONFIG
變數,就像從核心 cmdline 建立
BOARD\_KERNEL\_CMDLINE
。
所有 androidboot.*
參數皆可依原樣移動,如下所示:
- BOARD_KERNEL_CMDLINE += androidboot..selinux=enforcing
+ BOARD_BOOTCONFIG += androidboot..selinux=enforcing
系統啟動載入程式變更
系統啟動載入程式會先設定 initramfs
,然後再跳至核心。核心
啟動設定
接著,前往「Bootconfig」部分
預計有預告片的 initramfs,
。
系統啟動載入程式會從供應商取得 vendor_boot.img
版面配置資訊
開機映像檔標頭。
圖 1. Android 12 開機設定記憶體配置
系統啟動載入程式會在記憶體中建立 bootconfig 區段。Bootconfig 區段 包含下列項目的記憶體配置:
- 參數
- 4 B 尺寸:
parameters size
- 4 B 尺寸:
parameters checksum
- 12 B 開機魔法字串 (
#BOOTCONFIG\n
)
參數來自兩個來源:建構期間已知的參數;以及 但無法在建構期間得知哪些參數。必須加入未知的參數。
建構時間已知的參數會封裝至 vendor_boot
的結尾
找到映像檔儲存部分的大小 (以位元組為單位)
的值vendor_bootconfig_size
。
建構期間未知的參數只有在 系統啟動載入程式。這些參數必須新增至 bootconfig 參數部分的結尾 才會套用 bootconfig 預告片。
如果您在套用 bootconfig 預告片後需要新增參數, 覆寫預告片並重新套用
漸進式導入和驗證
按照 本節保留核心 cmdline 參數時, 新增 bootconfig 參數。
以下是使用驗證漸進式實作的步驟:
- 發布系統啟動載入程式和建構變更,然後執行以下操作:
- 使用
BOARD_BOOTCONFIG
變數新增 bootconfig 參數。 - 請維持核心 cmdline 參數的格式,確保裝置能夠正常顯示 就能繼續正確啟動如此一來 更加容易。
- 使用
- 檢查
/proc/bootconfig
的內容,驗證作業。驗證 會在裝置啟動後看到新增的參數 - 將
androidboot.*
參數從核心 cmdline 移至 啟動設定檔,使用BOARD_BOOTCONFIG
變數和系統啟動載入程式。 - 確認每個參數都存在於
/proc/bootconfig
中,而且 這類使用者並未在/proc/cmdline
中使用。如果可以驗證這個狀態,您的導入作業 成功。
OTA 升級和降級注意事項
您管理 OTA 升級與降級至不同版本的 Android 或其他核心版本都應特別留意。
Android 12 是第一個包含 bootconfig 的版本 聯絡。如要降級至之前的任何版本,核心 cmdline 參數 ,而非 bootconfig。
核心 12-5.4 以上版本支援 Bootconfig。如果降級 至該版本之前的任何版本(包括 11 到 5.4),核心 cmdline 參數必須
從 Android 11 以下版本升級至 Android 12 以上版本,即可繼續使用 核心 cmdline 參數。升級核心版本也是如此。
疑難排解
執行 verify 步驟時,如果畫面沒有顯示預期的參數,
在 /proc/bootconfig
中,查看 logcat
中的核心記錄。一律會有記錄
項目。
記錄輸出範例
$ adb logcat | grep bootconfig
02-24 17:00:07.610 0 0 I Load bootconfig: 128 bytes 9 nodes
如果系統傳回錯誤記錄,表示載入 bootconfig。如要查看其他錯誤類型,請檢視 init/main.c。