Android 11 giới thiệu khái niệm về Hình ảnh hạt nhân chung và phân vùng khởi động nhà cung cấp. Phân vùng khởi động của nhà cung cấp lưu trữ các mô-đun nhân tương thích với GKI và được tải bằng khởi động giai đoạn đầu tiên. Các mô-đun hạt nhân trước bản phát hành Android 11 cũng được lưu trữ trong các phân vùng nhà cung cấp và ODM, đồng thời được các quy trình của nhà cung cấp tải.
Đối với Android 11 trở lên, nhân và tất cả các mô-đun nhân có thể được cập nhật một cách độc lập với các phân vùng còn lại. Để bật tính năng cập nhật cho các mô-đun nhân được lưu trữ trong phân vùng nhà cung cấp (mà không cần cập nhật phân vùng của nhà cung cấp), hãy di chuyển tất cả các mô-đun phân vùng nhà cung cấp sang một phân vùng mới có tên là Vendor DLKM (mô-đun nhân hệ điều hành có thể tải động). Sau đó, bạn có thể cập nhật phân vùng này một cách độc lập. Tương tự, bạn có thể di chuyển tất cả mô-đun nhân được lưu trữ trong phân vùng ODM sang một phân vùng mới có tên là ODM DLKM. Bạn cũng có thể cập nhật phân vùng này một cách độc lập.
Vị trí phân vùng
Các phân vùng vendor_dlkm
và odm_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.
nội dung vendor_dlkm trong /vendor/lib/modules
- Mô-đun nhân của nhà cung cấp
- Tệp cấu hình
modprobe
- Một tệp
modules.load
Nội dung odm_dlkm trong /odm/lib/modules
- Mô-đun nhân ODM
- Tệp cấu hình
modprobe
- Một tệp
modules.load
Hãy xem phần Hỗ trợ mô-đun hạt nhân để biết thêm thông tin chi tiết về các tệp cấu hình mô-đun hạt nhân.
Hỗ trợ bản dựng
Việc tạo vendor_dlkm
và odm_dlkm
cũng tương tự như việc tạo các phân vùng động khác.
Ví dụ về bản dựng vendor_dlkm
Tạo vendor_dlkm
như trong các ví dụ sau.
BoardConfig.mk
BOARD_USES_VENDOR_DLKMIMAGE := true
BOARD_VENDOR_DLKMIMAGE_FILE_SYSTEM_TYPE := ext4
TARGET_COPY_OUT_VENDOR_DLKM := vendor_dlkm
BOARD_<GROUP_NAME>_PARTITION_LIST += vendor_dlkm
Thay thế <GROUP_NAME>
bằng tên thích hợp của nhóm cập nhật. Nhóm cập nhật phải là nhóm chứa phân vùng của nhà cung cấp.
Đối với thiết bị A/B và thiết bị A/B ảo, device.mk
AB_OTA_PARTITIONS += vendor_dlkm
fstab
Thêm mục nhập sau cho vendor_dlkm
vào fstab. Thay đổi cờ theo thiết bị. Hãy lấy ví dụ về CL Thêm vendor_dlkm
vào CF.
vendor_dlkm /vendor_dlkm ext4 noatime,ro,errors=panic wait,logical,first_stage_mount,slotselect,avb
ví dụ về bản dựng odm_dlkm
Tạo odm_dlkm
như trong các ví dụ sau.
BoardConfig.mk
BOARD_USES_ODM_DLKIMAGE := true
BOARD_ODM_DLKIMAGE_FILE_SYSTEM_TYPE := ext4
TARGET_COPY_OUT_ODM_DLKM := odm_dlkm
BOARD_<group_name>_PARTITION_LIST += odm_dlkm
Đối với thiết bị A/B và thiết bị A/B ảo, device.mk
AB_OTA_PARTITIONS += odm_dlkm
fstab
Thêm mục nhập sau cho odm_dlkm
vào fstab. Thay đổi cờ theo thiết bị. Hãy lấy ví dụ về CL Thêm odm_dlkm
vào CF.
odm_dlkm /odm_dlkm ext4 noatime,ro,errors=panic wait,logical,first_stage_mount,slotselect,avb
Sao chép các mô-đun hạt nhân vào một phân vùng
Để chọn các mô-đun hạt nhân mà bạn muốn sao chép vào phân vùng vendor_dlkm
, hãy liệt kê các mô-đun đó trong BOARD_VENDOR_KERNEL_MODULES
.
Nếu muốn ghi đè nội dung của modules.load
, bạn có thể chỉ định nội dung đó trong BOARD_VENDOR_KERNEL_MODULES_LOAD
.
Tại thời điểm tạo bản dựng, các mô-đun được liệt kê trong BOARD_VENDOR_KERNEL_MODULES
sẽ được cài đặt trong $ANDROID_PRODUCT_OUT/vendor_dlkm/lib/modules
. Một đường liên kết tượng trưng được tạo tại /vendor/lib/modules
dẫn đến /vendor_dlkm/lib/modules
.
Tương tự, để chọn các mô-đun nhân mà bạn muốn sao chép vào phân vùng odm_dlkm
, hãy liệt kê các mô-đun đó trong BOARD_ODM_KERNEL_MODULES
. Bản dựng nền tảng chạy depmod
trên các mô-đun và sao chép các tệp đầu ra depmod
vào hình ảnh.
Bản dựng sẽ tạo một tệp modules.load
và lưu trữ tệp đó trong hình ảnh.
Tệp này chứa tất cả các mô-đun được liệt kê trong BOARD_ODM_KERNEL_MODULES
.
Nếu muốn ghi đè nội dung của modules.load
, bạn có thể chỉ định nội dung đó trong BOARD_ODM_KERNEL_MODULES_LOAD
.
Tại thời điểm tạo bản dựng, các mô-đun được liệt kê trong BOARD_ODM_KERNEL_MODULES
sẽ được cài đặt trong $ANDROID_PRODUCT_OUT/odm_dlkm/lib/modules
. Một đường liên kết tượng trưng được tạo tại /odm/lib/modules
dẫn đến /odm_dlkm/lib/modules
.
Luôn sử dụng /vendor/lib/modules
và /odm/lib/modules
cho các mô-đun hạt nhân của nhà cung cấp và ODM.
Tuyệt đối không sử dụng /vendor_dlkm/lib/modules. Các thiết bị không có phân vùng vendor_dlkm
sẽ cài đặt trực tiếp BOARD_VENDOR_KERNEL_MODULES
vào /vendor/lib/modules
. Đây là vấn đề vì /vendor_dlkm/lib/modules
không tồn tại.
Không bao giờ sử dụng /odm_dlkm/lib/modules
. Các thiết bị không có phân vùng odm_dlkm
sẽ cài đặt trực tiếp BOARD_ODM_KERNEL_MODULES
vào /odm/lib/modules
. Điều này gây ra vấn đề vì /odm_dlkm/lib/modules
không tồn tại.
Gắn phân vùng và tải mô-đun
Trong first_stage_init
, các phân vùng vendor_dlkm
và odm_dlkm
được gắn trong thư mục /vendor_dlkm
và /odm_dlkm
tương ứng. Khi điều này xảy ra, các đường liên kết tượng trưng tại /vendor/lib/modules
và /odm/lib/modules
sẽ có sẵn.
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 hạt nhân dựa trên thứ tự được chỉ định trong modules.load
. Quá trình của nhà cung cấp cũng có thể tải các mô-đun sau này nếu cần.
Tài liệu liên quan
Để biết tài liệu về cách tạo phân vùng khởi động của nhà cung cấp (chứa RAMDisk của nhà cung cấp), hãy tham khảo phần Hỗ trợ mô-đun hạt nhân.