如要減少需維護固定的符號和型別
GKI 核心具有限制,只讓匯出符號
各個模組所需的項目如果是外部編譯的模組,則需要有清單
以便 GKI 核心匯出這些符號。例如:
模組用途
儲存 Cuttlefish
英吋
android/abi_gki_aarch64_virtual_device
。
為產生符號清單產生作業新增目標
符號清單是由 kernel_abi
目標產生。將此目標新增至
裝置 BUILD.bazel
,包含以下選項:
name
格式應為
<kernel_build>_abi
。kernel_build
應包含裝置
kernel_build
目標的名稱。
您也可以使用下列選項:
kernel_modules
Out-of-tree 模組的目標清單。In-tree 模組不應 加入這項指標詳情請參閱 準備用於擷取符號的樹狀結構中模組。
kmi_symbol_list_add_only
這個選項可避免移除未使用的符號。只有在您移除符號時 在 KMI 期間的特定時間點允許 防震功能 而且只有在 KMI 設為 凍結。
如果您要將一份符號清單用於多個不同的 裝置。如此一來,系統就不會移除裝置 A 使用的符號,而不會移除裝置 B 使用的符號。
module_grouping
如果為
True
或未指定,則符號清單會根據 參照該符號的核心模組。否則,符號清單是 所有核心模組使用的符號清單。
詳情請見 common-modules/virtual-device/BUILD.bazel 例如:
kernel_abi(
name = "virtual_device_aarch64_abi",
kernel_build = ":virtual_device_aarch64",
kernel_modules = [
":virtual_device_aarch64_external_modules",
],
kmi_symbol_list_add_only = True,
)
另請參閱
參考說明文件
在 Kleaf 的 kernel_abi
目標上。
準備用於擷取符號的樹狀結構模組
如要準備用於擷取符號的樹狀結構模組,請在樹狀結構中列出供應商專屬的
位於 kernel_build
目標 module_outs
屬性中的模組。詳情請見
_VIRT_COMMON_MODULES
敬上
和
用途
例如,請勿將 GKI 模組納入這份清單。
將這些模組設為 unsigned、 否則符號清單可能會空白。如果要初始化,請在核心中新增這一行 設定片段:
# CONFIG_MODULE_SIG_ALL is not set
詳情請見 common-modules/virtual-device/virtual_device_core.fragment 例如
將裝置符號清單新增至裝置核心版本
將屬性 kmi_symbol_list
新增至在kernel_build
裝置:BUILD.bazel
。符號清單的名稱應採用
//common:android/abi_gki_<arch>_<device>
。詳情請見
common-modules/virtual-device/BUILD.bazel
例如:
kernel_build(
name = "virtual_device_aarch64",
base_kernel = "//common:kernel_aarch64",
kmi_symbol_list = "//common:android/abi_gki_aarch64_virtual_device",
...
module_outs = _VIRT_COMMON_MODULES + _VIRT_AARCH64_MODULES,
)
建立並提交初始符號清單
在 common/android/abi_gki_<arch>_<device>
建立空白的符號清單。對於
範例如下:
touch common/android/abi_gki_aarch64_virtual_device
將此檔案新增至基本 GKI 核心版本的 additional_kmi_symbol_lists
。適用對象
舉例來說,//common:android/abi_gki_aarch64_virtual_device
會新增至
aarch64_additional_kmi_symbol_lists
個檔案群組,在當中宣告
common/BUILD.bazel。
更新裝置符號清單,填入新的符號清單並 並傳送至 Android Common Kernel 存放區
更新裝置符號清單
module_outs
的 kernel_build
和 中模組使用的所有核心符號,
kernel_abi
的 kernel_modules
個應加入符號清單。這可以
方法是使用 _update_symbol_list
執行 kernel_abi
目標
尾碼。舉例來說,下列指令會更新
//common-modules/virtual-device:virtual_device_aarch64
:
tools/bazel run //common-modules/virtual-device:virtual_device_aarch64_abi_update_symbol_list
將符號清單更新傳送給 ACK
將符號清單變更的修補程式傳送至 Android 通用 核心 讓新符號成為 KMI 的一部分
修訂訊息應包含新增或移除的符號清單。你可以
您可以手動編寫這份清單,稍加更新或使用
$DIST_DIR/abi.report.short
報告晚於
更新參考 ABI
表示法
更新參考 ABI 時 兩者的向量表示法 不需要更新符號清單更新,可能因此不需要 預先提交步驟並做好變更準備,以加快提交速度。無論如何 視需要在預先提交期間檢查及更新。
較舊版本 (Android 12 以下版本)
請按照下列步驟使用 build_abi.sh
工具:
BUILD_CONFIG=path/to/build.config.device build/build_abi.sh --update-symbol-list
在這個範例中,build.config.device
必須包含以下設定選項:
vmlinux
必須列於
FILES
清單中。方法是加入build.config.aarch64
。KMI_SYMBOL_LIST
必須設定,並將其指向 KMI 符號清單,才能更新。
更新裝置符號清單後,您也需要
GKI 版本 (common/build.config.gki.aarch64
):
將更新後的符號清單複製到
common/android/abi_gki_aarch64_<device>
。確認
android/abi_gki_aarch64_<device>
已加到 「common/build.config.gki.aarch64
」的「ADDITIONAL_KMI_SYMBOL_LISTS
」。