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.
Các mô-đun GKI
Các mô-đun hình ảnh nhân chung (GKI) được dùng để phân phối các tính năng nhân không cần khởi động tách biệt với nhân cốt 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à giảm kích thước hình ảnh nhân và mức sử dụng 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 hệ số hình dạng khác bị hạn chế tài nguyên.
Các mô-đun GKI cũng đưa ra cơ chế cho phép nhà cung cấp tích hợp các tính năng mới cập nhật (upstream) sau mốc thời gian KMI bị treo. Bạn không thể thay thế mã tích hợp mà không tạo một hình ảnh khác, trong khi mã được phân phối dưới dạng 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ý thời gian xây dựng của hạt nhân để phân biệt giữa GKI và các mô-đun khác tại 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 ký hiệu 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ô-đun GKI được bảo vệ do Google phân phối, không bị hạn chế theo bất kỳ cách nào và hoạt động như thể được xây dựng bằng nhân hệ điều hành 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 ký hiệu nhân không phải KMI mà các mô-đun của 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 ký hiệu trở thành một phần của giao diện KMI miễn là các ký hiệu đó được trích dẫn trong danh sách ký hiệu.
- Các mô-đun GKI được bảo vệ không thể bị ghi đè bởi các mô-đun của nhà cung cấp.
Mô-đun GKI được bảo vệ là lớp mặc định của các mô-đun GKI. Tất cả mô-đun GKI đều được coi là được bảo vệ tại thời điểm KMI bị treo.
Mô-đun GKI không được bảo vệ
Mô-đun GKI không được bảo vệ có thể bị mô-đun của nhà cung cấp ghi đè. Sau khi KMI bị treo, 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 đè phương thứ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 ngược dòng. 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 cấp trên được đưa vào một Hạt nhân Android phổ biến (ACK). Các mô-đun GKI không được bảo vệ có các đặc điểm sau:
- Các mô-đun GKI không được bảo vệ có quyền truy cập vào các ký hiệu đã xuất giống 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 ký hiệu 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 hạt nhân lõi.
- Các mô-đun GKI không được bảo vệ có thể bị ghi đè bởi các mô-đun của nhà cung cấp.
Mô-đun nhà cung cấp
Đối tác sẽ phân phối mô-đun nhà cung cấp để triển khai các tính 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 dưới dạng 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 nhà cung cấp có thể kỳ vọng rằng hạt nhân GKI sẽ không bao gồm các mô-đun rõ ràng đang quản lý 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 tích hợp sẵn hoặc có thể tải nếu không có sự hỗ trợ của những cấu hình này.
Nếu một trình điều khiển hoặc khung nhân có trong ACK nhưng không được phân phối dưới dạng nhân GKI, thì nhà cung cấp có thể sửa đổi trình điều khiển đó và phân phối dưới dạng mô-đun nhà cung cấp. Bạn không nên sửa đổi như vậy đối với các mô-đun không dành riêng cho nhà cung cấp, vì các khả năng tương tự có thể được phân phối với hạt nhân GKI trong bản phát hành sau này. Khi hạt nhân GKI chứa các chức năng do 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, 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 GKI tích hợp 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 ngược dòng (upstream) của các trình điều khiển không dành riêng cho nhà cung cấp nếu các trình điều khiển này được phân phối dưới dạng 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 hình ảnh vendor
hoặc vendor_boot
. Các mô-đun cần thiết ở giai đoạn đầu của quá trình khởi động phải nằm trong vendor_boot
.
Việc tải các mô-đun từ vendor_boot
sẽ tốn chi phí thời gian khởi động.