Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 57042ba4 authored by Christopher N. Hesse's avatar Christopher N. Hesse
Browse files

build: tasks: kernel: Add support for MediaTek dtbo images

MediaTek uses "odmdtbo.img" on recent Helio SoCs.

Some MTK targets have a dtbo partition, but not vbmeta partition.
For these, the avb hash footer signing must be omitted.

There are 3 new variables introduced as part of this change:

  TARGET_DTBO_IMAGE_NAME

    The name of your dtbo image, mostly relevant for AVB signing.
    This variable must be set in all cases.

  TARGET_DTBO_IMAGE_TARGET

    The build target (PHONY) that your kernel makefile (Android[Kernel].mk)
    uses to build the dtbo image.

  TARGET_DTBO_IMAGE_PATH

    The output path to the generated dtbo image as dictated by the kernel.
    This shall be relative to $(PRODUCT_OUT).

Change-Id: I52de8cfc38c89d053daeb9f10555479d70f8ac03
parent b0572eb5
Loading
Loading
Loading
Loading
+22 −4
Original line number Diff line number Diff line
@@ -69,6 +69,14 @@
#                                          modules in root instead of vendor
#   NEED_KERNEL_MODULE_SYSTEM          = Optional, if true, install kernel
#                                          modules in system instead of vendor
#
#   TARGET_DTBO_IMAGE_NAME             = Device Tree Binary Overlay (DTBO) image name
#                                          Should be 'dtbo' for most devices
#                                          Some MediaTek devices use 'odmdtbo'
#   TARGET_DTBO_IMAGE_TARGET           = Similar to TARGET_DTBO_IMAGE_NAME, but the full file name
#                                          Should be 'dtbo.img' for most devices
#                                          Some MediaTek devices use 'odmdtboimage'
#   TARGET_DTBO_IMAGE_PATH             = Path to generated DTBO image in inline kernel build tree

ifneq ($(TARGET_NO_KERNEL),true)

@@ -114,6 +122,14 @@ ifneq ($(TARGET_KERNEL_APPEND_DTB),)
$(error TARGET_KERNEL_APPEND_DTB is deprecated.)
endif
TARGET_PREBUILT_INT_KERNEL := $(KERNEL_OUT)/arch/$(KERNEL_ARCH)/boot/$(BOARD_KERNEL_IMAGE_NAME)
TARGET_DTBO_IMAGE_NAME ?= dtbo
TARGET_DTBO_IMAGE_TARGET ?= dtbo.img
TARGET_DTBO_IMAGE_PATH ?= dtbo/arch/$(KERNEL_ARCH)/boot/$(TARGET_DTBO_IMAGE_NAME).img

dtbo_avbtool_signing_enabled :=
ifeq ($(BOARD_AVB_ENABLE), true)
  dtbo_avbtool_signing_enabled := true
endif

# Clear this first to prevent accidental poisoning from env
MAKE_FLAGS :=
@@ -419,16 +435,18 @@ alldefconfig:

endif # FULL_KERNEL_BUILD

TARGET_PREBUILT_DTBO = $(PRODUCT_OUT)/dtbo/arch/$(KERNEL_ARCH)/boot/dtbo.img
TARGET_PREBUILT_DTBO = $(PRODUCT_OUT)/$(TARGET_DTBO_IMAGE_PATH)
$(TARGET_PREBUILT_DTBO): $(AVBTOOL)
	echo -e ${CL_GRN}"Building DTBO.img"${CL_RST}
	echo -e ${CL_GRN}"Building $(TARGET_DTBO_IMAGE_NAME).img"${CL_RST}
	$(MAKE) $(MAKE_FLAGS) -C $(KERNEL_SRC) O=$(PRODUCT_OUT)/dtbo ARCH=$(KERNEL_ARCH) $(KERNEL_CROSS_COMPILE) $(KERNEL_CLANG_TRIPLE) $(KERNEL_CC) $(KERNEL_DEFCONFIG)
	$(MAKE) $(MAKE_FLAGS) -C $(KERNEL_SRC) O=$(PRODUCT_OUT)/dtbo ARCH=$(KERNEL_ARCH) $(KERNEL_CROSS_COMPILE) $(KERNEL_CLANG_TRIPLE) $(KERNEL_CC) dtbo.img
	$(MAKE) $(MAKE_FLAGS) -C $(KERNEL_SRC) O=$(PRODUCT_OUT)/dtbo ARCH=$(KERNEL_ARCH) $(KERNEL_CROSS_COMPILE) $(KERNEL_CLANG_TRIPLE) $(KERNEL_CC) $(TARGET_DTBO_IMAGE_TARGET)
ifdef dtbo_avbtool_signing_enabled
	$(AVBTOOL) add_hash_footer \
		--image $@ \
		--partition_size $(BOARD_DTBOIMG_PARTITION_SIZE) \
		--partition_name dtbo $(INTERNAL_AVB_DTBO_SIGNING_ARGS) \
		--partition_name $(TARGET_DTBO_IMAGE_NAME) $(INTERNAL_AVB_DTBO_SIGNING_ARGS) \
		$(BOARD_AVB_DTBO_ADD_HASH_FOOTER_ARGS)
endif

## Install it