Định cấu hình các tính năng của hạt nhân dưới dạng mô-đun GKI

Trang này trình bày cách định cấu hình một tính năng mới của nhân dưới dạng mô-đun GKI hoặc định cấu hình một tính năng hiện có của nhân tích hợp dưới dạng mô-đun GKI.

Định cấu hình một tính năng mới dưới dạng mô-đun GKI

  1. Đối với tính năng mới, hãy chỉnh sửa gki_defconfig và đặt mục cấu hình tính năng kernel bắt buộc từ n thành m (=m). Đặt chế độ cài đặt này trong cả arch/arm64/configs/gki_defconfigarch/x86/configs/gki_defconfig.

  2. Thêm các tệp KO (.ko) được tạo cho tính năng này vào phần COMMON_GKI_MODULES_LIST của common/modules.bzl. Thêm các tệp theo thứ tự sắp xếp. Nếu bạn không chắc chắn về tất cả các tệp đã tạo, thì bản dựng sẽ không thành công và liệt kê tất cả các tệp KO cần thiết để thêm vào danh sách.

  3. Đối với Android 14, hãy thêm cùng một nhóm tệp KO từ bước 2, được sắp xếp theo thứ tự tăng dần để tìm kiếm nhị phân trong thời gian chạy, vào common/android/gki_{ARCH}_protected_modules để chỉ định mô-đun làm mô-đun GKI được bảo vệ.

  4. Đối với Android 14 và 15, hãy cập nhật danh sách các thành phần xuất để danh sách này bao gồm các thành phần xuất mới được thêm vào trong common/android/abi_gki_protected_exports_ARCHITECTURE. Ví dụ: để cập nhật danh sách, hãy chạy tools/bazel run //common:kernel_aarch64_abi_update_protected_exports cho aarch64.

  5. Đảm bảo rằng các tệp KO mới được thêm từ bước 2 được sao chép vào out/<androidX-Y.Z>/dist/system_dlkm.imgout/androidX-Y.Z/dist/system_dlkm_staging_archive.tar.gz của nhân. Bạn có thể dùng các mô-đun trong kho lưu trữ system_dlkm_staging_archive.tar.gz làm dữ liệu đầu vào để tạo system_dlkm.img trong bản dựng nền tảng.

  6. Gửi các thay đổi để được xem xét. Các mô-đun GKI là một tính năng chỉ dành cho nhân Android, vì vậy, bạn không cần gửi các bản vá chuyển đổi mô-đun lên nguồn. Tuy nhiên, bạn phải tuân thủ các nguyên tắc khác để gửi các bản vá Android Common Kernel (ACK).

Định cấu hình một tính năng tích hợp sẵn trong nhân dưới dạng một mô-đun GKI

  1. Đối với một tính năng có sẵn của nhân tích hợp, hãy chỉnh sửa gki_defconfig và đặt mục cấu hình của tính năng nhân bắt buộc từ y thành m (=m). Đặt chế độ cài đặt này trong cả arch/arm64/configs/gki_defconfigarch/x86/configs/gki_defconfig.

  2. Thêm các tệp KO (.ko) được tạo cho tính năng này vào phần COMMON_GKI_MODULES_LIST của common/modules.bzl. Thêm các tệp theo thứ tự sắp xếp. Nếu bạn không chắc chắn về tất cả các tệp đã tạo, thì bản dựng sẽ không thành công và liệt kê tất cả các tệp KO cần thiết để thêm vào danh sách.

  3. Đối với Android 14, hãy thêm cùng một nhóm tệp KO từ bước 2, được sắp xếp theo thứ tự tăng dần để tìm kiếm nhị phân trong thời gian chạy, vào common/android/gki_{ARCH}_protected_modules để chỉ định mô-đun làm mô-đun GKI được bảo vệ.

  4. Đối với Android 14 và 15, hãy cập nhật danh sách các thành phần xuất được bảo vệ để đưa các thành phần từ mô-đun mới thêm vào common/android/abi_gki_protected_exports_{ARCH} bằng cách sử dụng tools/bazel run //common:kernel_aarch64_abi_update_protected_exports cho aarch64.

  5. Đảm bảo rằng các tệp KO của mô-đun mới chuyển đổi từ bước 2 được sao chép vào out/<androidX-Y.Z>/dist/system_dlkm.imgout/androidX-Y.Z/dist/system_dlkm_staging_archive.tar.gz của nhân. Bạn có thể dùng các mô-đun trong kho lưu trữ system_dlkm_staging_archive.tar.gz làm dữ liệu đầu vào để tạo system_dlkm.img trong bản dựng nền tảng.

  6. Gửi các thay đổi để được xem xét. Các mô-đun GKI là một tính năng chỉ dành cho nhân Android, vì vậy, bạn không cần gửi các bản vá chuyển đổi mô-đun lên nguồn. Tuy nhiên, bạn phải tuân thủ các nguyên tắc khác để gửi các bản vá Android Common Kernel (ACK).

Chuyển đổi mô-đun GKI được bảo vệ thành mô-đun không được bảo vệ

  1. Đối với Android 15 trở lên, hãy thêm mô-đun đang được chuyển đổi từ mô-đun được bảo vệ sang mô-đun không được bảo vệ vào danh sách COMMON_UNPROTECTED_MODULES_LIST trong tệp common/modules.bzl.

  2. Đối với Android 14, hãy xoá mô-đun đang được chuyển đổi từ mô-đun được bảo vệ sang mô-đun không được bảo vệ khỏi danh sách các mô-đun được bảo vệ tại common/android/gki_protected_modules.

  3. Đối với Android 14 và 15, hãy cập nhật danh sách các thành phần xuất được bảo vệ để loại trừ các thành phần xuất khỏi mô-đun không được bảo vệ mới chuyển đổi trong common/android/abi_gki_protected_exports_{ARCH} bằng cách sử dụng tools/bazel run //common:kernel_aarch64_abi_update_protected_exports cho aarch64.

  4. Gửi các thay đổi để được xem xét. Các mô-đun GKI là một tính năng chỉ dành cho nhân Android, vì vậy, bạn không cần gửi các bản vá chuyển đổi mô-đun lên nguồn. Tuy nhiên, bạn phải tuân thủ các nguyên tắc khác để gửi các bản vá Android Common Kernel (ACK).

Hướng dẫn nhanh về cách giải quyết lỗi vi phạm biểu tượng mô-đun GKI

Khi các mô-đun chưa ký vi phạm cơ chế bảo vệ biểu tượng được áp dụng cho các mô-đun GKI, bạn có thể gặp phải 2 loại lỗi trong quá trình tải mô-đun, dẫn đến lỗi.

1. Mô-đun chưa ký sử dụng biểu tượng được bảo vệ

Lỗi:

module: Protected symbol: some_kernel_function (err -13)

Nguyên nhân:

Tệp module.ko là một mô-đun nhà cung cấp chưa ký và cố gắng phân giải biểu tượng some_kernel_function được xuất của mô-đun GKI trong quá trình tải mà không được liệt kê trong danh sách biểu tượng nhà cung cấp.

Cách giải quyết:

Nếu module.ko không phải là một mô-đun GKI được bảo vệ, thì việc cập nhật danh sách biểu tượng sẽ giải quyết lỗi bằng cách đưa some_kernel_function vào danh sách biểu tượng của nhà cung cấp. Hoặc sử dụng phiên bản GKI của module.ko.

2. Mô-đun chưa ký xuất biểu tượng được bảo vệ

Lỗi:

module: exports protected symbol some_kernel_function

Nguyên nhân:

Mô-đun xuất some_kernel_function là một mô-đun GKI được bảo vệ và module.ko có thể là một phiên bản tuỳ chỉnh chưa ký của mô-đun đó. Khi module.ko cố gắng xuất some_kernel_function (chỉ có thể được xuất bằng một mô-đun GKI đã ký), quá trình tải sẽ không thành công và thông báo này sẽ xuất hiện.

Cách giải quyết:

Bạn có thể khắc phục vấn đề này bằng cách sử dụng phiên bản GKI của mô-đun xuất some_kernel_function, nếu mô-đun chưa ký là phiên bản tuỳ chỉnh.