使用符號清單

如要減少需維護固定的符號和型別 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_outskernel_build 和 中模組使用的所有核心符號, kernel_abikernel_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」。

  • 將符號清單更新傳送給 ACK