Làm việc với danh sách biểu tượng

Để giảm số lượng ký hiệu và loại cần duy trì ở trạng thái ổn định, kernel GKI có các tính năng để giới hạn các ký hiệu được xuất thành chỉ những ký hiệu mà mô-đun cần. Đối với các mô-đun được biên dịch bên ngoài, bạn cần có danh sách các ký hiệu đã dùng để cho phép kernel GKI xuất các ký hiệu đó. Ví dụ: các ký hiệu mà mô-đun dùng cho Cuttlefish được lưu trữ trong gki/aarch64/symbols/virtual_device.

Thêm mục tiêu để tạo danh sách ký hiệu

Danh sách ký hiệu được tạo bởi mục tiêu kernel_abi. Thêm mục tiêu này vào BUILD.bazel của thiết bị bằng các tuỳ chọn sau:

  • name

    Phải ở định dạng <kernel_build>_abi.

  • kernel_build

    Phải chứa tên của mục tiêu kernel_build của thiết bị.

Bạn cũng có thể dùng các tuỳ chọn sau:

Xem common-modules/virtual-device/BUILD.bazel để biết ví dụ:

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,
)

Ngoài ra, hãy xem tài liệu tham khảo về kernel_abi mục tiêu trong Kleaf.

Chuẩn bị mô-đun trong cây để trích xuất ký hiệu

Để chuẩn bị mô-đun trong cây để trích xuất ký hiệu, hãy liệt kê các mô-đun trong cây dành riêng cho nhà cung cấp trong thuộc tính module_outs của mục tiêu kernel_build. Xem _VIRT_COMMON_MODULEScách sử dụng thuộc tính này để biết ví dụ. Đừng đưa các mô-đun GKI vào danh sách này.

Định cấu hình các mô-đun này để không được , nếu không danh sách ký hiệu có thể trống. Để làm vậy, hãy thêm dòng này vào các đoạn cấu hình kernel:

# CONFIG_MODULE_SIG_ALL is not set

Xem common-modules/virtual-device/virtual_device_core.fragment để biết ví dụ.

Thêm danh sách ký hiệu thiết bị vào bản dựng kernel thiết bị

Thêm thuộc tính kmi_symbol_list vào mục tiêu kernel_build được xác định trong BUILD.bazel của thiết bị. Tên của danh sách ký hiệu phải ở định dạng của //common:gki/<arch>/symbols/<device>.

Ví dụ: xem common-modules/virtual-device/BUILD.bazel,

kernel_build(
    name = "virtual_device_aarch64",
    base_kernel = "//common:kernel_aarch64",
    kmi_symbol_list = "//common:gki/aarch64/symbols/virtual_device",
    ...
    module_outs = _VIRT_COMMON_MODULES + _VIRT_AARCH64_MODULES,
)

Tạo và gửi danh sách ký hiệu ban đầu

Tạo danh sách ký hiệu trống tại common/gki/<arch>/symbols/<device>. Đối với ví dụ ở trên, lệnh sẽ là:

touch common/gki/aarch64/symbols/virtual_device

Thêm tệp này vào additional_kmi_symbol_lists của bản dựng kernel GKI cơ sở. Ví dụ: //common:gki/aarch64/symbols/virtual_device được thêm vào nhóm tệp aarch64_additional_kmi_symbol_lists được khai báo trong common/BUILD.bazel.

Cập nhật danh sách ký hiệu thiết bị để điền danh sách ký hiệu mới và gửi danh sách đó đến kho lưu trữ Android Common Kernel.

Cập nhật danh sách ký hiệu thiết bị

Tất cả các ký hiệu kernel cốt lõi mà mô-đun dùng trong module_outs của kernel_buildkernel_modules của kernel_abi phải có trong danh sách ký hiệu. Bạn có thể thực hiện việc này bằng cách chạy mục tiêu kernel_abi với hậu tố _update_symbol_list. Ví dụ: lệnh sau đây sẽ cập nhật danh sách ký hiệu cho //common-modules/virtual-device:virtual_device_aarch64:

tools/bazel run //common-modules/virtual-device:virtual_device_aarch64_abi_update_symbol_list

Gửi thông tin cập nhật danh sách ký hiệu đến ACK

Gửi bản vá có thay đổi về danh sách ký hiệu đến Android Common Kernel gerrit để các ký hiệu mới trở thành một phần của KMI.

Thông báo cam kết phải bao gồm danh sách các ký hiệu đã thêm hoặc xoá. Bạn có thể tự viết danh sách này để cập nhật danh sách ký hiệu nhỏ hoặc dùng $DIST_DIR/abi_stgdiff/abi.report.short báo cáo sau khi cập nhật bản trình bày ABI tham chiếu.

Mặc dù bạn không bắt buộc phải cập nhật bản trình bày ABI tham chiếu trước khi gửi thông tin cập nhật danh sách ký hiệu, nhưng việc này có thể giúp bạn loại bỏ các bước kiểm tra trước khi gửi bổ sung và giúp bạn gửi thay đổi nhanh hơn. Trong mọi trường hợp, hệ thống sẽ kiểm tra và cập nhật nếu cần trong quá trình kiểm tra trước khi gửi.

Xử lý danh sách ký hiệu (Android 13)

Android 13 hỗ trợ cả Kleaf và tập lệnh bản dựng cũ, vì vậy, bạn có thể quản lý danh sách ký hiệu như mô tả trong các phần trước hoặc như mô tả trong phần sau.

Xử lý danh sách ký hiệu (Android 12 trở xuống)

Dùng công cụ build_abi.sh như sau:

BUILD_CONFIG=path/to/build.config.device build/build_abi.sh --update-symbol-list

Trong ví dụ này, build.config.device phải bao gồm các tuỳ chọn cấu hình sau:

  • vmlinux

    Phải nằm trong danh sách FILES. Bạn có thể thực hiện việc này bằng cách thêm build.config.aarch64.

  • KMI_SYMBOL_LIST

    Phải được đặt và trỏ đến danh sách ký hiệu KMI cần cập nhật.

Sau khi cập nhật danh sách ký hiệu thiết bị, bạn cũng cần phản ánh những thay đổi này trong bản dựng GKI (common/build.config.gki.aarch64):