Add support for separate kernels for boot and recovery [1/2]
* Either as prebuilts, or with separate defconfigs Change-Id: Iad877a5fbef095e3e5d792aebb240c230a829552
This commit is contained in:
@@ -72,16 +72,20 @@ ifneq ($(TARGET_NO_KERNEL_OVERRIDE),true)
|
||||
KERNEL_SRC := $(TARGET_KERNEL_SOURCE)
|
||||
# kernel configuration - mandatory
|
||||
KERNEL_DEFCONFIG := $(TARGET_KERNEL_CONFIG)
|
||||
RECOVERY_DEFCONFIG := $(TARGET_KERNEL_RECOVERY_CONFIG)
|
||||
VARIANT_DEFCONFIG := $(TARGET_KERNEL_VARIANT_CONFIG)
|
||||
SELINUX_DEFCONFIG := $(TARGET_KERNEL_SELINUX_CONFIG)
|
||||
|
||||
## Internal variables
|
||||
DTC := $(HOST_OUT_EXECUTABLES)/dtc
|
||||
KERNEL_OUT := $(TARGET_OUT_INTERMEDIATES)/KERNEL_OBJ
|
||||
RECOVERY_KERNEL_OUT := $(TARGET_OUT_INTERMEDIATES)/RECOVERY_KERNEL_OBJ
|
||||
DTBO_OUT := $(TARGET_OUT_INTERMEDIATES)/DTBO_OBJ
|
||||
DTB_OUT := $(TARGET_OUT_INTERMEDIATES)/DTB_OBJ
|
||||
KERNEL_CONFIG := $(KERNEL_OUT)/.config
|
||||
KERNEL_RELEASE := $(KERNEL_OUT)/include/config/kernel.release
|
||||
RECOVERY_KERNEL_CONFIG := $(RECOVERY_KERNEL_OUT)/.config
|
||||
RECOVERY_KERNEL_RELEASE := $(RECOVERY_KERNEL_OUT)/include/config/kernel.release
|
||||
|
||||
ifeq ($(KERNEL_ARCH),x86_64)
|
||||
KERNEL_DEFCONFIG_ARCH := x86
|
||||
@@ -90,6 +94,7 @@ KERNEL_DEFCONFIG_ARCH := $(KERNEL_ARCH)
|
||||
endif
|
||||
KERNEL_DEFCONFIG_DIR := $(KERNEL_SRC)/arch/$(KERNEL_DEFCONFIG_ARCH)/configs
|
||||
KERNEL_DEFCONFIG_SRC := $(KERNEL_DEFCONFIG_DIR)/$(KERNEL_DEFCONFIG)
|
||||
RECOVERY_KERNEL_DEFCONFIG_SRC := $(KERNEL_DEFCONFIG_DIR)/$(RECOVERY_DEFCONFIG)
|
||||
|
||||
ifneq ($(TARGET_KERNEL_ADDITIONAL_CONFIG),)
|
||||
KERNEL_ADDITIONAL_CONFIG := $(TARGET_KERNEL_ADDITIONAL_CONFIG)
|
||||
@@ -109,6 +114,8 @@ ifeq ($(TARGET_PREBUILT_KERNEL),)
|
||||
endif
|
||||
TARGET_PREBUILT_INT_KERNEL := $(KERNEL_OUT)/arch/$(KERNEL_ARCH)/boot/$(BOARD_KERNEL_IMAGE_NAME)
|
||||
|
||||
TARGET_PREBUILT_INT_RECOVERY_KERNEL := $(RECOVERY_KERNEL_OUT)/arch/$(KERNEL_ARCH)/boot/$(BOARD_KERNEL_IMAGE_NAME)
|
||||
|
||||
ifeq "$(wildcard $(KERNEL_SRC) )" ""
|
||||
ifneq ($(TARGET_PREBUILT_KERNEL),)
|
||||
HAS_PREBUILT_KERNEL := true
|
||||
@@ -180,33 +187,45 @@ else
|
||||
endif
|
||||
endif
|
||||
|
||||
ifeq ($(FULL_KERNEL_BUILD),true)
|
||||
|
||||
ifeq ($(NEED_KERNEL_MODULE_ROOT),true)
|
||||
KERNEL_MODULES_OUT := $(TARGET_ROOT_OUT)
|
||||
KERNEL_DEPMOD_STAGING_DIR := $(KERNEL_BUILD_OUT_PREFIX)$(call intermediates-dir-for,PACKAGING,depmod_recovery)
|
||||
KERNEL_MODULE_MOUNTPOINT :=
|
||||
else ifeq ($(NEED_KERNEL_MODULE_SYSTEM),true)
|
||||
KERNEL_MODULES_OUT := $(TARGET_OUT)
|
||||
KERNEL_DEPMOD_STAGING_DIR := $(KERNEL_BUILD_OUT_PREFIX)$(call intermediates-dir-for,PACKAGING,depmod_system)
|
||||
KERNEL_MODULE_MOUNTPOINT := system
|
||||
$(INSTALLED_SYSTEMIMAGE_TARGET): $(TARGET_PREBUILT_INT_KERNEL)
|
||||
else ifeq ($(NEED_KERNEL_MODULE_VENDOR_OVERLAY),true)
|
||||
KERNEL_MODULES_OUT := $(TARGET_OUT_PRODUCT)/vendor_overlay/$(PRODUCT_TARGET_VNDK_VERSION)
|
||||
KERNEL_DEPMOD_STAGING_DIR := $(KERNEL_BUILD_OUT_PREFIX)$(call intermediates-dir-for,PACKAGING,depmod_product)
|
||||
KERNEL_MODULE_MOUNTPOINT := vendor
|
||||
$(INSTALLED_PRODUCTIMAGE_TARGET): $(TARGET_PREBUILT_INT_KERNEL)
|
||||
ifneq ($(TARGET_KERNEL_RECOVERY_CONFIG),)
|
||||
ifeq "$(wildcard $(KERNEL_SRC) )" ""
|
||||
ifeq ($(TARGET_PREBUILT_RECOVERY_KERNEL),)
|
||||
$(warning ***************************************************************)
|
||||
$(warning * *)
|
||||
$(warning * No recovery kernel source found, and no fallback prebuilt *)
|
||||
$(warning * defined. Please make sure your device is properly *)
|
||||
$(warning * configured to download the kernel repository to $(KERNEL_SRC))
|
||||
$(warning * or remove TARGET_KERNEL_RECOVERY_CONFIG from BoardConfig.mk *)
|
||||
$(warning * *)
|
||||
$(warning * Or, define the TARGET_PREBUILT_RECOVERY_KERNEL *)
|
||||
$(warning * variable with the path to the prebuilt recovery kernel image*)
|
||||
$(warning * in your BoardConfig.mk file *)
|
||||
$(warning * *)
|
||||
$(warning ***************************************************************)
|
||||
$(error "NO RECOVERY KERNEL SOURCE")
|
||||
endif
|
||||
endif
|
||||
ifneq ($(BOARD_USES_RECOVERY_AS_BOOT),)
|
||||
$(warning ********************************************************)
|
||||
$(warning * TARGET_KERNEL_RECOVERY_CONFIG set but device uses *)
|
||||
$(warning * RECOVERY_AS_BOOT, which uses boot kernel as recovery *)
|
||||
$(warning * kernel, as such it's not possible to use different *)
|
||||
$(warning * configs *)
|
||||
$(warning ********************************************************)
|
||||
$(error "INVALID CONFIGURATION")
|
||||
else
|
||||
FULL_RECOVERY_KERNEL_BUILD := true
|
||||
RECOVERY_KERNEL_COPY := true
|
||||
RECOVERY_BIN := $(TARGET_PREBUILT_INT_RECOVERY_KERNEL)
|
||||
endif
|
||||
else
|
||||
KERNEL_MODULES_OUT := $(TARGET_OUT_VENDOR)
|
||||
KERNEL_DEPMOD_STAGING_DIR := $(KERNEL_BUILD_OUT_PREFIX)$(call intermediates-dir-for,PACKAGING,depmod_vendor)
|
||||
KERNEL_MODULE_MOUNTPOINT := vendor
|
||||
$(INSTALLED_VENDORIMAGE_TARGET): $(TARGET_PREBUILT_INT_KERNEL)
|
||||
ifneq ($(TARGET_PREBUILT_RECOVERY_KERNEL),)
|
||||
RECOVERY_BIN := $(TARGET_PREBUILT_RECOVERY_KERNEL)
|
||||
RECOVERY_KERNEL_COPY := true
|
||||
endif
|
||||
endif
|
||||
MODULES_INTERMEDIATES := $(KERNEL_BUILD_OUT_PREFIX)$(call intermediates-dir-for,PACKAGING,kernel_modules)
|
||||
|
||||
KERNEL_VENDOR_RAMDISK_DEPMOD_STAGING_DIR := $(KERNEL_BUILD_OUT_PREFIX)$(call intermediates-dir-for,PACKAGING,depmod_vendor_ramdisk)
|
||||
$(INTERNAL_VENDOR_RAMDISK_TARGET): $(TARGET_PREBUILT_INT_KERNEL)
|
||||
|
||||
ifeq ($(or $(FULL_RECOVERY_KERNEL_BUILD), $(FULL_KERNEL_BUILD)),true)
|
||||
# Add host bin out dir to path
|
||||
PATH_OVERRIDE := PATH=$(KERNEL_BUILD_OUT_PREFIX)$(HOST_OUT_EXECUTABLES):$$PATH
|
||||
ifeq ($(TARGET_KERNEL_CLANG_COMPILE),true)
|
||||
@@ -251,12 +270,37 @@ define internal-make-kernel-target
|
||||
$(PATH_OVERRIDE) $(KERNEL_MAKE_CMD) $(KERNEL_MAKE_FLAGS) -C $(KERNEL_SRC) O=$(KERNEL_BUILD_OUT_PREFIX)$(1) ARCH=$(KERNEL_ARCH) $(KERNEL_CROSS_COMPILE) $(KERNEL_CLANG_TRIPLE) $(KERNEL_CC) $(KERNEL_LD) $(2)
|
||||
endef
|
||||
|
||||
# Generate kernel .config from a given defconfig
|
||||
# $(1): Output path (The value passed to O=)
|
||||
# $(2): The defconfig to process (just the filename, no need for full path to file)
|
||||
define make-kernel-config
|
||||
$(call internal-make-kernel-target,$(1),VARIANT_DEFCONFIG=$(VARIANT_DEFCONFIG) SELINUX_DEFCONFIG=$(SELINUX_DEFCONFIG) $(2))
|
||||
$(hide) if [ ! -z "$(KERNEL_CONFIG_OVERRIDE)" ]; then \
|
||||
echo "Overriding kernel config with '$(KERNEL_CONFIG_OVERRIDE)'"; \
|
||||
echo $(KERNEL_CONFIG_OVERRIDE) >> $(1)/.config; \
|
||||
$(call make-kernel-target,oldconfig); \
|
||||
fi
|
||||
# Create defconfig build artifact
|
||||
$(call internal-make-kernel-target,$(1),savedefconfig)
|
||||
$(hide) if [ ! -z "$(KERNEL_ADDITIONAL_CONFIG)" ]; then \
|
||||
echo "Using additional config '$(KERNEL_ADDITIONAL_CONFIG)'"; \
|
||||
$(KERNEL_SRC)/scripts/kconfig/merge_config.sh -m -O $(1) $(1)/.config $(KERNEL_SRC)/arch/$(KERNEL_ARCH)/configs/$(KERNEL_ADDITIONAL_CONFIG); \
|
||||
$(call make-kernel-target,KCONFIG_ALLCONFIG=$(KERNEL_BUILD_OUT_PREFIX)$(1)/.config alldefconfig); \
|
||||
fi
|
||||
endef
|
||||
|
||||
# Make a kernel target
|
||||
# $(1): The kernel target to build (eg. defconfig, modules, modules_install)
|
||||
define make-kernel-target
|
||||
$(call internal-make-kernel-target,$(KERNEL_OUT),$(1))
|
||||
endef
|
||||
|
||||
# Make a recovery kernel target
|
||||
# $(1): The kernel target to build (eg. defconfig, modules, modules_install)
|
||||
define make-recovery-kernel-target
|
||||
$(call internal-make-kernel-target,$(RECOVERY_KERNEL_OUT),$(1))
|
||||
endef
|
||||
|
||||
# Make a DTBO target
|
||||
# $(1): The DTBO target to build (eg. dtbo.img, defconfig)
|
||||
define make-dtbo-target
|
||||
@@ -291,6 +335,35 @@ define build-image-kernel-modules-lineage
|
||||
done
|
||||
endef
|
||||
|
||||
endif # FULL_RECOVERY_KERNEL_BUILD or FULL_KERNEL_BUILD
|
||||
|
||||
ifeq ($(FULL_KERNEL_BUILD),true)
|
||||
|
||||
ifeq ($(NEED_KERNEL_MODULE_ROOT),true)
|
||||
KERNEL_MODULES_OUT := $(TARGET_ROOT_OUT)
|
||||
KERNEL_DEPMOD_STAGING_DIR := $(KERNEL_BUILD_OUT_PREFIX)$(call intermediates-dir-for,PACKAGING,depmod_recovery)
|
||||
KERNEL_MODULE_MOUNTPOINT :=
|
||||
else ifeq ($(NEED_KERNEL_MODULE_SYSTEM),true)
|
||||
KERNEL_MODULES_OUT := $(TARGET_OUT)
|
||||
KERNEL_DEPMOD_STAGING_DIR := $(KERNEL_BUILD_OUT_PREFIX)$(call intermediates-dir-for,PACKAGING,depmod_system)
|
||||
KERNEL_MODULE_MOUNTPOINT := system
|
||||
$(INSTALLED_SYSTEMIMAGE_TARGET): $(TARGET_PREBUILT_INT_KERNEL)
|
||||
else ifeq ($(NEED_KERNEL_MODULE_VENDOR_OVERLAY),true)
|
||||
KERNEL_MODULES_OUT := $(TARGET_OUT_PRODUCT)/vendor_overlay/$(PRODUCT_TARGET_VNDK_VERSION)
|
||||
KERNEL_DEPMOD_STAGING_DIR := $(KERNEL_BUILD_OUT_PREFIX)$(call intermediates-dir-for,PACKAGING,depmod_product)
|
||||
KERNEL_MODULE_MOUNTPOINT := vendor
|
||||
$(INSTALLED_PRODUCTIMAGE_TARGET): $(TARGET_PREBUILT_INT_KERNEL)
|
||||
else
|
||||
KERNEL_MODULES_OUT := $(TARGET_OUT_VENDOR)
|
||||
KERNEL_DEPMOD_STAGING_DIR := $(KERNEL_BUILD_OUT_PREFIX)$(call intermediates-dir-for,PACKAGING,depmod_vendor)
|
||||
KERNEL_MODULE_MOUNTPOINT := vendor
|
||||
$(INSTALLED_VENDORIMAGE_TARGET): $(TARGET_PREBUILT_INT_KERNEL)
|
||||
endif
|
||||
MODULES_INTERMEDIATES := $(KERNEL_BUILD_OUT_PREFIX)$(call intermediates-dir-for,PACKAGING,kernel_modules)
|
||||
|
||||
KERNEL_VENDOR_RAMDISK_DEPMOD_STAGING_DIR := $(KERNEL_BUILD_OUT_PREFIX)$(call intermediates-dir-for,PACKAGING,depmod_vendor_ramdisk)
|
||||
$(INTERNAL_VENDOR_RAMDISK_TARGET): $(TARGET_PREBUILT_INT_KERNEL)
|
||||
|
||||
$(KERNEL_OUT):
|
||||
mkdir -p $(KERNEL_OUT)
|
||||
|
||||
@@ -299,19 +372,7 @@ $(KERNEL_ADDITIONAL_CONFIG_OUT): $(KERNEL_OUT)
|
||||
|
||||
$(KERNEL_CONFIG): $(KERNEL_DEFCONFIG_SRC) $(KERNEL_ADDITIONAL_CONFIG_OUT)
|
||||
@echo "Building Kernel Config"
|
||||
$(call make-kernel-target,VARIANT_DEFCONFIG=$(VARIANT_DEFCONFIG) SELINUX_DEFCONFIG=$(SELINUX_DEFCONFIG) $(KERNEL_DEFCONFIG))
|
||||
$(hide) if [ ! -z "$(KERNEL_CONFIG_OVERRIDE)" ]; then \
|
||||
echo "Overriding kernel config with '$(KERNEL_CONFIG_OVERRIDE)'"; \
|
||||
echo $(KERNEL_CONFIG_OVERRIDE) >> $(KERNEL_OUT)/.config; \
|
||||
$(call make-kernel-target,oldconfig); \
|
||||
fi
|
||||
# Create defconfig build artifact
|
||||
$(call make-kernel-target,savedefconfig)
|
||||
$(hide) if [ ! -z "$(KERNEL_ADDITIONAL_CONFIG)" ]; then \
|
||||
echo "Using additional config '$(KERNEL_ADDITIONAL_CONFIG)'"; \
|
||||
$(KERNEL_SRC)/scripts/kconfig/merge_config.sh -m -O $(KERNEL_OUT) $(KERNEL_OUT)/.config $(KERNEL_SRC)/arch/$(KERNEL_ARCH)/configs/$(KERNEL_ADDITIONAL_CONFIG); \
|
||||
$(call make-kernel-target,KCONFIG_ALLCONFIG=$(KERNEL_BUILD_OUT_PREFIX)$(KERNEL_OUT)/.config alldefconfig); \
|
||||
fi
|
||||
$(call make-kernel-config,$(KERNEL_OUT),$(KERNEL_DEFCONFIG))
|
||||
|
||||
$(TARGET_PREBUILT_INT_KERNEL): $(KERNEL_CONFIG) $(DEPMOD) $(DTC)
|
||||
@echo "Building Kernel Image ($(BOARD_KERNEL_IMAGE_NAME))"
|
||||
@@ -396,6 +457,22 @@ endif # BOARD_INCLUDE_DTB_IN_BOOTIMG
|
||||
|
||||
endif # FULL_KERNEL_BUILD
|
||||
|
||||
ifeq ($(FULL_RECOVERY_KERNEL_BUILD),true)
|
||||
|
||||
$(RECOVERY_KERNEL_OUT):
|
||||
mkdir -p $(RECOVERY_KERNEL_OUT)
|
||||
|
||||
$(RECOVERY_KERNEL_CONFIG): $(RECOVERY_KERNEL_DEFCONFIG_SRC)
|
||||
@echo "Building Recovery Kernel Config"
|
||||
$(call make-kernel-config,$(RECOVERY_KERNEL_OUT),$(RECOVERY_DEFCONFIG))
|
||||
|
||||
$(TARGET_PREBUILT_INT_RECOVERY_KERNEL): $(RECOVERY_KERNEL_CONFIG) $(DEPMOD) $(DTC)
|
||||
@echo "Building Recovery Kernel Image ($(BOARD_KERNEL_IMAGE_NAME))"
|
||||
$(call make-recovery-kernel-target,$(BOARD_KERNEL_IMAGE_NAME))
|
||||
|
||||
|
||||
endif
|
||||
|
||||
## Install it
|
||||
|
||||
ifeq ($(NEEDS_KERNEL_COPY),true)
|
||||
@@ -407,6 +484,18 @@ $(file) : $(KERNEL_BIN) | $(ACP)
|
||||
ALL_PREBUILT += $(INSTALLED_KERNEL_TARGET)
|
||||
endif
|
||||
|
||||
ifeq ($(RECOVERY_KERNEL_COPY),true)
|
||||
file := $(INSTALLED_RECOVERY_KERNEL)
|
||||
ALL_PREBUILT += $(file)
|
||||
$(file) : $(RECOVERY_BIN) | $(ACP)
|
||||
$(transform-prebuilt-to-target)
|
||||
|
||||
ALL_PREBUILT += $(INSTALLED_RECOVERY_KERNEL)
|
||||
endif
|
||||
|
||||
.PHONY: recovery-kernel
|
||||
recovery-kernel: $(INSTALLED_RECOVERY_KERNEL)
|
||||
|
||||
.PHONY: kernel
|
||||
kernel: $(INSTALLED_KERNEL_TARGET)
|
||||
|
||||
|
Reference in New Issue
Block a user