Bạn có thể cập nhật các mô-đun GKI và GKI độc lập với phần còn lại của phân vùng vì các mô-đun GKI nằm trên một phân vùng động riêng biệt trong hình ảnh siêu cấp có tên là system_dlkm
. Các mô-đun GKI được Google ký bằng nhân hệ điều hành
và chỉ tương thích với GKI tích hợp.
Không có độ ổn định ABI giữa các mô-đun GKI và GKI; để các mô-đun tải đúng cách trong thời gian chạy, các mô-đun GKI và GKI phải được tạo và cập nhật cùng nhau.
Triển khai tính năng hỗ trợ phân vùng system_dklm
Phân vùng system_dlkm
nằm trong phân vùng siêu cấp dưới dạng một phân vùng động khác. Phân vùng này có thể chứa:
- Các mô-đun nhân hệ điều hành đã ký theo thời gian xây dựng của Google
depmod
cấu phần phần mềm
Bản dựng system_dlkm
Việc tạo system_dlkm
cũng tương tự như việc tạo các phân vùng động khác. Thực hiện các bước sau để thêm system_dlkm
vào bản dựng:
Trong
BoardConfig.mk
, hãy thêm các mục sau:BOARD_USES_SYSTEM_DLKMIMAGE := true BOARD_SYSTEM_DLKMIMAGE_FILE_SYSTEM_TYPE := $(TARGET_RO_FILE_SYSTEM_TYPE) TARGET_COPY_OUT_SYSTEM_DLKM := system_dlkm
Trong danh sách phân vùng, hãy thêm
system_dlkm
:BOARD_GOOGLE_SYSTEM_DYNAMIC_PARTITIONS_PARTITION_LIST := system_dlkm
(Không bắt buộc) Đối với thiết bị A/B và thiết bị A/B ảo, hãy thêm dòng sau vào tệp
device.mk
cho thiết bị của bạn:AB_OTA_PARTITIONS += system_dlkm
Xác định các mô-đun nhân để sao chép vào system_dlkm
Để các mô-đun tải thành công trong thời gian chạy, bạn phải tạo các mô-đun GKI và GKI
khi kết hợp cùng nhau. Do đó, bạn phải xác định các mô-đun hạt nhân trong bản dựng GKI cho kiến trúc mục tiêu và cung cấp mô-đun đó làm nguồn cho phân vùng system_dlkm
trong quá trình tạo bản dựng nền tảng.
Đối với Android 13
Chỉ BOARD_SYSTEM_DLKM_SRC
đến một thư mục chứa các tệp đối tượng hạt nhân mô-đun GKI bắt buộc cho thiết bị làm dữ liệu đầu vào cho hệ thống xây dựng để tạo phân vùng system_dlkm
. Ví dụ:
Cung cấp nguồn mô-đun GKI trong một thư mục và trỏ BOARD_SYSTEM_DLKM_SRC
đến
thư mục đó. Ví dụ:
BOARD_SYSTEM_DLKM_SRC := kernel/prebuilts/5.10/arm64/system_dlkm_staging
Tại thời điểm xây dựng, các mô-đun liệt kê trong BOARD_SYSTEM_DLKM_SRC
được cài đặt trong
$ANDROID_PRODUCT_OUT/system_dlkm
.
Đối với Android 14
Chúng tôi đã đơn giản hoá việc triển khai bằng các macro
(BOARD_*_KERNEL_MODULES
) đang được dùng cho các dịch vụ khác
*_dlkm
phân vùng. Danh sách các mô-đun GKI bắt buộc cho thiết bị phải là
được tham chiếu bởi macro BOARD_SYSTEM_KERNEL_MODULES
. Trong thời gian xây dựng các mô-đun này
đã được cài đặt trong $ANDROID_PRODUCT_OUT/system_dlkm
. Bất kỳ mô-đun nào trong
Phân vùng vendor_dlkm
có các phần phụ thuộc trên các mô-đun trong system_dlkm
phân vùng tạo tệp tham chiếu chính xác trong tệp modules.dep
cho phần tử
Phân vùng vendor_dlkm
. Do các phần phụ thuộc trên nhiều phân vùng do modules.dep
biểu thị, khi một mô-đun nhà cung cấp được tải, mọi mô-đun GKI bắt buộc sẽ tự động được tải.
Ví dụ: để cài đặt tất cả mô-đun GKI trên phân vùng system_dlkm
cho hạt nhân GKI arm64
5.15
từ các bản dựng trước:
BOARD_SYSTEM_KERNEL_MODULES := $(wildcard kernel/prebuilts/5.15/arm64/*.ko)
Gắn system_dlkm
trong thời gian chạy
Tuỳ thuộc vào hệ thống tệp đang được sử dụng làm hệ thống tệp chỉ có thể đọc, hãy thêm nội dung sau vào fstab
để gắn phân vùng system_dlkm
trong thời gian chạy:
ext4
dưới dạng hệ thống tệp chỉ có thể đọc
system_dlkm /system_dlkm ext4 noatime,ro,errors=panic wait,logical,first_stage_mount,slotselect,avb
erofs
dưới dạng hệ thống tệp chỉ đọc
system_dlkm /system_dlkm erofs ro wait,logical,first_stage_mount,slotselect,avb
Gắn phân vùng và tải mô-đun
Trong first_stage_init
, phân vùng system_dlkm
được gắn trong
/system_dlkm
làm hệ thống tệp chỉ đọc. Trên một giá đỡ thành công,
các đường liên kết tại /system/lib/modules
trỏ đến /system_dlkm/lib/modules
đang
sẵn có.
Sau đó, một quy trình của nhà cung cấp (chẳng hạn như tập lệnh .rc
) có thể tải các mô-đun nhân kernel
dựa trên đơn đặt hàng được chỉ định trong modules.load
. Quy trình của nhà cung cấp phải sử dụng
đường liên kết tượng trưng /system/lib/modules
để tải các mô-đun.
Nếu cần, quy trình của nhà cung cấp cũng có thể tải các mô-đun vào lúc khác.
SELinux
Mỗi tệp trong phân vùng system_dlkm
được gắn nhãn với ngữ cảnh tệp là
system_dlkm_file
. Để tải tệp mô-đun GKI trong phân vùng system_dlkm
, quy trình của nhà cung cấp chịu trách nhiệm tải các mô-đun cần có sepolicy
trong miền của nhà cung cấp.
Ví dụ: dlkm_loader
mà Cuttlefish sử dụng để tải các mô-đun GKI có các quyền sau trong tệp chính sách tại shared/sepolicy/vendor/dlkm_loader.te
:
allow dlkm_loader self:capability sys_module;
allow dlkm_loader system_dlkm_file:dir r_dir_perms;
allow dlkm_loader system_dlkm_file:file r_file_perms;
allow dlkm_loader system_dlkm_file:system module_load;
Xác thực phân vùng system-dlkm
Google cung cấp một trường hợp kiểm tra GKI VTS để xác minh phân vùng system_dlkm
. Người nhận
gọi kiểm thử theo cách thủ công, hãy sử dụng lệnh atest
sau:
atest -c vts_dlkm_partition_test