Android 11 giới thiệu khái niệm về Hình ảnh nhân chung và phân vùng khởi động của 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ởi giai đoạn khởi động đầu tiên. Các mô-đun nhân trước khi phát hành Android 11 cũng được lưu trữ trong các phân vùng của nhà cung cấp và ODM, đồng thời được tải bởi các quy trình của nhà cung cấp.
Đố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 độc lập với các phân vùng còn lại. Để bật các bản cập nhật cho mô-đun nhân được lưu trữ trong phân vùng của 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 chuyển tất cả các mô-đun phân vùng của nhà cung cấp sang một phân vùng mới có tên là Vendor DLKM (mô-đun nhân 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ể chuyển tất cả cá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 dữ liệu 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 - 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 - Tệp
modules.load
Hãy xem bài viết Hỗ trợ mô-đun nhân để biết thêm thông tin chi tiết về tệp cấu hình mô-đun 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 các thiết bị A/B và A/B ảo, device.mk
AB_OTA_PARTITIONS += vendor_dlkm
fstab
Thêm mục sau cho vendor_dlkm vào fstab. Thay đổi cờ theo thiết bị. Hãy dùng CL Add vendor_dlkm to
CF
làm ví dụ.
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 các thiết bị A/B và A/B ảo, device.mk
AB_OTA_PARTITIONS += odm_dlkm
fstab
Thêm mục sau cho odm_dlkm vào fstab. Thay đổi cờ theo thiết bị. Hãy dùng CL Add odm_dlkm to
CF
làm ví dụ.
odm_dlkm /odm_dlkm ext4 noatime,ro,errors=panic wait,logical,first_stage_mount,slotselect,avb
Sao chép mô-đun nhân vào một phân vùng
Để chọn các mô-đun 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.
Vào thời gian xây 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.
Vào thời gian xây 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 nhân của nhà cung cấp
và ODM.
Không bao giờ 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. Điều này gây ra 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 lần lượt trong các thư mục /vendor_dlkm và /odm_dlkm. Khi điều này xảy ra, các symlink 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 nhân dựa trên thứ tự được chỉ định trong modules.load. Quy trình của nhà cung cấp cũng có thể tải các mô-đun vào thời điểm sau đó nếu cần.
Tài liệu có liên quan
Để xem 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 bài viết Hỗ trợ mô-đun nhân.