Có hai loại mô-đun hạt nhân: mô-đun GKI không phụ thuộc vào phần cứng và mô-đun nhà cung cấp dành riêng cho phần cứng. Trang này cung cấp thông tin tổng quan về cả hai loại mô-đun.
Mô-đun GKI
Các mô-đun hình ảnh nhân chung (GKI) được dùng để phân phối các chức năng nhân không bắt buộc khởi động tách biệt với nhân lõi chung. Với các mô-đun GKI, bạn có thể chọn các chức năng cụ thể của nhân để sử dụng, thường làm giảm kích thước hình ảnh nhân và mức tiêu thụ bộ nhớ trong thời gian chạy. Việc giảm kích thước giúp GKI phù hợp với các thiết bị Android Go và các kiểu dáng bị hạn chế về tài nguyên khác.
Các mô-đun GKI cũng cung cấp một cơ chế cho phép nhà cung cấp kết hợp các tính năng mới ở nguồn trên sau cột mốc KMI freeze. Không thể thay thế mã tích hợp sẵn mà không cần tạo một hình ảnh khác, trong khi mã được phân phối dưới dạng một mô-đun có thể được thay thế bằng một mô-đun khác.
Các mô-đun GKI sử dụng cơ sở hạ tầng ký tên thời gian xây dựng của nhân để phân biệt giữa GKI và các mô-đun khác trong thời gian chạy. Các mô-đun chưa ký được phép tải miễn là chúng chỉ sử dụng các biểu tượng xuất hiện trong danh sách cho phép hoặc do các mô-đun chưa ký khác cung cấp.
Có hai loại mô-đun GKI logic: mô-đun GKI được bảo vệ và mô-đun GKI không được bảo vệ.
Mô-đun GKI được bảo vệ
Một mô-đun GKI được bảo vệ do Google cung cấp, không bị hạn chế theo bất kỳ cách nào và hoạt động như thể được tạo bằng nhân sau khi tải. Ngoài ra, các mô-đun GKI được bảo vệ có các đặc điểm sau:
- Các mô-đun GKI được bảo vệ có quyền truy cập vào các biểu tượng nhân không phải KMI mà các mô-đun nhà cung cấp hoặc mô-đun GKI không được bảo vệ không có.
- Các mô-đun GKI được bảo vệ có thể xuất các biểu tượng trở thành một phần của giao diện KMI miễn là các biểu tượng đó được trích dẫn trong danh sách biểu tượng.
- Các mô-đun GKI được bảo vệ không thể bị các mô-đun của nhà cung cấp ghi đè.
Một mô-đun GKI được bảo vệ là lớp mô-đun GKI mặc định. Tất cả các mô-đun GKI đều được coi là được bảo vệ tại thời điểm KMI bị đóng băng.
Mô-đun GKI không được bảo vệ
Một mô-đun GKI không được bảo vệ có thể bị mô-đun của nhà cung cấp ghi đè. Sau khi KMI ngừng hoạt động, một mô-đun GKI được bảo vệ có thể được phân loại lại là không được bảo vệ nếu nhóm GKI quyết định rằng các nhà cung cấp cần ghi đè việc triển khai mặc định bằng một phiên bản có các tính năng mới từ Linux nguồn. Trong bản phát hành GKI tiếp theo, các mô-đun không được bảo vệ sẽ được phân loại lại là được bảo vệ sau khi mã nguồn thượng nguồn xuất hiện trong Nhân chung Android (ACK). Các mô-đun GKI không được bảo vệ có những đặc điểm sau:
- Các mô-đun GKI không được bảo vệ có quyền truy cập tương tự vào các biểu tượng đã xuất như các mô-đun của nhà cung cấp.
- Các mô-đun GKI không được bảo vệ không thể xuất các biểu tượng do các mô-đun GKI được bảo vệ xuất.
- Các mô-đun GKI không được bảo vệ phải giữ lại mọi giao diện KMI như thể là một phần của nhân cốt lõi.
- Các mô-đun GKI không được bảo vệ có thể bị các mô-đun của nhà cung cấp ghi đè.
Mô-đun nhà cung cấp
Các đối tác cung cấp một mô-đun nhà cung cấp để triển khai các chức năng dành riêng cho SoC và thiết bị. Mọi mô-đun hạt nhân hiện có không được phân phối như một phần của hạt nhân GKI đều có thể được phân phối dưới dạng mô-đun nhà cung cấp.
Vì một trong những mục tiêu chính của dự án GKI là giảm thiểu mã dành riêng cho phần cứng trong nhân cốt lõi, nên các nhà cung cấp có thể kỳ vọng rằng nhân GKI sẽ không bao gồm các mô-đun đang quản lý rõ ràng phần cứng của riêng họ. Ví dụ: nhà cung cấp ABC Inc. có thể dự kiến rằng các cấu hình như CONFIG_ABC_SOC_SUPPORT
sẽ không được bật dưới dạng mô-đun GKI có thể tải hoặc tích hợp sẵn mà không có sự hỗ trợ của họ.
Nếu trình điều khiển hoặc khung nhân tồn tại trong ACK nhưng không được phân phối như một phần của nhân GKI, thì các nhà cung cấp có thể sửa đổi trình điều khiển và phân phối trình điều khiển đó dưới dạng một mô-đun của nhà cung cấp. Bạn không nên sửa đổi các mô-đun không dành riêng cho nhà cung cấp vì các chức năng tương tự có thể được cung cấp bằng nhân GKI trong một bản phát hành trong tương lai. Khi nhân GKI chứa các chức năng do một mô-đun nhà cung cấp cung cấp, mô-đun nhà cung cấp sẽ không tải. Ví dụ: CONFIG_GREYBUS
không được đặt cho GKI trong Android 11, vì vậy, các nhà cung cấp có thể phân phối các mô-đun nhà cung cấp greybus. Tuy nhiên, CONFIG_GREYBUS
có thể được bật dưới dạng mô-đun hoặc mô-đun tích hợp GKI trong Android 12. Trong trường hợp này, các mô-đun nhà cung cấp greybus sẽ không được tải. Phương pháp hay nhất là sử dụng phiên bản nguồn của các trình điều khiển không dành riêng cho nhà cung cấp nếu chúng được phân phối dưới dạng các mô-đun của nhà cung cấp.
Bạn có thể phân phối các mô-đun của nhà cung cấp trong vendor
hoặc hình ảnh vendor_boot
. Các mô-đun cần thiết sớm trong quá trình khởi động phải nằm trong vendor_boot
.
Có một chi phí khởi động liên quan đến việc tải các mô-đun từ vendor_boot
.