Trang này trình bày cách định cấu hình một tính năng mới của kernel 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 kernel 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
Đối với tính năng mới, hãy chỉnh sửa
gki_defconfigvà đặt mục cấu hình của tính năng kernel bắt buộc từnthànhm(=m). Đặt chế độ cài đặt này trong cảarch/arm64/configs/gki_defconfigvàarch/x86/configs/gki_defconfig.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_LISTcủa tệp sau. 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 được tạo, thì quá trình xây 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.- Trong
android17-6.18trở lên, hãy thêm các mục vàocommon/bazel/modules_private.bzl. - Trong
android16-6.12trở xuống, hãy thêm các mục vàocommon/modules.bzl.
- Trong
Đối với Android 14, hãy thêm cùng một tập hợp 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ô-đun GKI được bảo vệ.Đối với Android 14 và 15, hãy cập nhật danh sách các mục xuất để danh sách này bao gồm các mục xuất mới được thêm vào
common/android/abi_gki_protected_exports_ARCHITECTURE. Ví dụ: để cập nhật danh sách, hãy chạytools/bazel run //common:kernel_aarch64_abi_update_protected_exportschoaarch64.Đảm bảo 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.imgvàout/androidX-Y.Z/dist/system_dlkm_staging_archive.tar.gzcủa kernel. Bạn có thể sử dụng các mô-đun trong kho lưu trữsystem_dlkm_staging_archive.tar.gzlàm dữ liệu đầu vào để tạosystem_dlkm.imgtrong bản dựng nền tảng.Gửi các thay đổi của bạn để xem xét. Mô-đun GKI là một tính năng nhân hệ điều hành chỉ dành cho 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 gốc. Tuy nhiên, bạn phải tuân theo các nguyên tắc khác để gửi bản vá Android Common Kernel (ACK).
Định cấu hình một tính năng tích hợp của kernel dưới dạng mô-đun GKI
Đối với một tính năng tích hợp hiện có của kernel, hãy chỉnh sửa
gki_defconfigvà đặt mục cấu hình của tính năng kernel bắt buộc từythànhm(=m). Đặt chế độ cài đặt này trong cảarch/arm64/configs/gki_defconfigvàarch/x86/configs/gki_defconfig.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_LISTcủa tệp sau. 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 được tạo, thì quá trình xây 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.- Trong
android17-6.18trở lên, hãy thêm các mục vàocommon/bazel/modules_private.bzl. - Trong
android16-6.12trở xuống, hãy thêm các mục vào `common/modules.bzl.
- Trong
Đối với Android 14, hãy thêm cùng một tập hợp 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ô-đun GKI được bảo vệ.Đối với Android 14 và 15, hãy cập nhật danh sách các mục xuất được bảo vệ để bao gồm các mục xuất từ mô-đun mới được thêm vào
common/android/abi_gki_protected_exports_{ARCH}bằngtools/bazel run //common:kernel_aarch64_abi_update_protected_exportschoaarch64.Đảm bảo các tệp KO mô-đun mới được chuyển đổi từ bước 2 được sao chép vào kernel's
out/<androidX-Y.Z>/dist/system_dlkm.imgvàout/androidX-Y.Z/dist/system_dlkm_staging_archive.tar.gz. Bạn có thể sử dụng các mô-đun trong kho lưu trữsystem_dlkm_staging_archive.tar.gzlàm dữ liệu đầu vào để tạosystem_dlkm.imgtrong bản dựng nền tảng.Gửi các thay đổi của bạn để xem xét. Mô-đun GKI là một tính năng nhân hệ điều hành chỉ dành cho 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 gốc. Tuy nhiên, bạn phải tuân theo các nguyên tắc khác để gửi 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ệ
Đố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ệ thành mô-đun không được bảo vệ vào danh sách
_COMMON_UNPROTECTED_MODULES_LISTtrong tệp sau:- Trong
android17-6.18trở lên, hãy thêm các mục vàocommon/bazel/modules_private.bzl. - Trong
android16-6.12trở xuống, hãy thêm các mục vàocommon/modules.bzl.
- Trong
Đối với Android 14, hãy xoá mô-đun đang được chuyển đổi từ mô-đun được bảo vệ thành 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.Đối với Android 14 và 15, hãy cập nhật danh sách các mục xuất được bảo vệ để loại trừ các mục xuất từ mô-đun không được bảo vệ mới được chuyển đổi trong
common/android/abi_gki_protected_exports_{ARCH}bằngtools/bazel run //common:kernel_aarch64_abi_update_protected_exportschoaarch64.Gửi các thay đổi của bạn để xem xét. Mô-đun GKI là một tính năng nhân hệ điều hành chỉ dành cho 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 gốc. Tuy nhiên, bạn phải tuân theo các nguyên tắc khác để gửi bản vá Android Common Kernel (ACK).
Hướng dẫn nhanh về cách giải quyết lỗi vi phạm ký hiệu mô-đun GKI
Khi các mô-đun chưa ký vi phạm quy tắc bảo vệ ký hiệu hiện có đối với 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 ký hiệu đượ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 ký hiệu được xuất của mô-đun GKI some_kernel_function trong quá trình tải mà không được liệt kê trong danh sách ký hiệu của nhà cung cấp.
Cách giải quyết:
Nếu module.ko không phải là mô-đun GKI được bảo vệ, thì việc cập nhật danh sách ký hiệu sẽ giải quyết lỗi bằng cách đưa some_kernel_function vào danh sách ký hiệu của nhà cung cấp.
Ngoài ra, hãy sử dụng phiên bản GKI của module.ko.
2. Mô-đun chưa ký xuất ký hiệu đượ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ó khả năng là 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ởi mô-đun GKI đã ký), quá trình tải sẽ không thành công và hiển thị thông báo này.
Cách giải quyết:
Bạn có thể khắc phục lỗi 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.