1################################################################################ 2# Following variables defines how the NS_USER (Non Secure User - Client 3# Application), NS_KERNEL (Non Secure Kernel), S_KERNEL (Secure Kernel) and 4# S_USER (Secure User - TA) are compiled 5################################################################################ 6override COMPILE_NS_USER := 64 7override COMPILE_NS_KERNEL := 64 8override COMPILE_S_USER := 64 9override COMPILE_S_KERNEL := 64 10 11TFA_PLATFORM ?= imx8mq 12OPTEE_OS_PLATFORM ?= imx-mx8mqevk 13U_BOOT_DEFCONFIG ?= imx8mq_evk_defconfig 14U_BOOT_DT ?= imx8mq-evk.dtb 15LINUX_DT ?= imx8mq-evk.dtb 16MKIMAGE_DT ?= fsl-imx8mq-evk.dtb 17MKIMAGE_SOC ?= iMX8MQ 18 19BR2_TARGET_GENERIC_GETTY_PORT ?= ttymxc0 20BR2_TARGET_ROOTFS_EXT2 ?= y 21BR2_TARGET_ROOTFS_EXT2_4 ?= y 22 23include common.mk 24 25################################################################################ 26# Paths to git projects and various binaries 27################################################################################ 28ifeq ($(DEBUG),1) 29TF_A_BUILD ?= debug 30else 31TF_A_BUILD ?= release 32endif 33 34FIRMWARE_PATH ?= $(ROOT)/out-firmware 35MKIMAGE_PATH ?= $(ROOT)/imx-mkimage 36MKIMAGE_SOC_PATH ?= $(MKIMAGE_PATH)/iMX8M 37TF_A_PATH ?= $(ROOT)/trusted-firmware-a 38 39FIRMWARE_VERSION ?= firmware-imx-8.0 40FIRMWARE_BIN_SHA256_SUM ?= 63ec62f5d229cbed00918c8449173933f1c9d594c59396b8dd217e94f47138b0 41FIRMWARE_BIN ?= $(FIRMWARE_VERSION).bin 42FIRMWARE_BIN_URL ?= https://www.nxp.com/lgfiles/NMG/MAD/YOCTO/$(FIRMWARE_BIN) 43 44BOOT_IMG ?= $(ROOT)/out/boot.img 45 46# Set the variable to include the board config snippet 47# Default value is empty, will select the imx8mq-evk board. 48# Possible values: "imx8mp-evk" or "imx8mp-verdin" 49IMX_BOARD ?= 50ifneq (,$(IMX_BOARD)) 51include $(IMX_BOARD).inc.mk 52endif 53 54################################################################################ 55# Targets 56################################################################################ 57all: tfa u-boot linux optee-os buildroot flash-image 58clean: ddr-firmware-clean optee-os-clean tfa-clean u-boot-clean buildroot-clean 59 60include toolchain.mk 61 62################################################################################ 63# ARM Trusted Firmware 64################################################################################ 65TF_A_EXPORTS = CROSS_COMPILE="$(CCACHE)$(AARCH64_CROSS_COMPILE)" 66 67# BL32=$(OPTEE_OS_HEADER_V2_BIN) \ 68# BL32_EXTRA1=$(OPTEE_OS_PAGER_V2_BIN) \ 69# BL32_EXTRA2=$(OPTEE_OS_PAGEABLE_V2_BIN) \ 70 71TF_A_FLAGS += PLAT=$(TFA_PLATFORM) SPD=opteed DEBUG_CONSOLE=1 DEBUG=0 V=1 72TF_A_FLAGS += BL32=$(OPTEE_OS_PATH)/out/arm/core/tee-raw.bin 73 74tfa: optee-os 75 $(TF_A_EXPORTS) $(MAKE) -C $(TF_A_PATH) $(TF_A_FLAGS) all fip 76 77tfa-clean: 78 $(TF_A_EXPORTS) $(MAKE) -C $(TF_A_PATH) $(TF_A_FLAGS) clean 79 80################################################################################ 81# U-Boot 82################################################################################ 83 84U-BOOT_EXPORTS = CROSS_COMPILE="$(CCACHE)$(AARCH64_CROSS_COMPILE)" 85 86U-BOOT_DEFCONFIG_FILES := $(UBOOT_PATH)/configs/$(U_BOOT_DEFCONFIG) \ 87 $(BUILD_PATH)/kconfigs/uboot_imx8.conf 88 89$(UBOOT_PATH)/.config: $(U-BOOT_DEFCONFIG_FILES) 90 $(U-BOOT_EXPORTS) $(MAKE) -C $(UBOOT_PATH) $(U_BOOT_DEFCONFIG) 91 (cd $(UBOOT_PATH) && ARCH=arm64 scripts/kconfig/merge_config.sh \ 92 $(U-BOOT_DEFCONFIG_FILES)) 93 94.PHONY: u-boot-defconfig 95u-boot-defconfig: $(UBOOT_PATH)/.config 96 97.PHONY: u-boot 98u-boot: u-boot-defconfig tfa ddr-firmware 99 # Copy DDR4 firmware 100 cp $(FIRMWARE_PATH)/$(FIRMWARE_VERSION)/firmware/ddr/synopsys/lpddr4_pmu_train_*.bin \ 101 $(UBOOT_PATH) 102 # Copy BL31 binary from TF-A 103 cp $(TF_A_PATH)/build/$(TFA_PLATFORM)/$(TF_A_BUILD)/bl31.bin $(UBOOT_PATH) 104 $(U-BOOT_EXPORTS) $(MAKE) -C $(UBOOT_PATH) 105 106.PHONY: u-boot-clean 107u-boot-clean: 108 cd $(UBOOT_PATH) && git clean -xdf 109 110.PHONY: u-boot-cscope 111u-boot-cscope: 112 $(U-BOOT_EXPORTS) $(MAKE) -C $(UBOOT_PATH) cscope 113 114 115################################################################################ 116# Linux kernel 117################################################################################ 118LINUX_DEFCONFIG_COMMON_ARCH := arm64 119LINUX_DEFCONFIG_COMMON_FILES := \ 120 $(LINUX_PATH)/arch/arm64/configs/defconfig \ 121 $(CURDIR)/kconfigs/imx.conf 122 123linux-defconfig: $(LINUX_PATH)/.config 124 125LINUX_COMMON_FLAGS += ARCH=arm64 126 127linux: linux-common 128 129linux-defconfig-clean: linux-defconfig-clean-common 130 131LINUX_CLEAN_COMMON_FLAGS += ARCH=arm64 132 133linux-clean: linux-clean-common 134 135LINUX_CLEANER_COMMON_FLAGS += ARCH=arm64 136 137linux-cleaner: linux-cleaner-common 138 139################################################################################ 140# OP-TEE 141################################################################################ 142optee-os: optee-os-common 143optee-os-clean: optee-os-clean-common 144 145################################################################################ 146# DDR firmware 147################################################################################ 148# This is prebuilt binaries by NXP, download them and use them. Update path if 149# it changes in the future. 150 151$(FIRMWARE_PATH)/$(FIRMWARE_BIN): 152 mkdir -p $(FIRMWARE_PATH) 153 (cd $(FIRMWARE_PATH) && wget $(FIRMWARE_BIN_URL)) 154 155$(FIRMWARE_PATH)/.unpacked: $(FIRMWARE_PATH)/$(FIRMWARE_BIN) 156 (cd $(FIRMWARE_PATH) && \ 157 echo $(FIRMWARE_BIN_SHA256_SUM) $(FIRMWARE_BIN) | sha256sum -c) 158 (cd $(FIRMWARE_PATH) && \ 159 chmod 711 $(FIRMWARE_BIN) && ./$(FIRMWARE_BIN) --auto-accept) 160 touch $(FIRMWARE_PATH)/.unpacked 161 162.PHONY: ddr-firmware 163ddr-firmware: $(FIRMWARE_PATH)/.unpacked 164 165ddr-firmware-clean: 166 rm -rf $(FIRMWARE_PATH) 167 168################################################################################ 169# imx-mkimage 170################################################################################ 171mkimage: u-boot 172 ln -sf $(OPTEE_OS_PATH)/out/arm/core/tee-raw.bin \ 173 $(MKIMAGE_SOC_PATH)/tee.bin 174 ln -sf $(TF_A_PATH)/build/$(TFA_PLATFORM)/$(TF_A_BUILD)/bl31.bin \ 175 $(MKIMAGE_SOC_PATH)/ 176 ln -sf $(FIRMWARE_PATH)/$(FIRMWARE_VERSION)/firmware/ddr/synopsys/lpddr4_pmu_train_*.bin \ 177 $(MKIMAGE_SOC_PATH)/ 178 ln -sf $(UBOOT_PATH)/u-boot-nodtb.bin $(MKIMAGE_SOC_PATH)/ 179 ln -sf $(UBOOT_PATH)/spl/u-boot-spl.bin $(MKIMAGE_SOC_PATH)/ 180 ln -sf $(UBOOT_PATH)/arch/arm/dts/$(U_BOOT_DT) \ 181 $(MKIMAGE_SOC_PATH)/$(MKIMAGE_DT) 182 ln -sf $(UBOOT_PATH)/tools/mkimage $(MKIMAGE_SOC_PATH)/mkimage_uboot 183 # imx8mp: allow to override TEE_LOAD_ADDR 184 # https://github.com/nxp-imx/imx-mkimage/pull/3 185 sed -i 's/TEE_LOAD_ADDR = /TEE_LOAD_ADDR ?= /' $(MKIMAGE_SOC_PATH)/soc.mak 186 $(MAKE) -C $(MKIMAGE_PATH) SOC=$(MKIMAGE_SOC) flash_spl_uboot 187#> +If you want to run with HDMI, copy signed_hdmi_imx8m.bin to imx-mkimage/iMX8M 188#> +make SOC=iMX8M flash_spl_uboot or make SOC=iMX8M flash_hdmi_spl_uboot to 189#> +generate flash.bin. 190mkimage-clean: 191 cd $(MKIMAGE_PATH) && git clean -xdf 192 rm -f $(BUILD_PATH)/mkimage_imx8 193 194$(ROOT)/out-br/images/ramdisk.img: $(ROOT)/out-br/images/rootfs.cpio.gz 195 $(UBOOT_PATH)/tools/mkimage -A arm64 -O linux -T ramdisk -C gzip \ 196 -d $< $@ 197 198$(ROOT)/out: 199 mkdir -p $@ 200 201$(ROOT)/out/boot.scr: $(BUILD_PATH)/imx/u-boot_boot_script | $(ROOT)/out 202 $(UBOOT_PATH)/tools/mkimage -T script -C none -n 'Boot script' \ 203 -d $< $@ 204 205################################################################################ 206# Flash images 207################################################################################ 208USE_PERSISTENT_ROOTFS ?= 0 209 210# Configuration of the BOOT partition 211FLASH_PARTITIONS_BLOCK_SIZE = 512 212FLASH_PARTITION_BOOT_START_BLOCK = 16384 213FLASH_PARTITION_BOOT_SIZE_IN_BYTES = \ 214 $(shell echo $$(( 64 * 1024 * 1024 ))) 215FLASH_PARTITION_BOOT_SIZE_IN_BLOCKS = \ 216 $(shell echo $$(( $(FLASH_PARTITION_BOOT_SIZE_IN_BYTES) / $(FLASH_PARTITIONS_BLOCK_SIZE) ))) 217FLASH_PARTITIONS_TABLE = "\ 218 start=$(FLASH_PARTITION_BOOT_START_BLOCK) \ 219 size=$(FLASH_PARTITION_BOOT_SIZE_IN_BLOCKS) \ 220 type=7\n" 221FLASH_IMAGE_SIZE = \ 222 $(shell echo $$(( $(FLASH_PARTITION_BOOT_START_BLOCK) * $(FLASH_PARTITIONS_BLOCK_SIZE) \ 223 + $(FLASH_PARTITION_BOOT_SIZE_IN_BYTES) ))) 224 225# Configuration of the ROOTFS partition if enabled 226ifeq ($(USE_PERSISTENT_ROOTFS),1) 227FLASH_PARTITION_ROOTFS_IMAGE_PATH = $(ROOT)/out-br/images/rootfs.ext4 228FLASH_PARTITION_ROOTFS_START_BLOCK = \ 229 $(shell echo $$(( $(FLASH_PARTITION_BOOT_START_BLOCK) + $(FLASH_PARTITION_BOOT_SIZE_IN_BLOCKS) ))) 230FLASH_PARTITION_ROOTFS_SIZE_IN_BYTES = \ 231 $(shell stat -L --printf="%s" $(FLASH_PARTITION_ROOTFS_IMAGE_PATH)) 232FLASH_PARTITION_ROOTFS_SIZE_IN_BLOCKS = \ 233 $(shell echo $$(( $(FLASH_PARTITION_ROOTFS_SIZE_IN_BYTES) / $(FLASH_PARTITIONS_BLOCK_SIZE) ))) 234FLASH_PARTITIONS_TABLE += "\ 235 start=$(FLASH_PARTITION_ROOTFS_START_BLOCK) \ 236 size=$(FLASH_PARTITION_ROOTFS_SIZE_IN_BLOCKS) \ 237 type=83\n" 238FLASH_IMAGE_SIZE := $(shell echo $$(( $(FLASH_IMAGE_SIZE) + $(FLASH_PARTITION_ROOTFS_SIZE_IN_BYTES) ))) 239endif 240 241.PHONY: flash-image 242flash-image: buildroot mkimage linux 243 $(MAKE) flash-image-only 244 245.PHONY: flash-image-only 246flash-image-only: $(ROOT)/out-br/images/ramdisk.img $(ROOT)/out/boot.scr 247 rm -f $(BOOT_IMG) 248 truncate -s $(FLASH_IMAGE_SIZE) $(BOOT_IMG) 249 echo -ne $(FLASH_PARTITIONS_TABLE) | sfdisk $(BOOT_IMG) 250 mformat -i $(BOOT_IMG).fat -n 64 -h 255 -T 131072 -v "BOOT IMG" -C :: 251 mcopy -i $(BOOT_IMG).fat $(LINUX_PATH)/arch/arm64/boot/Image :: 252 mcopy -i $(BOOT_IMG).fat \ 253 $(LINUX_PATH)/arch/arm64/boot/dts/freescale/$(LINUX_DT) :: 254 mcopy -i $(BOOT_IMG).fat $(ROOT)/out/boot.scr :: 255 256ifeq ($(USE_PERSISTENT_ROOTFS),1) 257 dd if=$(FLASH_PARTITION_ROOTFS_IMAGE_PATH) of=$(BOOT_IMG) bs=$(FLASH_PARTITIONS_BLOCK_SIZE) \ 258 seek=$(FLASH_PARTITION_ROOTFS_START_BLOCK) conv=fsync,notrunc 259else 260 mcopy -i $(BOOT_IMG).fat $(ROOT)/out-br/images/ramdisk.img :: 261endif 262 263 dd if=$(BOOT_IMG).fat of=$(BOOT_IMG) bs=$(FLASH_PARTITIONS_BLOCK_SIZE) \ 264 seek=$(FLASH_PARTITION_BOOT_START_BLOCK) conv=fsync,notrunc 265 dd if=$(MKIMAGE_SOC_PATH)/flash.bin of=$(BOOT_IMG) bs=1k seek=33 \ 266 conv=fsync,notrunc 267