공급업체/ODM DLKM 파티션

Android 11에는 일반 커널 이미지 및 공급업체 부팅 파티션의 개념이 도입되었습니다. 공급업체 부트 파티션은 GKI와 호환되는 커널 모듈을 저장하고 첫 번째 단계 init에 의해 로드됩니다. Android 11 릴리스 이전의 커널 모듈도 공급업체 및 ODM 파티션에 저장되며 공급업체 프로세스에 의해 로드됩니다.

Android 11 이상에서는 커널 및 모든 커널 모듈을 나머지 파티션과 독립적으로 업데이트할 수 있습니다. 공급업체 파티션에 저장된 커널 모듈에 대한 업데이트를 활성화하려면(공급업체 파티션 업데이트 없이) 모든 공급업체 파티션 모듈을 공급업체 DLKM (동적으로 로드할 수 있는 커널 모듈)이라는 새 파티션으로 이동합니다. 그런 다음 이 파티션을 독립적으로 업데이트할 수 있습니다. 마찬가지로 ODM 파티션에 저장된 모든 커널 모듈을 ODM DLKM 이라는 새 파티션으로 이동할 수 있습니다. 이 파티션은 독립적으로 업데이트할 수도 있습니다.

파티션 위치

vendor_dlkmodm_dlkm 파티션은 다른 동적 파티션으로 수퍼 파티션에 있습니다.

/vendor/lib/modules의 vendor_dlkm 내용

  • 공급업체 커널 모듈
  • modprobe 구성 파일
  • modules.load 파일

/odm/lib/modules의 odm_dlkm 내용

  • ODM 커널 모듈
  • modprobe 구성 파일
  • modules.load 파일

커널 모듈 구성 파일에 대한 자세한 내용은 커널 모듈 지원 을 참조하십시오.

빌드 지원

vendor_dlkmodm_dlkm 을 빌드하는 것은 다른 동적 파티션을 빌드하는 것과 유사한 프로세스입니다.

vendor_dlkm 빌드 예제

아래 예와 같이 vendor_dlkm 을 빌드합니다.

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

<GROUP_NAME> 을 업데이트 그룹의 적절한 이름으로 바꿉니다. 업데이트 그룹은 공급업체 파티션이 속한 그룹이어야 합니다.

A/B 및 가상 A/B 장치의 경우 device.mk

AB_OTA_PARTITIONS += vendor_dlkm

fstab

fstab에 vendor_dlkm 에 대한 다음 항목을 추가합니다. 장치에 따라 플래그를 변경하십시오. CL Add vendor_dlkm to CF 를 예로 사용합니다.

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

odm_dlkm 빌드 예

아래 예와 같이 odm_dlkm 을 빌드합니다.

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

A/B 및 가상 A/B 장치의 경우 device.mk

AB_OTA_PARTITIONS += odm_dlkm

fstab

odm_dlkm 에 대한 다음 항목을 fstab에 추가합니다. 장치에 따라 플래그를 변경하십시오. CL Add odm_dlkm to CF 를 예로 사용합니다.

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

커널 모듈을 파티션으로 복사

vendor_dlkm 파티션에 복사하려는 커널 모듈을 선택하려면 BOARD_VENDOR_KERNEL_MODULES 에 나열합니다.

BOARD_VENDOR_KERNEL_MODULES_LOAD modules.load 지정할 수 있습니다.

빌드 시 BOARD_VENDOR_KERNEL_MODULES 에 나열된 모듈은 $ANDROID_PRODUCT_OUT/vendor_dlkm/lib/modules 에 설치됩니다. /vendor_dlkm/lib/modules 로 연결되는 /vendor/lib/modules 에 심볼릭 링크가 생성됩니다.

마찬가지로 odm_dlkm 파티션에 복사하려는 커널 모듈을 선택하려면 BOARD_ODM_KERNEL_MODULES 에 나열합니다. 플랫폼 빌드는 모듈에서 depmod 를 실행하고 depmod 출력 파일을 이미지에 복사합니다. 빌드는 modules.load 파일을 만들고 이미지에 저장합니다. 이 파일에는 BOARD_ODM_KERNEL_MODULES 에 나열된 모든 모듈이 포함되어 있습니다.

BOARD_ODM_KERNEL_MODULES_LOAD modules.load 지정할 수 있습니다.

빌드 시 BOARD_ODM_KERNEL_MODULES 에 나열된 모듈은 $ANDROID_PRODUCT_OUT/odm_dlkm/lib/modules 에 설치됩니다. /odm_dlkm/lib/modules 로 연결되는 /odm/lib/modules 에 심볼릭 링크가 생성됩니다.

공급업체 및 ODM 커널 모듈에는 항상 /vendor/lib/modules/odm/lib/modules 를 사용하십시오.

/vendor_dlkm/lib/modules를 사용하지 마십시오. vendor_dlkm 파티션이 없는 장치는 BOARD_VENDOR_KERNEL_MODULES/vendor/lib/modules 에 직접 설치합니다. 이것은 /vendor_dlkm/lib/modules 가 존재하지 않기 때문에 문제가 됩니다.

/odm_dlkm/lib/modules를 사용하지 마십시오. odm_dlkm 파티션이 없는 장치는 BOARD_ODM_KERNEL_MODULES/odm/lib/modules 에 직접 설치합니다. 이것은 /odm_dlkm/lib/modules 가 존재하지 않기 때문에 문제가 됩니다.

파티션 마운팅 및 모듈 로딩

first_stage_init 동안 vendor_dlkmodm_dlkm 파티션이 각각 /vendor_dlkm/odm_dlkm 파티션에 마운트됩니다. 이 경우 /vendor/lib/modules/odm/lib/modules 의 심볼릭 링크를 사용할 수 있게 됩니다.

그런 다음 공급업체 프로세스(예: '.rc' 스크립트)는 modules.load 에 지정된 순서에 따라 커널 모듈을 로드할 수 있습니다. 공급업체 프로세스는 필요한 경우 나중에 모듈을 로드할 수도 있습니다.

공급업체 부팅 파티션(공급업체 RAMDisk 포함) 생성에 관한 문서는 커널 모듈 지원 을 참조하십시오.