Chạy tính năng giám sát ABI

Trang này mô tả cách tạo bản trình bày ABI hạt nhân Android và chạy tính năng giám sát ABI. Tính năng này áp dụng cho Android 16 trở lên. Đối với các phiên bản thấp hơn, hãy tham khảo phần ABI theo dõi các phiên bản hạt nhân trước đó.

Ngoài ra, hãy xem tài liệu tham khảo về Kleaf: Hỗ trợ giám sát ABI (GKI)Hỗ trợ giám sát ABI (Thiết bị).

Tạo nhân và phần trình bày ABI của nhân

Sau khi tải nguồn GKI xuống, hãy chạy lệnh sau để tạo nhân GKI và cấu phần phần mềm ABI:

tools/bazel run //common:kernel_aarch64_abi_dist

Lệnh này tạo bản trình bày ABI hiện tại và sao chép bản trình bày đó vào $DIST_DIR/abi.stg cùng với hạt nhân và mô-đun đã tạo. $DIST_DIR mặc định là out_abi/kernel_aarch64_abi_dist/dist.

Bạn có thể chỉ định các đối số bổ sung cho công cụ ABI ở cuối lệnh sau --. Ví dụ: để thay đổi đích đến cho ABI và tạo cấu phần phần mềm, bạn có thể sử dụng tuỳ chọn --dist_dir:

tools/bazel run //common:kernel_aarch64_abi_dist -- --dist_dir=out/dist

Phân tích sự khác biệt về ABI giữa bản dựng và bản trình bày tham chiếu

Mục tiêu //common:kernel_aarch64_abi_dist, được thực thi trong lệnh trước, phân tích và báo cáo mọi sự khác biệt về ABI giữa bản dựng và bản trình bày tham chiếu nằm ở common/gki/aarch64/abi.stg (được xác định trong BUILD.bazel). Những sự khác biệt này được in ra ở cuối bản dựng, như trong ví dụ sau:

INFO: From [stg] Comparing Kernel ABI @//common:kernel_aarch64_abi_diff:
INFO: ABI DIFFERENCES HAVE BEEN DETECTED!

Báo cáo in được lấy từ cấu phần phần mềm bản dựng nằm tại $DIST_DIR/abi_stgdiff/abi.report.short cùng với các báo cáo ở định dạng khác.

Tính năng tự động hoá sẽ sử dụng mã thoát của lệnh bản dựng, mã này khác 0 nếu phát hiện thấy sự khác biệt.

Xin lưu ý rằng các nhánh giai đoạn phát triển, bao gồm cả android-mainline, không có nội dung đại diện ABI tham chiếu. Nếu không có, //common:kernel_aarch64_abi_dist sẽ không phát hiện thấy sự khác biệt nào.

Cập nhật nội dung trình bày ABI tham chiếu

Mọi thay đổi ảnh hưởng đến ABI hạt nhân, chẳng hạn như cập nhật danh sách biểu tượng, đều cần được phản ánh trong nội dung trình bày ABI tham chiếu (common/gki/aarch64/abi.stg, được xác định trong BUILD.bazel). Để thực hiện việc này, bạn cần chạy lệnh sau:

tools/bazel run //common:kernel_aarch64_abi_update

Lệnh này thực hiện mọi thao tác trong bước Phân tích sự khác biệt về ABI, đồng thời cập nhật nội dung trình bày tham chiếu trong các nguồn. Sau đó, bạn có thể tải ABI đã cập nhật lên trong cùng một thay đổi. Đưa các điểm khác biệt về ABI từ báo cáo trong $DIST_DIR/abi_stgdiff/abi.report.short vào thông báo thay đổi.

Giám sát ABI và mục tiêu thiết bị

Bạn chỉ cần định cấu hình tính năng giám sát ABI cho các mục tiêu bản dựng nhân chính. Cấu hình bản dựng hỗn hợp (cấu hình xác định base_kernel) biên dịch trực tiếp với hạt nhân GKI chỉ cần thêm tính năng hỗ trợ theo dõi danh sách biểu tượng thiết bị. Bạn nên cập nhật định nghĩa ABI bằng bản dựng GKI.

Ngoài ra, hãy xem tài liệu tham khảo về Kleaf: Hỗ trợ giám sát ABI (Thiết bị).

ABI theo dõi các phiên bản hạt nhân trước đó (Android 15 trở xuống)

Đối với các phiên bản hạt nhân trước, hướng dẫn tạo và theo dõi ABI sẽ khác như sau.

Android 15 và 14

Các hướng dẫn này hầu như giống với Android 16, ngoại trừ việc biểu thị ABI tham chiếu là common/android/abi_gki_aarch64.stg$DIST_DIR mặc định là out_abi/kernel_aarch64/dist.

Android 13

Bạn có thể tạo Android 13 bằng Kleaf hoặc bằng tập lệnh bản dựng cũ.

Đối với Kleaf, hướng dẫn cũng giống như Android 14, ngoại trừ định dạng ABI là XML và cách trình bày ABI tham chiếu là common/android/abi_gki_aarch64.xml.

Đối với tập lệnh bản dựng cũ, hướng dẫn sẽ giống như Android 12.

Android 12 trở xuống

Định dạng ABI là XML và nội dung đại diện ABI tham chiếu là common/android/abi_gki_aarch64.xml

Các hạt nhân này sử dụng build.sh thay vì Kleaf. Để theo dõi ABI, bạn nên sử dụng build_abi.sh. Phương thức này chấp nhận các biến môi trường giống nhau để tuỳ chỉnh bản dựng như build.sh. Ví dụ:

BUILD_CONFIG=common/build.config.gki.aarch64 build/build_abi.sh

Thao tác này sẽ tạo nhân và trích xuất nội dung đại diện ABI vào thư mục con OUT_DIR (theo mặc định là out_abi) và tương đương với mục tiêu //common:kernel_aarch64_abi_dist của Kleaf (xem phần Tạo nhân và cấu phần phần mềm ABI).

Nội dung trình bày ABI tham chiếu được lưu trữ trong android/abi_gki_aarch64.xml như được xác định bởi biến ABI_DEFINITION trong common/build.config.gki.aarch64.

Nếu bạn cần cập nhật nội dung trình bày ABI của hạt nhân, cách thuận tiện nhất là sử dụng các tuỳ chọn --update--print-report:

BUILD_CONFIG=common/build.config.gki.aarch64 build/build_abi.sh --update --print-report

--print-report in ra sự khác biệt về ABI giữa tệp hiện có và ABI mới tạo.

Tuỳ chọn --update sẽ ghi đè nội dung đại diện ABI tham chiếu. Phương thức này cũng thực hiện cập nhật danh sách biểu tượng khi sử dụng BUILD_CONFIG cho một thiết bị đã định cấu hình KMI_SYMBOL_LIST.