Android 11에서는 일반 커널 이미지와 공급업체 부팅 파티션 개념을 도입합니다. 공급업체 부팅 파티션은 GKI와 호환되는 커널 모듈을 저장하며 1단계 init에서 로드됩니다. Android 11 출시 전의 커널 모듈도 공급업체 및 ODM 파티션에 저장되며 공급업체 프로세스로 로드됩니다.
Android 11 및 이후 버전에서는 커널과 모든 커널 모듈을 나머지 파티션과는 별개로 업데이트할 수 있습니다. 공급업체 파티션 업데이트 없이 공급업체 파티션에 저장된 커널 모듈의 업데이트를 사용 설정하려면 모든 공급업체 파티션 모듈을 공급업체 DLKM(동적으로 로드 가능한 커널 모듈)이라는 새 파티션으로 이동합니다. 그러면 이 파티션을 독립적으로 업데이트할 수 있습니다. 마찬가지로 ODM 파티션에 저장된 모든 커널 모듈을 ODM DLKM이라는 새 파티션으로 이동할 수 있습니다. 이 파티션도 독립적으로 업데이트할 수 있습니다.
파티션 위치
vendor_dlkm
및 odm_dlkm
파티션은 super 파티션에 다른 동적 파티션으로 있습니다.
/vendor/lib/modules의 vendor_dlkm 콘텐츠
- 공급업체 커널 모듈
modprobe
구성 파일modules.load
파일
/odm/lib/modules의 odm_dlkm 콘텐츠
- ODM 커널 모듈
modprobe
구성 파일modules.load
파일
커널 모듈 구성 파일에 관한 자세한 내용은 커널 모듈 지원을 참고하세요.
빌드 지원
vendor_dlkm
과 odm_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_dlkm
및 odm_dlkm
파티션은 각각 /vendor_dlkm
및 /odm_dlkm
파티션에 마운트됩니다. 이렇게 되면 /vendor/lib/modules
와 /odm/lib/modules
의 심볼릭 링크를 사용할 수 있게 됩니다.
그러면 공급업체 프로세스(예: '.rc' 스크립트)는 modules.load
에 지정된 순서에 따라 커널 모듈을 로드할 수 있습니다. 공급업체 프로세스는 필요한 경우 나중에 모듈도 로드할 수 있습니다.
관련 문서
공급업체 램디스크가 포함된 공급업체 부팅 파티션 만들기에 관한 문서는 커널 모듈 지원을 참고하세요.