Kể từ ngày 27 tháng 3 năm 2025, bạn nên sử dụng android-latest-release
thay vì aosp-main
để xây dựng và đóng góp cho AOSP. Để biết thêm thông tin, hãy xem phần Thay đổi đối với AOSP.
Duy trì giao diện mô-đun hạt nhân ổn định
Sử dụng bộ sưu tập để sắp xếp ngăn nắp các trang
Lưu và phân loại nội dung dựa trên lựa chọn ưu tiên của bạn.
Điều quan trọng là phải duy trì giao diện mô-đun hạt nhân (KMI) ổn định cho các mô-đun của nhà cung cấp. Hạt nhân GKI được tạo và vận chuyển ở dạng tệp nhị phân và các mô-đun có thể tải của nhà cung cấp được tạo trong một cây riêng biệt. Hạt nhân GKI và mô-đun nhà cung cấp thu được phải hoạt động như thể chúng được tạo cùng nhau.
Nhìn chung, cộng đồng Linux không đồng tình với khái niệm về độ ổn định của ABI trong nhân đối với nhân chính. Trước nhiều chuỗi công cụ, cấu hình và nhân chính Linux luôn phát triển, không thể duy trì một KMI ổn định trong dòng chính. Tuy nhiên, bạn có thể duy trì KMI ổn định trong môi trường GKI bị ràng buộc cao với các quy tắc ràng buộc sau:
Bạn chỉ có thể sử dụng một cấu hình duy nhất, gki_defconfig
, để tạo hạt nhân.
KMI chỉ ổn định trong cùng một phiên bản LTS và Android của một hạt nhân, chẳng hạn như android14-6.1
, android15-6.6
hoặc android16-6.12
.
- Không duy trì độ ổn định KMI cho
android-mainline
.
Chỉ chuỗi công cụ Clang cụ thể được cung cấp trong AOSP và được xác định cho nhánh tương ứng mới được dùng để tạo nhân và mô-đun.
Chỉ những biểu tượng được biết là được các mô-đun sử dụng như được chỉ định trong danh sách biểu tượng mới được giám sát về độ ổn định và được coi là biểu tượng KMI.
- Do đó, các mô-đun của nhà cung cấp chỉ được sử dụng các ký hiệu KMI. Quy tắc ràng buộc này được thực thi bằng cách không tải được mô-đun nếu cần các ký hiệu không phải KMI.
Sau khi nhánh KMI bị đóng băng, bạn có thể thay đổi nhưng không được làm hỏng KMI.
Những thay đổi này bao gồm:
- Thay đổi về cấu hình
- Thay đổi mã hạt nhân
- Thay đổi về chuỗi công cụ (bao gồm cả nội dung cập nhật)
Sử dụng quy trình xây dựng kín và chuỗi công cụ LLVM
Quy trình xây dựng kín đảm bảo KMI ổn định bằng cách có tệp kê khai repo
trong kernel/manifest
mô tả đầy đủ môi trường xây dựng. Ví dụ: tệp kê khai cho android16-6.12
bao gồm chuỗi công cụ, hệ thống xây dựng và mọi thứ khác cần thiết để tạo hạt nhân Hình ảnh hạt nhân chung (GKI). Cấu hình bản dựng, chủ yếu là BUILD.bazel
, đảm bảo rằng các công cụ đi kèm được sử dụng đúng cách để tạo ra kết quả bản dựng nhất quán.
Việc sử dụng quy trình xây dựng kín cũng đảm bảo rằng nội dung mô tả ABI cho
cây luôn nhất quán, cho dù là do Google tạo (ví dụ:
gki/aarch64/abi.stg
cho android16-6.12
) hay được tạo trong một cây cục bộ bao gồm các mô-đun
của nhà cung cấp. Các công cụ để tạo và so sánh nội dung mô tả ABI cho Giao diện mô-đun hạt nhân (KMI) cũng được cung cấp trong kho lưu trữ được mô tả trong tệp kê khai.
Chuỗi công cụ dùng để tạo hạt nhân GKI phải hoàn toàn tương thích với chuỗi công cụ dùng để tạo mô-đun của nhà cung cấp. Kể từ Android 10, tất cả nhân Android phải được tạo bằng chuỗi công cụ LLVM. Với GKI, chuỗi công cụ LLVM dùng để tạo nhân sản phẩm và mô-đun nhà cung cấp phải tạo ABI giống với chuỗi công cụ LLVM từ AOSP và các đối tác phải đảm bảo rằng KMI tương thích với nhân GKI.
Bạn nên sử dụng các công cụ xây dựng được cung cấp vì chúng mang lại khả năng tương thích tốt nhất.
Tiếp theo là gì?
Để biết hướng dẫn về cách tạo nhân bằng quy trình xây dựng kín và chuỗi công cụ LLVM, hãy tham khảo phần Tạo nhân.
Để biết hướng dẫn về cách theo dõi ABI và khắc phục sự cố, hãy tham khảo phần Theo dõi ABI hạt nhân Android
Nội dung và mã mẫu trên trang này phải tuân thủ các giấy phép như mô tả trong phần Giấy phép nội dung. Java và OpenJDK là nhãn hiệu hoặc nhãn hiệu đã đăng ký của Oracle và/hoặc đơn vị liên kết của Oracle.
Cập nhật lần gần đây nhất: 2025-07-27 UTC.
[[["Dễ hiểu","easyToUnderstand","thumb-up"],["Giúp tôi giải quyết được vấn đề","solvedMyProblem","thumb-up"],["Khác","otherUp","thumb-up"]],[["Thiếu thông tin tôi cần","missingTheInformationINeed","thumb-down"],["Quá phức tạp/quá nhiều bước","tooComplicatedTooManySteps","thumb-down"],["Đã lỗi thời","outOfDate","thumb-down"],["Vấn đề về bản dịch","translationIssue","thumb-down"],["Vấn đề về mẫu/mã","samplesCodeIssue","thumb-down"],["Khác","otherDown","thumb-down"]],["Cập nhật lần gần đây nhất: 2025-07-27 UTC."],[],[],null,["# Maintain a stable kernel module interface\n\nIt's critical to maintain a stable kernel module interface (KMI) for vendor\nmodules. The GKI kernel is\nbuilt and shipped in binary form and vendor-loadable modules are built in a\nseparate tree. The resulting GKI kernel and vendor modules must work as\nthough they were built together.\n\nGenerally, the Linux community has\n[frowned on the notion of in-kernel ABI\nstability](https://www.kernel.org/doc/Documentation/process/stable-api-nonsense.rst)\nfor the mainline kernel. In the face of different toolchains, configurations,\nand an ever-evolving Linux mainline kernel, it isn't feasible to maintain a\nstable KMI in mainline. However, it's possible to maintain a stable KMI in\nthe highly-constrained GKI environment with these constraints:\n\n- Only a single configuration, `gki_defconfig`, can be used to build the\n kernel.\n\n- The KMI is only stable within the same LTS and Android version of a kernel,\n such as `android14-6.1`, `android15-6.6` or `android16-6.12`.\n\n - No KMI stability is maintained for `android-mainline`.\n- Only the specific *Clang* toolchain supplied in AOSP and defined for the\n corresponding branch is used for building kernel and modules.\n\n- Only symbols known to be used by modules as specified in a symbol list are\n monitored for stability and considered KMI symbols.\n\n - The corollary is that vendor modules must use only KMI symbols. This constraint is enforced by failing module loads if non-KMI-symbols are required.\n- After the KMI branch is frozen, changes are allowed but can't break the KMI.\n These changes include the following:\n\n - Config changes\n - Kernel code changes\n - Toolchain changes (including updates)\n\nUse the hermetic build process and LLVM toolchain\n-------------------------------------------------\n\nThe hermetic build process ensures a stable KMI by having `repo` manifests in\n`kernel/manifest` completely describe the build environment. For example, the\n[manifest for `android16-6.12`](https://android.googlesource.com/kernel/manifest/+/refs/heads/common-android16-6.12/default.xml)\nincludes the toolchain, build system, and everything else required to build the\nGeneric Kernel Image (GKI) kernel. The build configuration, primarily\n[`BUILD.bazel`](https://android.googlesource.com/kernel/common/+/refs/heads/android16-6.12/BUILD.bazel),\nensures that the included tools are used correctly to generate consistent build\nresults.\n\nUsing a hermetic build process also ensures that the ABI description for the\ntree is consistent whether generated by Google (for example,\n[`gki/aarch64/abi.stg`](https://android.googlesource.com/kernel/common/+/refs/heads/android16-6.12/gki/aarch64/abi.stg)\nfor `android16-6.12`) or generated in a local tree that includes the vendor\nmodules. The\n[tools to create and compare the ABI description](https://android.googlesource.com/kernel/build/+/refs/heads/main-kernel/abi/)\nfor the Kernel Module Interface (KMI) are also provided as part of the repo\ndescribed by the manifest.\n\nThe toolchain used to build the GKI kernel must be completely compatible with\nthe toolchain used to build vendor modules. As of Android\n10, all Android kernels must be built\nwith an LLVM toolchain. With GKI, the LLVM toolchain used to build product\nkernels and vendor modules must generate the same ABI as the LLVM toolchain from\nAOSP and partners must ensure that the KMI is compatible with the GKI kernel.\nUsing the provided build tools is strongly encouraged as they provide the\nbest compatibility.\n\nWhat's next?\n------------\n\n- For instructions on building the kernel using the hermetic build process and\n LLVM toolchain, refer to refer to\n [Build kernels](/docs/setup/build/building-kernels).\n\n- For instructions on how to monitor the ABI and fix issues, refer to\n [Android Kernel ABI Monitoring](/docs/core/architecture/kernel/abi-monitor)"]]