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 11# Need to set this before including common.mk 12BR2_TARGET_GENERIC_GETTY_PORT ?= ttyS0 13BR2_ROOTFS_POST_BUILD_SCRIPT ?= "board/raspberrypi3-64/post-build.sh" 14 15# Network support related packages: 16BR2_PACKAGE_DHCPCD ?= y 17BR2_PACKAGE_ETHTOOL ?= y 18BR2_PACKAGE_XINETD ?= y 19 20# SSH Packages : 21BR2_PACKAGE_OPENSSH ?= y 22BR2_PACKAGE_OPENSSH_SERVER ?= y 23BR2_PACKAGE_OPENSSH_KEY_UTILS ?= y 24 25OPTEE_OS_PLATFORM = rpi3 26 27include common.mk 28 29# Required tools to create the SD image 30BR2_PACKAGE_HOST_GENIMAGE=y 31 32# We need the ext2/4 image to be generated, so we will be able to copy that 33# directly into a parition on the image. 34BR2_TARGET_ROOTFS_EXT2=y 35BR2_TARGET_ROOTFS_EXT2_4=y 36BR2_TARGET_ROOTFS_EXT2_SIZE="256M" 37 38################################################################################ 39# Paths to git projects and various binaries 40################################################################################ 41TF_A_PATH ?= $(ROOT)/trusted-firmware-a 42TF_A_OUT ?= $(TF_A_PATH)/build/rpi3/debug 43TF_A_BOOT ?= $(TF_A_OUT)/armstub8.bin 44 45OPTEE_PATH ?= $(ROOT)/optee_os 46U-BOOT_PATH ?= $(ROOT)/u-boot 47U-BOOT_BIN ?= $(U-BOOT_PATH)/u-boot.bin 48 49RPI3_FIRMWARE_PATH ?= $(BUILD_PATH)/rpi3/firmware 50RPI3_BOOT_CONFIG ?= $(RPI3_FIRMWARE_PATH)/config.txt 51RPI3_UBOOT_ENV ?= $(ROOT)/out/uboot.env 52RPI3_UBOOT_ENV_TXT ?= $(RPI3_FIRMWARE_PATH)/uboot.env.txt 53RPI3_STOCK_FW_PATH ?= $(ROOT)/firmware 54RPI3_STOCK_FW_PATH_BOOT ?= $(RPI3_STOCK_FW_PATH)/boot 55OPTEE_BIN ?= $(OPTEE_PATH)/out/arm/core/tee-header_v2.bin 56OPTEE_BIN_EXTRA1 ?= $(OPTEE_PATH)/out/arm/core/tee-pager_v2.bin 57OPTEE_BIN_EXTRA2 ?= $(OPTEE_PATH)/out/arm/core/tee-pageable_v2.bin 58BOOT_PARTITION_FILES ?= $(ROOT)/out/boot 59CREATE_IMAGE ?= $(BUILD_PATH)/rpi3/scripts/create-image.sh 60 61LINUX_IMAGE ?= $(LINUX_PATH)/arch/arm64/boot/Image 62LINUX_DTB_RPI3_B ?= $(LINUX_PATH)/arch/arm64/boot/dts/broadcom/bcm2710-rpi-3-b.dtb 63LINUX_DTB_RPI3_BPLUS ?= $(LINUX_PATH)/arch/arm64/boot/dts/broadcom/bcm2710-rpi-3-b-plus.dtb 64MODULE_OUTPUT ?= $(ROOT)/module_output 65 66################################################################################ 67# Targets 68################################################################################ 69all: tf-a buildroot optee-os u-boot linux update_bootfs update_rootfs \ 70 sdcard-image 71 72clean: tf-a-clean buildroot-clean u-boot-clean optee-os-clean 73 74include toolchain.mk 75 76################################################################################ 77# ARM Trusted Firmware 78################################################################################ 79TF_A_EXPORTS ?= \ 80 CROSS_COMPILE="$(CCACHE)$(AARCH64_CROSS_COMPILE)" 81 82TF_A_FLAGS ?= \ 83 NEED_BL32=yes \ 84 BL32=$(OPTEE_BIN) \ 85 BL32_EXTRA1=$(OPTEE_BIN_EXTRA1) \ 86 BL32_EXTRA2=$(OPTEE_BIN_EXTRA2) \ 87 BL33=$(U-BOOT_BIN) \ 88 DEBUG=1 \ 89 V=0 \ 90 CRASH_REPORTING=1 \ 91 LOG_LEVEL=40 \ 92 PLAT=rpi3 \ 93 RPI3_PRELOADED_DTB_BASE=0x00010000 \ 94 SPD=opteed 95 96tf-a: optee-os u-boot 97 $(TF_A_EXPORTS) $(MAKE) -C $(TF_A_PATH) $(TF_A_FLAGS) all fip 98 99tf-a-clean: 100 $(TF_A_EXPORTS) $(MAKE) -C $(TF_A_PATH) $(TF_A_FLAGS) clean 101 102.PHONY: tf-a tf-a-clean 103 104################################################################################ 105# Das U-Boot 106################################################################################ 107U-BOOT_EXPORTS ?= CROSS_COMPILE=$(AARCH64_CROSS_COMPILE) ARCH=arm64 108U-BOOT_DEFCONFIG_COMMON_FILES := \ 109 $(U-BOOT_PATH)/configs/rpi_3_defconfig \ 110 $(CURDIR)/kconfigs/u-boot_rpi3.conf 111 112u-boot: u-boot-defconfig 113 $(U-BOOT_EXPORTS) $(MAKE) -C $(U-BOOT_PATH) all 114 $(U-BOOT_EXPORTS) $(MAKE) -C $(U-BOOT_PATH) tools 115 116u-boot-clean: u-boot-defconfig-clean 117 $(U-BOOT_EXPORTS) $(MAKE) -C $(U-BOOT_PATH) clean 118 119u-boot-env: $(RPI3_UBOOT_ENV_TXT) u-boot 120 mkdir -p $(ROOT)/out 121 $(U-BOOT_PATH)/tools/mkenvimage -s 0x4000 -o $(RPI3_UBOOT_ENV) \ 122 $(RPI3_UBOOT_ENV_TXT) 123 124u-boot-env-clean: 125 rm -f $(RPI3_UBOOT_ENV) 126 127u-boot-defconfig: $(U-BOOT_DEFCONFIG_COMMON_FILES) 128 cd $(U-BOOT_PATH) && \ 129 ARCH=arm64 \ 130 scripts/kconfig/merge_config.sh $(U-BOOT_DEFCONFIG_COMMON_FILES) 131 132u-boot-defconfig-clean: 133 rm -f $(U-BOOT_PATH)/.config 134 135.PHONY: u-boot u-boot-clean u-boot-defconfig u-boot-defconfig-clean u-boot-env \ 136 u-boot-env-clean 137 138################################################################################ 139# Linux kernel 140################################################################################ 141LINUX_DEFCONFIG_COMMON_ARCH := arm64 142LINUX_DEFCONFIG_COMMON_FILES := \ 143 $(LINUX_PATH)/arch/arm64/configs/bcmrpi3_defconfig \ 144 $(CURDIR)/kconfigs/rpi3.conf 145 146linux-defconfig: $(LINUX_PATH)/.config 147 148LINUX_COMMON_FLAGS += ARCH=arm64 149 150linux: linux-common 151 $(MAKE) -C $(LINUX_PATH) $(LINUX_COMMON_FLAGS) INSTALL_MOD_STRIP=1 INSTALL_MOD_PATH=$(MODULE_OUTPUT) modules_install 152 153linux-defconfig-clean: linux-defconfig-clean-common 154 155LINUX_CLEAN_COMMON_FLAGS += ARCH=arm64 156 157linux-clean: linux-clean-common 158 159LINUX_CLEANER_COMMON_FLAGS += ARCH=arm64 160 161linux-cleaner: linux-cleaner-common 162 163.PHONY: linux linux-defconfig-clean linux-clean linux-cleaner 164 165################################################################################ 166# OP-TEE 167################################################################################ 168optee-os: optee-os-common 169optee-os-clean: optee-os-clean-common 170 171################################################################################ 172# Root FS 173################################################################################ 174.PHONY: update_rootfs 175# Make sure this is built before the buildroot target which will create the 176# root file system based on what's in $(BUILDROOT_TARGET_ROOT) 177buildroot: update_rootfs 178update_rootfs: linux 179 @mkdir -p --mode=755 $(BUILDROOT_TARGET_ROOT)/usr/bin 180 @cd $(MODULE_OUTPUT) && find . | cpio -pudm $(BUILDROOT_TARGET_ROOT) 181 182update_bootfs: tf-a linux u-boot-env 183 @mkdir -p --mode=755 $(BOOT_PARTITION_FILES) 184 @install -v -p --mode=755 $(LINUX_DTB_RPI3_B) $(BOOT_PARTITION_FILES)/bcm2710-rpi-3-b.dtb 185 @install -v -p --mode=755 $(LINUX_DTB_RPI3_BPLUS) $(BOOT_PARTITION_FILES)/bcm2710-rpi-3-b-plus.dtb 186 @install -v -p --mode=755 $(RPI3_BOOT_CONFIG) $(BOOT_PARTITION_FILES)/config.txt 187 @install -v -p --mode=755 $(LINUX_IMAGE) $(BOOT_PARTITION_FILES)/kernel8.img 188 @install -v -p --mode=755 $(TF_A_BOOT) $(BOOT_PARTITION_FILES)/armstub8.bin 189 @install -v -p --mode=755 $(RPI3_UBOOT_ENV) $(BOOT_PARTITION_FILES)/uboot.env 190 @install -v -p --mode=755 $(RPI3_STOCK_FW_PATH)/boot/bootcode.bin $(BOOT_PARTITION_FILES)/bootcode.bin 191 @install -v -p --mode=755 $(RPI3_STOCK_FW_PATH)/boot/COPYING.linux $(BOOT_PARTITION_FILES)/COPYING.linux 192 @install -v -p --mode=755 $(RPI3_STOCK_FW_PATH)/boot/fixup_cd.dat $(BOOT_PARTITION_FILES)/fixup_cd.dat 193 @install -v -p --mode=755 $(RPI3_STOCK_FW_PATH)/boot/fixup.dat $(BOOT_PARTITION_FILES)/fixup.dat 194 @install -v -p --mode=755 $(RPI3_STOCK_FW_PATH)/boot/fixup_db.dat $(BOOT_PARTITION_FILES)/fixup_db.dat 195 @install -v -p --mode=755 $(RPI3_STOCK_FW_PATH)/boot/fixup_x.dat $(BOOT_PARTITION_FILES)/fixup_x.dat 196 @install -v -p --mode=755 $(RPI3_STOCK_FW_PATH)/boot/LICENCE.broadcom $(BOOT_PARTITION_FILES)/LICENCE.broadcom 197 @install -v -p --mode=755 $(RPI3_STOCK_FW_PATH)/boot/start_cd.elf $(BOOT_PARTITION_FILES)/start_cd.elf 198 @install -v -p --mode=755 $(RPI3_STOCK_FW_PATH)/boot/start_db.elf $(BOOT_PARTITION_FILES)/start_db.elf 199 @install -v -p --mode=755 $(RPI3_STOCK_FW_PATH)/boot/start.elf $(BOOT_PARTITION_FILES)/start.elf 200 @install -v -p --mode=755 $(RPI3_STOCK_FW_PATH)/boot/start_x.elf $(BOOT_PARTITION_FILES)/start_x.elf 201 202.PHONY: sdcard-image 203sdcard-image: update_bootfs update_rootfs buildroot 204 $(CREATE_IMAGE) -w $(ROOT) 205 206# Creating images etc, could wipe out a drive on the system, therefore we don't 207# want to automate that in script or make target. Instead we just simply provide 208# the steps here. 209.PHONY: img-help 210img-help: 211 @echo "Use 'dmesg' to find your device/SD-card name, then run the following as root:" 212 @echo " $$ sudo dd if=$(ROOT)/out/rpi3-sdcard.img of=/dev/<name-of-my-sd-card> bs=1024k conv=fsync status=progress" 213