blob: 6d04981d952d85d20087e4fe2c71476ef807a0ee [file] [log] [blame]
# Copyright 2018 The Fuchsia Authors
#
# Use of this source code is governed by a MIT-style
# license that can be found in the LICENSE file or at
# https://opensource.org/licenses/MIT
# Rules for building boot shim and prepending it to ZBI.
ifeq ($(PLATFORM_USE_SHIM),true)
ifeq ($(PLATFORM_BOARD_NAME),)
$(error PLATFORM_BOARD_NAME not defined)
endif
BOARD_ZIRCON_BOOTIMAGE := $(BUILDDIR)/$(PLATFORM_BOARD_NAME)-zircon-bootimage.bin
ifeq ($(TARGET),arm64)
include kernel/target/arm64/boot-shim/rules.mk
else
$(error PLATFORM_USE_SHIM not supported for target $(TARGET))
endif
# capture board specific variables for the build rules
$(BOARD_ZIRCON_BOOTIMAGE): BOARD_ZIRCON_BOOTIMAGE:=$(BOARD_ZIRCON_BOOTIMAGE)
$(BOARD_ZIRCON_BOOTIMAGE): BOOT_SHIM_BIN:=$(BOOT_SHIM_BIN)
# prepend shim to the zircon bootimage
$(BOARD_ZIRCON_BOOTIMAGE): $(ZIRCON_BOOTIMAGE) $(BOOT_SHIM_BIN)
$(call BUILDECHO,generating $@)
@$(MKDIR)
$(NOECHO)cat $(BOOT_SHIM_BIN) $(ZIRCON_BOOTIMAGE) > $@
GENERATED += $(BOARD_ZIRCON_BOOTIMAGE)
EXTRA_BUILDDEPS += $(BOARD_ZIRCON_BOOTIMAGE)
endif # PLATFORM_USE_SHIM
# Rules for building an Android style boot.img containing the boot shim and ZBI.
# Bootloaders often require that the image be gzip compressed and followed by a
# Linux device tree binary, so a dummy dtb is concatenated at the end of the
# compressed image.
ifeq ($(PLATFORM_USE_MKBOOTIMG),true)
ifneq ($(PLATFORM_USE_SHIM),true)
$(error PLATFORM_USE_MKBOOTIMG requires PLATFORM_USE_SHIM)
endif
ifeq ($(PLATFORM_BOARD_NAME),)
$(error PLATFORM_BOARD_NAME not defined)
endif
ifeq ($(PLATFORM_KERNEL_OFFSET),)
$(error PLATFORM_KERNEL_OFFSET not defined)
endif
ifeq ($(PLATFORM_MEMBASE),)
$(error PLATFORM_MEMBASE not defined)
endif
ifeq ($(PLATFORM_CMDLINE),)
$(error PLATFORM_CMDLINE not defined)
endif
MKBOOTIMG := third_party/tools/android/mkbootimg
DUMMY_DTB := kernel/target/arm64/dtb/dummy-device-tree.dtb
BOARD_BOOTIMG := $(BUILDDIR)/$(PLATFORM_BOARD_NAME)-boot.img
BOARD_ZIRCON_ZBOOTIMAGE := $(BUILDDIR)/$(PLATFORM_BOARD_NAME)-zircon-bootimage.gz
BOARD_ZIRCON_ZBOOTIMAGE_DTB := $(BUILDDIR)/$(PLATFORM_BOARD_NAME)-zircon-bootimage.gz-dtb
$(BOARD_ZIRCON_ZBOOTIMAGE): BOARD_ZIRCON_ZBOOTIMAGE:=$(BOARD_ZIRCON_ZBOOTIMAGE)
$(BOARD_ZIRCON_ZBOOTIMAGE): BOARD_ZIRCON_BOOTIMAGE:=$(BOARD_ZIRCON_BOOTIMAGE)
$(BOARD_ZIRCON_ZBOOTIMAGE_DTB): BOARD_ZIRCON_ZBOOTIMAGE_DTB:=$(BOARD_ZIRCON_ZBOOTIMAGE_DTB)
$(BOARD_ZIRCON_ZBOOTIMAGE_DTB): BOARD_ZIRCON_ZBOOTIMAGE:=$(BOARD_ZIRCON_ZBOOTIMAGE)
$(BOARD_BOOTIMG): BOARD_BOOTIMG:=$(BOARD_BOOTIMG)
$(BOARD_BOOTIMG): BOARD_ZIRCON_BOOTIMAGE:=$(BOARD_ZIRCON_BOOTIMAGE)
$(BOARD_BOOTIMG): BOARD_ZIRCON_ZBOOTIMAGE:=$(BOARD_ZIRCON_ZBOOTIMAGE)
$(BOARD_BOOTIMG): BOARD_ZIRCON_ZBOOTIMAGE_DTB:=$(BOARD_ZIRCON_ZBOOTIMAGE_DTB)
$(BOARD_BOOTIMG): PLATFORM_KERNEL_OFFSET:=$(PLATFORM_KERNEL_OFFSET)
$(BOARD_BOOTIMG): PLATFORM_MEMBASE:=$(PLATFORM_MEMBASE)
$(BOARD_BOOTIMG): PLATFORM_CMDLINE:=$(PLATFORM_CMDLINE)
$(BOARD_ZIRCON_ZBOOTIMAGE): $(BOARD_ZIRCON_BOOTIMAGE)
$(call BUILDECHO,generating $@)
$(NOECHO)gzip -c $< > $@
GENERATED += $(BOARD_ZIRCON_ZBOOTIMAGE)
EXTRA_BUILDDEPS += $(BOARD_ZIRCON_ZBOOTIMAGE)
ifeq ($(PLATFORM_USE_MKKDTB),true)
KDTBTOOL=$(BUILDDIR)/tools/mkkdtb
$(BOARD_ZIRCON_ZBOOTIMAGE_DTB): $(BOARD_ZIRCON_ZBOOTIMAGE) $(DUMMY_DTB) $(KDTBTOOL)
$(call BUILDECHO,generating $@)
$(NOECHO)$(KDTBTOOL) $(BOARD_ZIRCON_ZBOOTIMAGE) $(DUMMY_DTB) $@
else
$(BOARD_ZIRCON_ZBOOTIMAGE_DTB): $(BOARD_ZIRCON_ZBOOTIMAGE) $(DUMMY_DTB)
$(call BUILDECHO,generating $@)
$(NOECHO)cat $(BOARD_ZIRCON_ZBOOTIMAGE) $(DUMMY_DTB) > $@
endif
GENERATED += $(BOARD_ZIRCON_ZBOOTIMAGE_DTB)
EXTRA_BUILDDEPS += $(BOARD_ZIRCON_ZBOOTIMAGE_DTB)
$(BOARD_BOOTIMG): $(BOARD_ZIRCON_ZBOOTIMAGE_DTB)
$(call BUILDECHO,generating $@)
$(NOECHO)$(MKBOOTIMG) --kernel $< --kernel_offset $(PLATFORM_KERNEL_OFFSET) \
--base $(PLATFORM_MEMBASE) --tags_offset 0xE000000 --cmdline $(PLATFORM_CMDLINE) -o $@
GENERATED += $(BOARD_BOOTIMG)
EXTRA_BUILDDEPS += $(BOARD_BOOTIMG)
endif # PLATFORM_USE_MKBOOTIMG
# Android Verified Boot (AVB) support: Hash footer is added to the boot image
# and a vbmeta image is generated with signature for the boot image.
ifeq ($(PLATFORM_USE_AVB),true)
ifneq ($(PLATFORM_USE_MKBOOTIMG),true)
$(error PLATFORM_USE_AVB requires PLATFORM_USE_MKBOOTIMG)
endif
ifeq ($(PLATFORM_BOARD_NAME),)
$(error PLATFORM_BOARD_NAME not defined)
endif
ifeq ($(PLATFORM_BOOT_PARTITION_SIZE),)
$(error PLATFORM_BOOT_PARTITION_SIZE not defined)
endif
AVBDIR := third_party/tools/android/avb
AVBTOOL := $(AVBDIR)/avbtool
AVB_KEY := $(AVBDIR)/test/data/testkey_atx_psk.pem
AVB_PUBLIC_KEY_METADATA := $(AVBDIR)/test/data/atx_metadata.bin
BOARD_VBMETA := $(BUILDDIR)/$(PLATFORM_BOARD_NAME)-vbmeta.img
$(BOARD_VBMETA): BOARD_VBMETA:=$(BOARD_VBMETA)
$(BOARD_VBMETA): BOARD_BOOTIMG:=$(BOARD_BOOTIMG)
$(BOARD_VBMETA): PLATFORM_BOOT_PARTITION_SIZE:=$(PLATFORM_BOOT_PARTITION_SIZE)
$(BOARD_VBMETA): $(BOARD_BOOTIMG)
$(call BUILDECHO,generating $@)
$(NOECHO)$(AVBTOOL) add_hash_footer --image $(BOARD_BOOTIMG) \
--partition_size $(PLATFORM_BOOT_PARTITION_SIZE) --partition_name boot
$(NOECHO)$(AVBTOOL) make_vbmeta_image --include_descriptors_from_image $(BOARD_BOOTIMG) \
--algorithm SHA512_RSA4096 --key $(AVB_KEY) --public_key_metadata $(AVB_PUBLIC_KEY_METADATA) \
--padding_size 4096 --output $@
GENERATED += $(BOARD_VBMETA)
EXTRA_BUILDDEPS += $(BOARD_VBMETA)
endif # PLATFORM_USE_AVB
# clear variables that were passed in to us
PLATFORM_USE_SHIM :=
PLATFORM_USE_MKBOOTIMG :=
PLATFORM_USE_AVB :=
PLATFORM_BOARD_NAME :=
PLATFORM_KERNEL_OFFSET :=
PLATFORM_MEMBASE :=
PLATFORM_CMDLINE :=
PLATFORM_BOOT_PARTITION_SIZE :=
# clear variables we set here
BOARD_ZIRCON_BOOTIMAGE :=
BOARD_ZIRCON_ZBOOTIMAGE :=
BOARD_ZIRCON_ZBOOTIMAGE_DTB :=
BOARD_BOOTIMG :=
BOARD_VBMETA :=