Trang này trình bày cách định cấu hình tính năng nhân mới làm mô-đun GKI hoặc định cấu hình tính năng nhân hệ điều hành tích hợp sẵn làm 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_defconfig
và đặt mục cấu hình của tính năng hạt nhân bắt buộc từn
thànhm
(=m
). Đặt chế độ cài đặt này trong cảarch/arm64/configs/gki_defconfig
và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ầnCOMMON_GKI_MODULES_LIST
củacommon/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 được 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.Thêm cùng một tập hợp tệp KO ở bước 2, được sắp xếp theo thứ tự tăng dần đối với tính năng 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ệ. Cập nhật danh sách các tệp xuất được bảo vệ để bao gồm các tệp xuất từ mô-đun mới thêm trongcommon/android/abi_gki_protected_exports_{ARCH}
bằng cách sử dụngtools/bazel run //common:kernel_aarch64_abi_update_protected_exports
choaarch64
. Các mô-đun được chỉ định là mô-đun GKI được bảo vệ vẫn phải được Google phê duyệt để trở thành mô-đun được bảo vệ chính thức.Đảm bảo rằng các tệp KO mới thêm từ bước 2 được sao chép vào
out/<androidX-Y.Z>/dist/system_dlkm.img
vàout/androidX-Y.Z/dist/system_dlkm_staging_archive.tar.gz
của hạt nhân. Bạn có thể dùng các mô-đun trong tệp lưu trữsystem_dlkm_staging_archive.tar.gz
làm dữ liệu đầu vào để tạosystem_dlkm.img
trong bản dựng nền tảng.Gửi nội dung thay đổi để được xem xét. Các mô-đun GKI là một tính năng nhân chỉ dành cho Android, vì vậy, bạn không cần gửi bản vá chuyển đổi mô-đun cho luồng ngược lại. Tuy nhiên, bạn phải tuân thủ các nguyên tắc khác để gửi bản vá Hạt nhân Android chung (ACK).
Định cấu hình tính năng tích hợp sẵn của hạt nhân dưới dạng mô-đun GKI
Đối với tính năng nhân tích hợp sẵn hiện có, 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ànhm
(=m
). Đặt chế độ cài đặt này trong cảarch/arm64/configs/gki_defconfig
vàarch/x86/configs/gki_defconfig
.Thêm các tệp KO (
.ko
) được tạo cho tính năng vào phầnCOMMON_GKI_MODULES_LIST
củacommon/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 được 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.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 này là mô-đun GKI được bảo vệ. Cập nhật danh sách các tệp xuất được bảo vệ để bao gồm các tệp xuất từ mô-đun mới được thêm vào trongcommon/android/abi_gki_protected_exports_{ARCH}
bằng cách sử dụngtools/bazel run //common:kernel_aarch64_abi_update_protected_exports
choaarch64
. Các mô-đun được chỉ định là mô-đun GKI được bảo vệ vẫn phải được Google phê duyệt để trở thành mô-đun được bảo vệ chính thức.Đả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.img
vàout/androidX-Y.Z/dist/system_dlkm_staging_archive.tar.gz
của hạt nhân. Các mô-đun trong kho lưu trữsystem_dlkm_staging_archive.tar.gz
có thể được dùng làm dữ liệu đầu vào để tạosystem_dlkm.img
trong bản dựng nền tảng.Gửi nội dung thay đổi để được xem xét. Mô-đun GKI là một tính năng hạt nhân chỉ dành cho Android, vì vậy, bạn không cần phải gửi các bản vá chuyển đổi mô-đun lên trê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á hạt nhân Android Common Kernel (ACK).
Chuyển đổi mô-đun GKI được bảo vệ thành không được bảo vệ
Xoá mô-đun đang được chuyển đổi từ được bảo vệ sang không được bảo vệ khỏi danh sách mô-đun được bảo vệ tại
common/android/gki_protected_modules
.Cập nhật danh sách các tệp xuất được bảo vệ để loại trừ các tệp xuất từ 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ụngtools/bazel run //common:kernel_aarch64_abi_update_protected_exports
choaarch64
.Gửi nội dung thay đổi để được xem xét. Mô-đun GKI là một tính năng hạt nhân chỉ dành cho Android, vì vậy, bạn không cần phải gửi các bản vá chuyển đổi mô-đun lên trê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á hạt nhân 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 biện pháp bảo vệ biểu tượng hiện có cho các mô-đun GKI, bạn có thể gặp phải hai 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ô-đ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.
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 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ô-đun GKI được bảo vệ và module.ko
có thể 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ằng mô-đun GKI đã ký), quá trình tải sẽ không thành công kèm theo thông báo này.
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.