Phân vùng DLKM và ODM của nhà cung cấp

Android 11 giới thiệu khái niệm về Hạt nhân chung Hình ảnh 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ữ nhân hệ điều hành các mô-đun tương thích với GKI và được tải bằng khởi tạo giai đoạn đầu tiên. Mô-đun hạt nhân trước bản phát hành của Android 11 cũng được lưu trữ trong phân vùng nhà cung cấp và ODM, đồng thời được tải bằng quy trình của nhà cung cấp.

Đối với Android 11 trở lên, nhân và tất cả nhân mô-đun có thể được cập nhật độc lập với phần còn lại của các phân vùng. Để bật bản cập nhật cho các mô-đun nhân được lưu trữ trong phân vùng nhà cung cấp (không có nhà cung cấp cập nhật phân vùng), hãy di chuyển tất 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à Nhà cung cấp DLKM (mô-đun nhân hệ điều hành có thể tải động). Sau đó, bạn có thể cập nhật 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. Phân vùng này có thể là cũng được cập nhật độc lập.

Vị trí phân vùng

Phân vùng vendor_dlkmodm_dlkm nằm trong phân vùng cấp cao dưới dạng một phân vùng động khác.

Nội dung provider_dlkm trong /vendor/lib/modules

  • Mô-đun nhân của nhà cung cấp
  • modprobe tệp cấu hình
  • Một tệp modules.load

Nội dung odm_dlkm trong /odm/lib/modules

  • Mô-đun nhân ODM
  • modprobe tệp cấu hình
  • Một tệp modules.load

Xem Mô-đun Kernel Hỗ trợ để 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

Quá trình tạo vendor_dlkmodm_dlkm là một quy trình tương tự như quy trình tạo phân vùng động.

Ví dụ về bản dựng provider_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 bản cập nhật nhóm. Nhóm cập nhật phải là nhóm chứa phân vùng nhà cung cấp.

Đối với thiết bị A/B và thiết bị ảo A/B, device.mk

AB_OTA_PARTITIONS += vendor_dlkm

thẻ fstab

Thêm mục nhập sau cho vendor_dlkm vào fstab. Thay đổi cờ theo thiết bị. Sử dụng CL Thêm vendor_dlkm vào Tỷ lệ phần trăm (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 thiết bị A/B và thiết bị ảo A/B: device.mk

AB_OTA_PARTITIONS += odm_dlkm

thẻ fstab

Thêm mục nhập sau cho odm_dlkm vào fstab. Thay đổi cờ theo thiết bị. Sử dụng CL Thêm odm_dlkm vào Tỷ lệ phần trăm (CF) làm ví dụ.

odm_dlkm /odm_dlkm ext4 noatime,ro,errors=panic wait,logical,first_stage_mount,slotselect,avb

Sao chép các mô-đun nhân vào một phân vùng

Cách chọn mô-đun nhân mà bạn muốn sao chép vào phân vùng vendor_dlkm: liệt kê chúng 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 này trong BOARD_VENDOR_KERNEL_MODULES_LOAD.

Tại thời điểm xây dựng, các mô-đun có trong BOARD_VENDOR_KERNEL_MODULES sẽ được cài đặt trong $ANDROID_PRODUCT_OUT/vendor_dlkm/lib/modules. Mối liên kết tượng trưng được tạo lúc /vendor/lib/modules dẫn đến /vendor_dlkm/lib/modules.

Tương tự, để chọn mô-đun nhân mà bạn muốn sao chép vào odm_dlkm hãy liệt kê chúng trong BOARD_ODM_KERNEL_MODULES. Bản dựng nền tảng chạy depmod trên các mô-đun rồi sao chép 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 này trong BOARD_ODM_KERNEL_MODULES_LOAD.

Tại thời điểm xây dựng, các mô-đun liệt kê trong BOARD_ODM_KERNEL_MODULES được cài đặt trong $ANDROID_PRODUCT_OUT/odm_dlkm/lib/modules. Một 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/odm/lib/modules cho nhà cung cấp và mô-đun nhân ODM.

Tuyệt đối không sử dụng /vendor_dlkm/lib/modules. Thiết bị không có vendor_dlkm cài đặt phân vùng BOARD_VENDOR_KERNEL_MODULES đến /vendor/lib/modules trực tiếp. Đâ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 cài đặt trực tiếp BOARD_ODM_KERNEL_MODULES vào /odm/lib/modules. Đây là có 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 suốt first_stage_init, các phân vùng vendor_dlkmodm_dlkm được gắn trong phân vùng /vendor_dlkm/odm_dlkm tương ứng. Thời gian điều này xảy ra, các liên kết tượng trưng tại /vendor/lib/modules/odm/lib/modules sẽ trở thành sẵn có.

Sau đó, quy trình của nhà cung cấp (như tập lệnh .rc) có thể tải các mô-đun nhân dựa trên cho đơn đặt hàng được chỉ định trong modules.load. Quy trình của nhà cung cấp cũng có thể tải mô-đun sau đó, nếu cần.

Để xem tài liệu về việc tạo phân vùng khởi động nhà cung cấp ( chứa RAMDisk của nhà cung cấp), tham khảo Mô-đun Kernel Hỗ trợ.