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

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

Định cấu hình tính năng mới làm 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 của tính năng kernel được yêu cầu từ n thành m ( =m ). Đặt 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 tin theo thứ tự được 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, 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 sẽ được thêm vào danh sách.

  3. Thêm cùng một bộ 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ệ. Cập nhật danh sách các bản xuất được bảo vệ để bao gồm các bản xuất từ ​​mô-đun mới được thêm vào 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 for aarch64 . 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.

  4. Đả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-YZ>/dist/system_dlkm.imgout/ androidX-YZ /dist/system_dlkm_staging_archive.tar.gz kernel. Các mô-đun trong kho lưu trữ system_dlkm_staging_archive.tar.gz có thể được sử dụng làm đầu vào để tạo system_dlkm.img trong bản dựng nền tảng.

  5. Gửi các thay đổi của bạn để xem xét. Mô-đun GKI là tính năng hạt nhân chỉ dành cho Android, do đó, các bản vá chuyển đổi mô-đun không bắt buộc phải được gửi ngược dòng. 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 tính năng tích hợp sẵn của kernel dưới dạng mô-đun GKI

  1. Đối với tính năng kernel 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 kernel được yêu cầu từ y thành m ( =m ). Đặt 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 tin theo thứ tự được 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, 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 sẽ được thêm vào danh sách.

  3. Thêm cùng một bộ 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ệ. Cập nhật danh sách các bản xuất được bảo vệ để bao gồm các bản xuất từ ​​mô-đun mới được thêm vào 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 for aarch64 . 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.

  4. Đả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 out/<androidX-YZ>/dist/system_dlkm.imgout/ androidX-YZ /dist/system_dlkm_staging_archive.tar.gz kernel. Các mô-đun trong kho lưu trữ system_dlkm_staging_archive.tar.gz có thể được sử dụng làm đầu vào để tạo system_dlkm.img trong bản dựng nền tảng.

  5. Gửi các thay đổi của bạn để xem xét. Mô-đun GKI là tính năng hạt nhân chỉ dành cho Android, do đó, các bản vá chuyển đổi mô-đun không bắt buộc phải được gửi ngược dòng. 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 không được bảo vệ

  1. Xóa mô-đun đang được chuyển đổi từ được bảo vệ sang 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 .

  2. Cập nhật danh sách các bản xuất được bảo vệ để loại trừ những bản xuất khỏi mô-đun không được bảo vệ mới được 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 for aarch64 .

  3. Gửi các thay đổi của bạn để xem xét. Mô-đun GKI là tính năng hạt nhân chỉ dành cho Android, do đó, các bản vá chuyển đổi mô-đun không bắt buộc phải được gửi ngược dòng. 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ề giải quyết vi phạm biểu tượng mô-đun GKI

Khi các mô-đun không được ký vi phạm tính năng bảo vệ ký hiệu dành cho các mô-đun GKI, có thể gặp hai loại lỗi trong quá trình tải mô-đun, dẫn đến lỗi.

1. Mô-đun không dấu sử dụng ký hiệu được bảo vệ

Lỗi:

module: Protected symbol: some_kernel_function (err -13)

Gây ra:

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

Nghị 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 được ký xuất biểu tượng được bảo vệ

Lỗi:

module: exports protected symbol some_kernel_function

Gây ra:

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 tùy chỉnh chưa được ký của mô-đun đó. Khi module.ko cố gắng xuất some_kernel_function , mô-đun này chỉ có thể được xuất bởi mô-đun GKI đã ký, việc tải không thành công kèm theo thông báo này.

Nghị quyết:

Điều này có thể được khắc phục 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 không dấu là phiên bản tùy chỉnh.