Duy trì giao diện mô-đun hạt nhân ổn định

Điều quan trọng là phải duy trì một giao diện mô-đun hạt nhân (KMI) ổn định cho các mô-đun của nhà cung cấp. Nhân GKI được tạo và vận chuyển ở dạng nhị phân, còn các mô-đun mà nhà cung cấp có thể tải được sẽ được tạo trong một cây riêng biệt. Nhân GKI và các 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 hài lòng với khái niệm về tính ổn định của ABI trong nhân đối với nhân chính. Khi đối mặt với nhiều chuỗi công cụ, cấu hình và một hạt nhân chính của Linux không ngừng phát triển, việc duy trì KMI ổn định trong hạt nhân chính là điều không thể. Tuy nhiên, bạn có thể duy trì KMI ổn định trong môi trường GKI bị hạn chế cao với những hạn chế sau:

  • Bạn chỉ có thể dùng một cấu hình duy nhất (gki_defconfig) để tạo kernel.

  • KMI chỉ ổn định trong cùng một LTS và phiên bản Android của mộ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ỉ có 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 được dùng để tạo hạt nhân và các mô-đun.

  • Chỉ những biểu tượng được các mô-đun sử dụng như được chỉ định trong danh sách biểu tượng mới được theo dõi về độ ổn định và được coi là biểu tượng KMI.

    • Hệ quả là các mô-đun của nhà cung cấp chỉ được sử dụng các biểu tượng KMI. 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 biểu tượng 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 cấu hình
    • Các thay đổi về mã kernel
    • Các 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 tạo khép kín và chuỗi công cụ LLVM

Quy trình xây dựng khép kín đảm bảo KMI ổn định bằng cách có cá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 nhân Generic Kernel Image (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ả nhất quán cho bản dựng.

Việc sử dụng quy trình tạo khép kín cũng đảm bảo rằng nội dung mô tả ABI cho cây nhất quán cho dù do Google tạo (ví dụ: gki/aarch64/abi.stg cho android16-6.12) hay được tạo trong 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ữ do tệp kê khai mô tả.

Chuỗi công cụ dùng để tạo nhân GKI phải hoàn toàn tương thích với chuỗi công cụ dùng để tạo các mô-đun của nhà cung cấp. Kể từ Android 10, tất cả các nhân Android đều phải được tạo bằng một chuỗi công cụ LLVM. Với GKI, chuỗi công cụ LLVM dùng để tạo các mô-đun hạt nhân sản phẩm và nhà cung cấp phải tạo cùng một ABI như 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 hạt nhân GKI. Bạn nên sử dụng các công cụ tạo bản 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 tạo khép 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 giám sát ABI và khắc phục vấn đề, hãy tham khảo bài viết Giám sát ABI nhân Android