Để giảm bớt bề mặt của các ký hiệu và loại cần được duy trì ở mức ổn định, nhân GKI có chức 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 ký hiệu được sử dụng để cho phép nhân GKI xuất chúng. Ví dụ: các ký hiệu được mô-đun sử dụng cho Mực nang được lưu trữ trong android/abi_gki_aarch64_virtual_device
.
Thêm mục tiêu cho việc tạo danh sách ký hiệu
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 thiết bị BUILD.bazel
với các tùy chọn sau:
name
Phải ở định dạng
<kernel_build>_abi
.kernel_build
Nên 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 tùy chọn sau:
kernel_modules
Danh sách các mục tiêu cho các mô -đun ngoài cây . Các 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 ký hiệu .
kmi_symbol_list_add_only
Tùy chọn này ngăn chặn việc loại bỏ các ký hiệu không sử dụng. Chỉ được phép xóa biểu tượng tại những thời điểm cụ thể trong quá trình ổn định KMI và không được phép 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, nó sẽ không xóa các ký hiệu được sử dụng bởi thiết bị A chứ không phải thiết bị B.
module_grouping
Nếu
True
hoặc không được chỉ định thì danh sách ký hiệu sẽ nhóm các ký hiệu dựa trên mô-đun hạt nhân tham chiếu ký hiệu đó. Nếu không, danh sách ký hiệu sẽ chỉ là danh sách được sắp xếp các ký hiệu được sử dụng bởi tất cả các mô-đun hạt nhân.
Xem ví dụ 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,
)
Đồng thời 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 ký hiệu
Để chuẩn bị các mô-đun trong cây cho việc 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_MODULES
và cách sử dụng nó để biết ví dụ. Không bao gồm các mô-đun GKI trong danh sách này.
Định cấu hình các mô-đun này thành không dấu , nếu không danh sách ký hiệu có thể trống. Để làm như vậy, hãy thêm dòng này vào đoạn cấu hình kernel của bạn:
# CONFIG_MODULE_SIG_ALL is not set
Xem ví dụ về common-modules/virtual-device/virtual_device_core.fragment .
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 thiết bị BUILD.bazel
. Tên của danh sách ký hiệu phải có đị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 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ở. 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 vào danh sách ký hiệu mới và gửi nó đến kho lưu trữ Android Common Kernel.
Cập nhật danh sách biểu tượng thiết bị
Tất cả các ký hiệu hạt nhân lõi được sử dụng bởi các mô-đun trong module_outs
của kernel_build
và kernel_modules
của kernel_abi
phải được đưa vào danh sách ký hiệu. Điều này có thể được thực hiện 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 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 bản cập nhật danh sách biểu tượng tới ACK
Gửi bản vá có thay đổi danh sách biểu tượng tới Android Common Kernel 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 danh sách các ký hiệu được thêm hoặc xóa. Bạn có thể viết danh sách này theo cách thủ công để cập nhật danh sách ký hiệu nhỏ hoặc sử dụng báo cáo $DIST_DIR/abi.report.short
sau khi cập nhật biểu diễn ABI tham chiếu .
Mặc dù không cần phải cập nhật biểu diễn ABI tham chiếu trước khi gửi bản cập nhật danh sách ký hiệu nhưng nó có thể loại bỏ các bước gửi trước bổ sung và giúp thay đổi sẵn sàng gửi nhanh hơn. Trong mọi trường hợp, nó sẽ được kiểm tra và cập nhật nếu cần thiết trong quá trình gửi trước.
Phiên bản cũ hơn (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 tùy chọn cấu hình sau:
vmlinux
Phải là một phần của danh sách
FILES
. Điều này có thể được thực hiện bằng cách thêmbuild.config.aarch64
.KMI_SYMBOL_LIST
Phải được đặt và trỏ vào danh sách ký hiệu KMI để 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
):
Sao chép danh sách biểu tượng được cập nhật vào
common/android/abi_gki_aarch64_<device>
.Kiểm tra xem
android/abi_gki_aarch64_<device>
có được bao gồm trongADDITIONAL_KMI_SYMBOL_LISTS
trongcommon/build.config.gki.aarch64
hay không.