在AOSP中使用libcryptsetup编译ramdisk时,需要在BoardConfig.mk文件中添加相应的配置项,以解决编译失败的问题。具体步骤如下:
BOARD_BUILD_RAMDISK_WITH_CRYPTO := true
CRYPTO_TYPE := cryptsetup
LOCAL_CFLAGS := \
-DSYSTEM_ROOT_IMAGE='"$(PRODUCT_OUT)/system.img"' \
-DOVERRIDE_ANDROID_FILESYSTEM_CONFIG \
-DANDROID_FILESYSTEM_CONFIG=\"$(COMMON_OUT_DIR)/etc/filesystems_config.h\" \
-DSHORT_VERSION='"$(PLATFORM_VERSION)"' \
-DPLATFORM_VERSION_UNSIGNED=$(PLATFORM_VERSION_UNSIGNED) \
-DPLATFORM_SDK_VERSION=$(PLATFORM_SDK_VERSION) \
-DSYSTEM_DEFAULT_PROPERTIES_PATH=\"$(COMMON_OUT_DIR)/etc/system.default.prop\" \
-DSYSTEM_ENCRYPTED_PROPERTIES_PATH=\"$(COMMON_OUT_DIR)/etc/system.encrypted.props\" \
-DSYSTEM_SERVER_CONFIG_PATH=\"$(COMMON_OUT_DIR)/etc/server_config.xml\" \
-DSYSTEM_SECURE_PROPERTIES_PATH=\"$(COMMON_OUT_DIR)/etc/security.config\" \
-DANDROID_RAMDISK_SOURCE_PREFIX=\"$(TARGET_PREBUILT_KERNEL_RAMDISK_DIR)/\" \
-I$(PRIVATE) \
-I$(PRIVATE)/include \
-I$(PRIVATE)/../sepolicy/include \
-I$(PRIVATE)/../libcryptfs/include
// 添加上面最后一行,引入libcryptfs库
BOARD_PREBUILT_RAMDISK_DIR := $(PRODUCT_OUT)/ramdisk_encrypt
# if ramdisk encrypt is true, the key is generated from
# the 32byte long CRYPTO_PASSWORD_ANDROID, otherwise a randomly
# generated key is used.
BOARD_RECOVERYIMAGE_PARTITION_SIZE := 128M
BOARD_RECOVERYRAMDISK_PARTITION_SIZE := 32M
ifeq ($(BOARD_BUILD_RAMDISK_WITH_CRYPTO), true)
ifneq ($(CRYPTO_TYPE),cryptfs)
$(error Invalid CRYPTO_TYPE=$(CRYPTO_TYPE), supported values: cryptfs)
endif
PRODUCT_BUILD_WITH_ENCRYPTED_RAMDISK := true
PRODUCT_SYSTEM_RAMDISK_ENCRYPT := true
# first 16 bytes of crypto key will be reserved
PRODUCT_ENCRYPTED_RAMDISK_EXTRA_ARGS := "--crypto_keyspace 32 --crypto_blkdev nodev --crypto_type cryptfs"
CRYPTO_ALGORITHM := aes-cbc-essiv:sha256
CRYPTO_KEYSIZE := 256
ENCRYPT_IN_KERNEL := true
TARGET_PROVIDES_INIT := true
# Include libcryptfs libraries in the target
PRODUCT_PACKAGES += libcryptfs libcryptfs-utils
ifeq ($(TARGET_INIT_VENDOR),)
TARGET_INIT_VENDOR := $(LOCAL_PATH)/../../init/init_vendor
endif
endif
# Property indicating the presence of a prebuilt encrypted ramdisk
# image. This is set by the build system when building an OTA for a
# device with encrypted ramdisk support.
#
# After checking the initial state to see if ramdisk encryption is
# enabled, the script at /init.encrypted-ramdisk will be executed,
# which will ensure that the device can mount the encrypted partitions
# required for decrypting the ramdisk. The actual encryption of the
# ram