Để 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_MODULES
và
mứ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êmbuild.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
):
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 rằng
android/abi_gki_aarch64_<device>
có trongADDITIONAL_KMI_SYMBOL_LISTS
trongcommon/build.config.gki.aarch64
.