공급업체/ODM DLKM 파티션

Android 11에서는 일반 커널 이미지와 공급업체 부팅 파티션 개념을 도입합니다. 공급업체 부팅 파티션은 GKI와 호환되는 커널 모듈을 저장하며 1단계 init에서 로드됩니다. Android 11 출시 전의 커널 모듈도 공급업체 및 ODM 파티션에 저장되며 공급업체 프로세스로 로드됩니다.

Android 11 및 이후 버전에서는 커널과 모든 커널 모듈을 나머지 파티션과는 별개로 업데이트할 수 있습니다. 공급업체 파티션 업데이트 없이 공급업체 파티션에 저장된 커널 모듈의 업데이트를 사용 설정하려면 모든 공급업체 파티션 모듈을 공급업체 DLKM(동적으로 로드 가능한 커널 모듈)이라는 새 파티션으로 이동합니다. 그러면 이 파티션을 독립적으로 업데이트할 수 있습니다. 마찬가지로 ODM 파티션에 저장된 모든 커널 모듈을 ODM DLKM이라는 새 파티션으로 이동할 수 있습니다. 이 파티션도 독립적으로 업데이트할 수 있습니다.

파티션 위치

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

/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

다음 vendor_dlkm 항목을 fstab에 추가합니다. 기기에 따라 플래그를 변경합니다. 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에 나열합니다.

modules.load의 콘텐츠를 재정의하려면 BOARD_VENDOR_KERNEL_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에 나열된 모듈이 모두 포함되어 있습니다.

modules.load의 콘텐츠를 재정의하려면 BOARD_ODM_KERNEL_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에 지정된 순서에 따라 커널 모듈을 로드할 수 있습니다. 공급업체 프로세스는 필요한 경우 나중에 모듈도 로드할 수 있습니다.

공급업체 램디스크가 포함된 공급업체 부팅 파티션 만들기에 관한 문서는 커널 모듈 지원을 참고하세요.