1# Copyright 2018 The Fuchsia Authors 2# 3# Use of this source code is governed by a MIT-style 4# license that can be found in the LICENSE file or at 5# https://opensource.org/licenses/MIT 6 7# Rules for building boot shim and prepending it to ZBI. 8ifeq ($(PLATFORM_USE_SHIM),true) 9 10ifeq ($(PLATFORM_BOARD_NAME),) 11$(error PLATFORM_BOARD_NAME not defined) 12endif 13 14BOARD_ZIRCON_BOOTIMAGE := $(BUILDDIR)/$(PLATFORM_BOARD_NAME)-zircon-bootimage.bin 15 16ifeq ($(TARGET),arm64) 17include kernel/target/arm64/boot-shim/rules.mk 18else 19$(error PLATFORM_USE_SHIM not supported for target $(TARGET)) 20endif 21 22# capture board specific variables for the build rules 23$(BOARD_ZIRCON_BOOTIMAGE): BOARD_ZIRCON_BOOTIMAGE:=$(BOARD_ZIRCON_BOOTIMAGE) 24$(BOARD_ZIRCON_BOOTIMAGE): BOOT_SHIM_BIN:=$(BOOT_SHIM_BIN) 25 26# prepend shim to the zircon bootimage 27$(BOARD_ZIRCON_BOOTIMAGE): $(ZIRCON_BOOTIMAGE) $(BOOT_SHIM_BIN) 28 $(call BUILDECHO,generating $@) 29 @$(MKDIR) 30 $(NOECHO)cat $(BOOT_SHIM_BIN) $(ZIRCON_BOOTIMAGE) > $@ 31 32GENERATED += $(BOARD_ZIRCON_BOOTIMAGE) 33EXTRA_BUILDDEPS += $(BOARD_ZIRCON_BOOTIMAGE) 34 35endif # PLATFORM_USE_SHIM 36 37# Rules for building an Android style boot.img containing the boot shim and ZBI. 38# Bootloaders often require that the image be gzip compressed and followed by a 39# Linux device tree binary, so a dummy dtb is concatenated at the end of the 40# compressed image. 41ifeq ($(PLATFORM_USE_MKBOOTIMG),true) 42 43ifneq ($(PLATFORM_USE_SHIM),true) 44$(error PLATFORM_USE_MKBOOTIMG requires PLATFORM_USE_SHIM) 45endif 46ifeq ($(PLATFORM_BOARD_NAME),) 47$(error PLATFORM_BOARD_NAME not defined) 48endif 49ifeq ($(PLATFORM_KERNEL_OFFSET),) 50$(error PLATFORM_KERNEL_OFFSET not defined) 51endif 52ifeq ($(PLATFORM_MEMBASE),) 53$(error PLATFORM_MEMBASE not defined) 54endif 55ifeq ($(PLATFORM_CMDLINE),) 56$(error PLATFORM_CMDLINE not defined) 57endif 58 59MKBOOTIMG := third_party/tools/android/mkbootimg 60DUMMY_DTB := kernel/target/arm64/dtb/dummy-device-tree.dtb 61 62BOARD_BOOTIMG := $(BUILDDIR)/$(PLATFORM_BOARD_NAME)-boot.img 63BOARD_ZIRCON_ZBOOTIMAGE := $(BUILDDIR)/$(PLATFORM_BOARD_NAME)-zircon-bootimage.gz 64BOARD_ZIRCON_ZBOOTIMAGE_DTB := $(BUILDDIR)/$(PLATFORM_BOARD_NAME)-zircon-bootimage.gz-dtb 65 66$(BOARD_ZIRCON_ZBOOTIMAGE): BOARD_ZIRCON_ZBOOTIMAGE:=$(BOARD_ZIRCON_ZBOOTIMAGE) 67$(BOARD_ZIRCON_ZBOOTIMAGE): BOARD_ZIRCON_BOOTIMAGE:=$(BOARD_ZIRCON_BOOTIMAGE) 68 69$(BOARD_ZIRCON_ZBOOTIMAGE_DTB): BOARD_ZIRCON_ZBOOTIMAGE_DTB:=$(BOARD_ZIRCON_ZBOOTIMAGE_DTB) 70$(BOARD_ZIRCON_ZBOOTIMAGE_DTB): BOARD_ZIRCON_ZBOOTIMAGE:=$(BOARD_ZIRCON_ZBOOTIMAGE) 71 72$(BOARD_BOOTIMG): BOARD_BOOTIMG:=$(BOARD_BOOTIMG) 73$(BOARD_BOOTIMG): BOARD_ZIRCON_BOOTIMAGE:=$(BOARD_ZIRCON_BOOTIMAGE) 74$(BOARD_BOOTIMG): BOARD_ZIRCON_ZBOOTIMAGE:=$(BOARD_ZIRCON_ZBOOTIMAGE) 75$(BOARD_BOOTIMG): BOARD_ZIRCON_ZBOOTIMAGE_DTB:=$(BOARD_ZIRCON_ZBOOTIMAGE_DTB) 76$(BOARD_BOOTIMG): PLATFORM_KERNEL_OFFSET:=$(PLATFORM_KERNEL_OFFSET) 77$(BOARD_BOOTIMG): PLATFORM_MEMBASE:=$(PLATFORM_MEMBASE) 78$(BOARD_BOOTIMG): PLATFORM_CMDLINE:=$(PLATFORM_CMDLINE) 79 80$(BOARD_ZIRCON_ZBOOTIMAGE): $(BOARD_ZIRCON_BOOTIMAGE) 81 $(call BUILDECHO,generating $@) 82 $(NOECHO)gzip -c $< > $@ 83 84GENERATED += $(BOARD_ZIRCON_ZBOOTIMAGE) 85EXTRA_BUILDDEPS += $(BOARD_ZIRCON_ZBOOTIMAGE) 86 87$(BOARD_ZIRCON_ZBOOTIMAGE_DTB): $(BOARD_ZIRCON_ZBOOTIMAGE) $(DUMMY_DTB) 88 $(call BUILDECHO,generating $@) 89 $(NOECHO)cat $(BOARD_ZIRCON_ZBOOTIMAGE) $(DUMMY_DTB) > $@ 90 91GENERATED += $(BOARD_ZIRCON_ZBOOTIMAGE_DTB) 92EXTRA_BUILDDEPS += $(BOARD_ZIRCON_ZBOOTIMAGE_DTB) 93 94$(BOARD_BOOTIMG): $(BOARD_ZIRCON_ZBOOTIMAGE_DTB) 95 $(call BUILDECHO,generating $@) 96 $(NOECHO)$(MKBOOTIMG) --kernel $< --kernel_offset $(PLATFORM_KERNEL_OFFSET) \ 97 --base $(PLATFORM_MEMBASE) --tags_offset 0xE000000 --cmdline $(PLATFORM_CMDLINE) -o $@ 98 99GENERATED += $(BOARD_BOOTIMG) 100EXTRA_BUILDDEPS += $(BOARD_BOOTIMG) 101 102endif # PLATFORM_USE_MKBOOTIMG 103 104# Android Verified Boot (AVB) support: Hash footer is added to the boot image 105# and a vbmeta image is generated with signature for the boot image. 106ifeq ($(PLATFORM_USE_AVB),true) 107 108ifneq ($(PLATFORM_USE_MKBOOTIMG),true) 109$(error PLATFORM_USE_AVB requires PLATFORM_USE_MKBOOTIMG) 110endif 111ifeq ($(PLATFORM_BOARD_NAME),) 112$(error PLATFORM_BOARD_NAME not defined) 113endif 114ifeq ($(PLATFORM_BOOT_PARTITION_SIZE),) 115$(error PLATFORM_BOOT_PARTITION_SIZE not defined) 116endif 117 118AVBDIR := third_party/tools/android/avb 119AVBTOOL := $(AVBDIR)/avbtool 120AVB_KEY := $(AVBDIR)/test/data/testkey_atx_psk.pem 121AVB_PUBLIC_KEY_METADATA := $(AVBDIR)/test/data/atx_metadata.bin 122 123BOARD_VBMETA := $(BUILDDIR)/$(PLATFORM_BOARD_NAME)-vbmeta.img 124 125$(BOARD_VBMETA): BOARD_VBMETA:=$(BOARD_VBMETA) 126$(BOARD_VBMETA): BOARD_BOOTIMG:=$(BOARD_BOOTIMG) 127$(BOARD_VBMETA): PLATFORM_BOOT_PARTITION_SIZE:=$(PLATFORM_BOOT_PARTITION_SIZE) 128 129$(BOARD_VBMETA): $(BOARD_BOOTIMG) 130 $(call BUILDECHO,generating $@) 131 $(NOECHO)$(AVBTOOL) add_hash_footer --image $(BOARD_BOOTIMG) \ 132 --partition_size $(PLATFORM_BOOT_PARTITION_SIZE) --partition_name boot 133 $(NOECHO)$(AVBTOOL) make_vbmeta_image --include_descriptors_from_image $(BOARD_BOOTIMG) \ 134 --algorithm SHA512_RSA4096 --key $(AVB_KEY) --public_key_metadata $(AVB_PUBLIC_KEY_METADATA) \ 135 --padding_size 4096 --output $@ 136 137GENERATED += $(BOARD_VBMETA) 138EXTRA_BUILDDEPS += $(BOARD_VBMETA) 139 140endif # PLATFORM_USE_AVB 141 142# clear variables that were passed in to us 143PLATFORM_USE_SHIM := 144PLATFORM_USE_MKBOOTIMG := 145PLATFORM_USE_AVB := 146PLATFORM_BOARD_NAME := 147PLATFORM_KERNEL_OFFSET := 148PLATFORM_MEMBASE := 149PLATFORM_CMDLINE := 150PLATFORM_BOOT_PARTITION_SIZE := 151 152# clear variables we set here 153BOARD_ZIRCON_BOOTIMAGE := 154BOARD_ZIRCON_ZBOOTIMAGE := 155BOARD_ZIRCON_ZBOOTIMAGE_DTB := 156BOARD_BOOTIMG := 157BOARD_VBMETA := 158 159