Nhà cung cấp / Phân vùng ODM DLKM

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 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 hạt nhân tương thích với GKI và được tải bởi init giai đoạn đầu tiên. Các mô-đun hạt 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, kernel và tất cả các mô-đun kernel có thể được cập nhật độc lập với các phân vùng còn lại. Để kích hoạt các bản cập nhật cho các mô-đun hạt nhân được lưu trữ trong phân vùng của nhà cung cấp (không có bả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 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 hạt 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ể di chuyển tất cả các mô-đun hạt nhân được lưu trữ trong phân vùng ODM sang phân vùng mới có tên ODM DLKM . Phân vùng này cũng có thể được cập nhật độc lập.

Vị trí phân vùng

Các phân vùng vendor_dlkmodm_dlkm được đặt trong siêu phân vùng dưới dạng một phân vùng động khác.

nội dung của nhà cung cấp_dlkm trong /vendor/lib/modules

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

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

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

Xem Hỗ trợ mô-đun hạt nhân để biết thêm chi tiết về các tệp cấu hình mô-đun hạt nhân.

Xây dựng hỗ trợ

Xây dựng vendor_dlkmodm_dlkm là một quá trình tương tự như xây dựng các phân vùng động khác.

ví dụ về bản dựng của nhà cung cấp_dlkm

Xây dựng vendor_dlkm như trong ví dụ bên dưới.

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 nhà cung cấp.

Đối với thiết bị A/B và 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ị. Sử dụng CL Thêm vendor_dlkm vào 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

Xây dựng odm_dlkm như trong ví dụ bên dưới.

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à 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ị. Sử dụng CL Thêm odm_dlkm vào 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 hạt nhân vào một phân vùng

Để chọn các mô-đun hạt nhân bạn muốn sao chép vào phân vùng vendor_dlkm , hãy liệt kê chúng trong BOARD_VENDOR_KERNEL_MODULES .

Nếu bạn 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 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 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 hạt nhân bạn muốn sao chép vào phân vùng 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 và sao chép các tệp đầu ra depmod vào hình ảnh. Bản dựng tạo một tệp modules.load và lưu trữ nó 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 bạn muốn ghi đè nội dung của modules.load , bạn có thể chỉ định nó trong BOARD_ODM_KERNEL_MODULES_LOAD .

Tại thời điểm 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 liên kết tượng trưng sẽ đượ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 các mô-đun hạt 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 . Đâ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 . Đây là 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_dlkmodm_dlkm lần lượt được gắn vào các phân vùng /vendor_dlkm/odm_dlkm . Khi đ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ẽ khả dụng.

Sau đó, quy trình của nhà cung cấp (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 . Quy trình của nhà cung cấp cũng có thể tải các mô-đun sau, nếu cần.

Để biết tài liệu về việc 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 Hỗ trợ mô-đun hạt nhân .