Thao tác với danh sách biểu tượng

Để giảm bề mặt của các ký hiệu và loại cần được duy trì sao cho ổn định, nhân GKI có khả năng giới hạn các biểu tượng được xuất chỉ cho những biểu tượng mà các 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ó một danh sách ký hiệu được sử dụng để cho phép hạt nhân GKI xuất chúng. Ví dụ: biểu tượng được các mô-đun sử dụng cho Mực ống được lưu trữ inch android/abi_gki_aarch64_virtual_device.

Thêm một mục tiêu để tạo danh sách biểu tượng

Danh sách biểu tượng do mục tiêu kernel_abi tạo. Thêm mục tiêu này vào thiết bị BUILD.bazel 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ể sử dụng các tuỳ chọn sau:

  • kernel_modules

    Danh sách mục tiêu cho các mô-đun ngoài cây. Mô-đun trong cây không nên được đưa vào đây. Tham khảo Chuẩn bị các mô-đun trong cây để trích xuất biểu tượng.

  • kmi_symbol_list_add_only

    Tuỳ chọn này ngăn việc xoá các biểu tượng không dùng đến. Việc xoá biểu tượng chỉ được phép tại các thời điểm cụ thể trong KMI ổn định và không được phép sau khi KMI được bị treo.

    Điều này cũng hữu ích khi bạn sử dụng cùng một danh sách biểu tượng cho nhiều thiết bị. Bằng cách này, thao tác này sẽ không xoá các biểu tượng mà thiết bị A nhưng không phải thiết bị B sử dụng.

  • module_grouping

    Nếu là True hoặc không được chỉ định, thì danh sách biểu tượng sẽ nhóm các biểu tượng dựa trên mô-đun nhân tham chiếu đến biểu tượng. Nếu không, danh sách biểu tượng sẽ là một danh sách được sắp xếp các ký hiệu mà tất cả mô-đun nhân sử dụng.

Xem common-modules/virtual-device/BUILD.bazel 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,
)

Xem thêm tài liệu tham khảo trên mục tiêu kernel_abi trong Kleaf.

Chuẩn bị mô-đun trong cây để trích xuất biểu tượng

Để chuẩn bị các mô-đun trong cây cho việc trích xuất biểu tượng, hãy liệt kê trong cây của nhà cung cấp cụ thể các mô-đun trong thuộc tính module_outs của mục tiêu kernel_build. Xem _VIRT_COMMON_MODULESmức sử dụng của dịch vụ để xem 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 để unsign, nếu không thì danh sách biểu tượng có thể bị trống. Để thực hiện việc này, hãy thêm dòng này vào nhân của bạn mảnh cấu hình:

# CONFIG_MODULE_SIG_ALL is not set

Xem common-modules/virtual-device/virtual_device_core.fragment ví dụ:

Thêm một danh sách biểu tượng thiết bị vào bản dựng nhân của 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 thiết bị BUILD.bazel. Tên của danh sách biểu tượng phải ở định dạng //common:android/abi_gki_<arch>_<device>. Xem common-modules/virtual-device/BUILD.bazel, ví dụ:

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

Tạo và gửi danh sách biểu tượng ban đầu

Tạo một danh sách biểu tượng trống tại common/android/abi_gki_<arch>_<device>. Đối với ví dụ ở trên lệnh sẽ là:

touch common/android/abi_gki_aarch64_virtual_device

Thêm tệp này vào additional_kmi_symbol_lists của bản dựng hạt nhân GKI cơ sở. Cho Ví dụ: //common:android/abi_gki_aarch64_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 biểu tượng thiết bị để điền danh sách biểu tượng mới và gửi tệp đó đến kho lưu trữ Hạt nhân phổ biến của Android.

Cập nhật danh sách biểu tượng thiết bị

Tất cả ký hiệu hạt nhân được các mô-đun trong module_outs của kernel_build sử dụng và kernel_modules/kernel_abi phải được đưa vào danh sách biểu tượng. Điều này có thể bằng cách chạy mục tiêu kernel_abi bằng _update_symbol_list hậu tố. Ví dụ: lệnh sau đây cập nhật danh sách biểu tượng 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 biểu tượng đến ACK

Gửi bản vá với thay đổi danh sách biểu tượng đến Android phổ biến Hạt nhân gerrit để biến các biểu tượng mới thành một phần của KMI.

Thông báo cam kết phải bao gồm một danh sách các biểu tượng đã thêm hoặc bị xoá. Bạn có thể viết danh sách này theo cách thủ công để cập nhật danh sách biểu tượng nhỏ hoặc sử dụng Sau đó là $DIST_DIR/abi.report.short báo cáo cập nhật ABI tham chiếu đại diện.

Trong khi cập nhật ABI tham chiếu đại diện trước khi gửi cập nhật danh sách biểu tượng là không cần thiết, việc này có thể loại bỏ trước khi gửi và làm cho thay đổi sẵn sàng để gửi nhanh hơn. Trong mọi trường hợp, được kiểm tra và cập nhật nếu cần trong quá trình trước khi gửi.

Các phiên bản cũ (Android 12 trở xuống)

Sử 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 có 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

    Bạn phải đặt và trỏ vào danh sách biểu tượng KMI để cập nhật.

Sau khi cập nhật danh sách biểu tượng 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):