Newer
Older
################################################################################
# Following variables defines how the NS_USER (Non Secure User - Client
# Application), NS_KERNEL (Non Secure Kernel), S_KERNEL (Secure Kernel) and
# S_USER (Secure User - TA) are compiled
################################################################################
override COMPILE_NS_USER := 32
override COMPILE_NS_KERNEL := 32
override COMPILE_S_USER := 32
override COMPILE_S_KERNEL := 32
include common.mk
################################################################################
# Paths to git projects and various binaries
################################################################################
BIOS_QEMU_PATH ?= $(ROOT)/bios_qemu_tz_arm
QEMU_PATH ?= $(ROOT)/qemu
SOC_TERM_PATH ?= $(ROOT)/soc_term
################################################################################
# Targets
################################################################################
all: arm-tf bios-qemu buildroot linux optee-os qemu soc-term
clean: arm-tf-clean bios-qemu-clean buildroot-clean linux-clean optee-os-clean \
qemu-clean soc-term-clean check-clean
include toolchain.mk
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
################################################################################
# ARM Trusted Firmware
################################################################################
ARM_TF_EXPORTS ?= \
CROSS_COMPILE="$(CCACHE)$(AARCH32_CROSS_COMPILE)"
ARM_TF_DEBUG ?= $(DEBUG)
ifeq ($(ARM_TF_DEBUG),0)
ARM_TF_LOGLVL ?= 30
ARM_TF_OUT = $(ARM_TF_PATH)/build/qemu/release
else
ARM_TF_LOGLVL ?= 50
ARM_TF_OUT = $(ARM_TF_PATH)/build/qemu/debug
endif
ARM_TF_FLAGS ?= \
BL32=$(OPTEE_OS_HEADER_V2_BIN) \
BL32_EXTRA1=$(OPTEE_OS_PAGER_V2_BIN) \
BL32_EXTRA2=$(OPTEE_OS_PAGEABLE_V2_BIN) \
BL33=$(ROOT)/out/bios-qemu/bios.bin \
ARM_ARCH_MAJOR=7 \
ARCH=aarch32 \
PLAT=qemu \
DEBUG=$(ARM_TF_DEBUG) \
ENABLE_ASSERTIONS=$(ARM_TF_DEBUG) \
LOG_LEVEL=$(ARM_TF_LOGLVL) \
MULTI_CONSOLE_API=0 \
ARM_TSP_RAM_LOCATION=tdram \
BL32_RAM_LOCATION=tdram \
AARCH32_SP=optee
arm-tf: optee-os bios-qemu
$(ARM_TF_EXPORTS) $(MAKE) -C $(ARM_TF_PATH) $(ARM_TF_FLAGS) all fip
ln -sf $(ARM_TF_OUT)/bl1.bin $(BINARIES_PATH)
ln -sf $(ARM_TF_OUT)/bl2.bin $(BINARIES_PATH)
ln -sf $(OPTEE_OS_HEADER_V2_BIN) $(BINARIES_PATH)/bl32.bin
ln -sf $(OPTEE_OS_PAGER_V2_BIN) $(BINARIES_PATH)/bl32_extra1.bin
ln -sf $(OPTEE_OS_PAGEABLE_V2_BIN) $(BINARIES_PATH)/bl32_extra2.bin
ln -sf $(ROOT)/out/bios-qemu/bios.bin $(BINARIES_PATH)/bl33.bin
arm-tf-clean:
$(ARM_TF_EXPORTS) $(MAKE) -C $(ARM_TF_PATH) $(ARM_TF_FLAGS) clean
################################################################################
# QEMU
################################################################################
define bios-qemu-common
+$(MAKE) -C $(BIOS_QEMU_PATH) \
CROSS_COMPILE=$(CROSS_COMPILE_NS_USER) \
O=$(ROOT)/out/bios-qemu \
PLATFORM_FLAVOR=virt
endef
ln -sf $(ROOT)/out/bios-qemu/bios.bin $(BINARIES_PATH)
bios-qemu-clean:
$(call bios-qemu-common) clean
qemu:
cd $(QEMU_PATH); ./configure --target-list=arm-softmmu\
$(QEMU_CONFIGURE_PARAMS_COMMON)
$(MAKE) -C $(QEMU_PATH)
$(MAKE) -C $(QEMU_PATH) distclean
################################################################################
# Linux kernel
################################################################################
LINUX_DEFCONFIG_COMMON_ARCH := arm
LINUX_DEFCONFIG_COMMON_FILES := \
$(LINUX_PATH)/arch/arm/configs/vexpress_defconfig \
$(CURDIR)/kconfigs/qemu.conf
linux-defconfig: $(LINUX_PATH)/.config
LINUX_COMMON_FLAGS += ARCH=arm
linux: linux-common
mkdir -p $(BINARIES_PATH)
ln -sf $(LINUX_PATH)/arch/arm/boot/zImage $(BINARIES_PATH)
linux-defconfig-clean: linux-defconfig-clean-common
LINUX_CLEAN_COMMON_FLAGS += ARCH=arm
linux-clean: linux-clean-common
LINUX_CLEANER_COMMON_FLAGS += ARCH=arm
linux-cleaner: linux-cleaner-common
################################################################################
# OP-TEE
################################################################################
OPTEE_OS_COMMON_FLAGS += PLATFORM=vexpress-qemu_virt
optee-os: optee-os-common
OPTEE_OS_CLEAN_COMMON_FLAGS += PLATFORM=vexpress-qemu_virt
optee-os-clean: optee-os-clean-common
optee-client-clean: optee-client-clean-common
################################################################################
# Soc-term
################################################################################
soc-term:
$(MAKE) -C $(SOC_TERM_PATH)
$(MAKE) -C $(SOC_TERM_PATH) clean
################################################################################
# Run targets
################################################################################
.PHONY: run
# This target enforces updating root fs etc
ln -sf $(ROOT)/out-br/images/rootfs.cpio.gz $(BINARIES_PATH)/
.PHONY: run-only
run-only:
$(call check-terminal)
$(call launch-terminal,54320,"Normal World")
$(call launch-terminal,54321,"Secure World")
$(call wait-for-ports,54320,54321)
(cd $(BINARIES_PATH) && $(QEMU_PATH)/arm-softmmu/qemu-system-arm \
-nographic \
-serial tcp:localhost:54320 -serial tcp:localhost:54321 \
-s -S -machine virt -machine secure=on -cpu cortex-a15 \
-d unimp -semihosting-config enable,target=native \
ifneq ($(filter check,$(MAKECMDGOALS)),)
CHECK_DEPS := all
endif
check-args := --bios $(ROOT)/out/bios-qemu/bios.bin
ifneq ($(TIMEOUT),)
check-args += --timeout $(TIMEOUT)
endif
cd $(BINARIES_PATH) && \
export QEMU=$(ROOT)/qemu/arm-softmmu/qemu-system-arm && \
export QEMU_SMP=$(QEMU_SMP) && \
expect $(ROOT)/build/qemu-check.exp -- $(check-args) || \
(if [ "$(DUMP_LOGS_ON_ERROR)" ]; then \
echo "== $$PWD/serial0.log:"; \
cat serial0.log; \
echo "== end of $$PWD/serial0.log:"; \
echo "== $$PWD/serial1.log:"; \
cat serial1.log; \
echo "== end of $$PWD/serial1.log:"; \
fi; false)
check-only: check
check-clean:
rm -f serial0.log serial1.log