Để giảm bề mặt của các ký hiệu và loại cần được duy trì ổn định, hạt nhân GKI có khả năng giới hạn các ký hiệu được xuất 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 biểu tượng đã sử dụng để cho phép hạt nhân GKI xuất các mô-đun đó. Ví dụ: các ký hiệu mà các mô-đun sử dụng cho Cuttlefish được lưu trữ trong android/abi_gki_aarch64_virtual_device
.
Thêm mục tiêu để tạo danh sách biểu tượng
Danh sách biểu tượng đượ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ể sử dụng các tuỳ chọn sau:
kernel_modules
Danh sách các mục tiêu cho các mô-đun ngoài cây. Không nên đưa các mô-đun trong cây vào đây. Hãy tham khảo phần 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. Chúng tôi chỉ cho phép xoá biểu tượng tại các thời điểm cụ thể trong quá trình ổn định KMI và không được phép sau khi KMI bị đóng băng.
Điều này cũng hữu ích khi bạn sử dụng cùng một danh sách ký hiệu cho nhiều thiết bị khác nhau. 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 chưa đượ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 là một danh sách biểu tượng đã sắp xếp mà tất cả các mô-đun hạt nhân sử dụng.
Xem ví dụ về 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,
)
Ngoài ra, hãy xem tài liệu tham khảo về mục tiêu kernel_abi
trong Kleaf.
Chuẩn bị các mô-đun trong cây để trích xuất biểu tượng
Để chuẩn bị các mô-đun trong cây cho quá trình trích xuất biểu tượng, 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
. Hãy xem _VIRT_COMMON_MODULES
và cách sử dụng để 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 thành chưa ký, nếu không danh sách biểu tượng có thể trống. Để làm như vậy, hãy thêm dòng này vào các mảnh cấu hình nhân:
# CONFIG_MODULE_SIG_ALL is not set
Ví dụ: xem common-modules/virtual-device/virtual_device_core.fragment.
Thêm danh sách biểu tượng thiết bị vào bản dựng hạt nhân 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 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 ký hiệu 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ở. 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 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ữ Kernel Common của Android.
Cập nhật danh sách biểu tượng thiết bị
Tất cả biểu tượng nhân lõi mà các mô-đun trong module_outs
của kernel_build
và kernel_modules
của kernel_abi
sử dụng phải được đưa vào danh sách biểu tượng. 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 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 một bản vá có thay đổi về danh sách biểu tượng đến Gerrit của Hạt nhân Android phổ biến để đưa các biểu tượng mới vào 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ể 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 báo cáo $DIST_DIR/abi.report.short
sau khi cập nhật nội dung đại diện ABI tham chiếu.
Mặc dù không bắt buộc phải cập nhật nội dung đại diện ABI tham chiếu trước khi gửi bản cập nhật danh sách biểu tượng, nhưng việc này có thể giúp loại bỏ các bước trước khi gửi và giúp bạn gửi thay đổi nhanh hơn. Trong mọi trường hợp, chính sách này vẫn được kiểm tra và cập nhật (nếu cần) trong quá trình gửi 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 đưa vàobuild.config.aarch64
.KMI_SYMBOL_LIST
Phải được đặt và trỏ đến danh sách ký hiệu 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
):
Sao chép danh sách biểu tượng đã cập nhật vào
common/android/abi_gki_aarch64_<device>
.Kiểm tra để đảm bảo
android/abi_gki_aarch64_<device>
có trongADDITIONAL_KMI_SYMBOL_LISTS
trongcommon/build.config.gki.aarch64
.