forked from OP-TEE/build
-
Notifications
You must be signed in to change notification settings - Fork 0
/
verdin.mk
180 lines (147 loc) · 5.93 KB
/
verdin.mk
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
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
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
################################################################################
# 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
################################################################################
COMPILE_NS_USER ?= 64
override COMPILE_NS_KERNEL := 64
COMPILE_S_USER ?= 64
COMPILE_S_KERNEL ?= 64
BR2_TARGET_GENERIC_GETTY_PORT = ttymxc0
################################################################################
# Includes
################################################################################
include common.mk
################################################################################
# Paths to git projects and various binaries
################################################################################
OUT_PATH ?= $(ROOT)/out
ROOTFS_BIN ?= $(ROOT)/out-br/images/rootfs.tar
TF_A_PATH ?= $(ROOT)/trusted-firmware-a
UBOOT_PATH ?= $(ROOT)/u-boot
OPTEE_CLIENT_EXPORT ?= $(OPTEE_CLIENT_PATH)/out/export
OPTEE_PATH ?= $(ROOT)/optee_os
LINUX_PATH ?= $(ROOT)/linux
LINUX_DTB ?= $(LINUX_PATH)/arch/arm64/boot/dts/freescale/fsl-imx8mm-verdin-dev.dtb
MODULE_OUTPUT ?= $(ROOT)/module_output
UBOOT_BIN ?= $(UBOOT_PATH)/flash.bin
OPTEE_ELF ?= $(OPTEE_PATH)/out/arm/core/tee.elf
DDR_URL ?= https://www.nxp.com/lgfiles/NMG/MAD/YOCTO/firmware-imx-8.1.1.bin
DDR_PATH ?= $(ROOT)/ddr-firmware
ATF_LOAD_ADDR ?= 0x920000
TEE_LOAD_ADDR ?= 0xbe000000
################################################################################
# Targets
################################################################################
.PHONY: all
all: u-boot arm-tf buildroot linux prepare-images | toolchains
.PHONY: clean
clean: u-boot-clean arm-tf-clean linux-clean optee-os-clean \
buildroot-clean
################################################################################
# Toolchain
################################################################################
include toolchain.mk
################################################################################
# U-Boot
################################################################################
.PHONY: u-boot-config
u-boot-config:
ifeq ($(wildcard $(UBOOT_PATH)/.config),)
$(MAKE) -C $(UBOOT_PATH) \
CROSS_COMPILE=$(AARCH64_CROSS_COMPILE) verdin-imx8mm_defconfig
endif
.PHONY: u-boot-menuconfig
u-boot-menuconfig: u-boot-config
$(MAKE) -C $(UBOOT_PATH) \
CROSS_COMPILE=$(AARCH64_CROSS_COMPILE) menuconfig
.PHONY: u-boot
u-boot: u-boot-config arm-tf optee-os ddr-firmware
# Copy BL31 binary from TF-A
cp $(TF_A_PATH)/build/imx8mm/release/bl31.bin $(UBOOT_PATH)
# Prepare proper tee.bin
$(AARCH64_CROSS_COMPILE)objcopy -O binary \
$(OPTEE_ELF) $(UBOOT_PATH)/tee.bin
# Copy DDR4 firmware
cp $(DDR_PATH)/firmware-imx-8.1.1/firmware/ddr/synopsys/lpddr4*.bin \
$(UBOOT_PATH)
# Build U-Boot and final ready-to-flash flash.bin image
ATF_LOAD_ADDR=$(ATF_LOAD_ADDR) TEE_LOAD_ADDR=$(TEE_LOAD_ADDR) \
$(MAKE) -C $(UBOOT_PATH) \
CROSS_COMPILE="$(AARCH64_CROSS_COMPILE)" flash.bin
.PHONY: u-boot-clean
u-boot-clean:
cd $(UBOOT_PATH) && git clean -xdf
################################################################################
# DDR4 Firmware
################################################################################
.PHONY: ddr-firmware
ddr-firmware:
# DDR is exported to the $PWD only, so cd to $(DDR_PATH)
# before unpacking
if [ ! -d "$(DDR_PATH)" ]; then \
mkdir -p $(DDR_PATH) && \
wget $(DDR_URL) -O $(DDR_PATH)/firmware.bin && \
chmod +x $(DDR_PATH)/firmware.bin && \
cd $(DDR_PATH) && \
$(DDR_PATH)/firmware.bin --auto-accept && \
cd $(ROOT)/build; \
fi;
.PHONY: ddr-firmware-clean
ddr-firmware-clean:
rm -rf $(DDR_PATH)
################################################################################
# ARM Trusted Firmware
################################################################################
.PHONY: arm-tf
arm-tf:
$(MAKE) -C $(TF_A_PATH) \
PLAT=imx8mm \
CROSS_COMPILE="$(CCACHE)$(AARCH64_CROSS_COMPILE)" \
SPD=opteed \
bl31
.PHONY: arm-tf-clean
arm-tf-clean:
cd $(TF_A_PATH) && git clean -xdf
################################################################################
# OP-TEE
################################################################################
OPTEE_OS_COMMON_FLAGS += PLATFORM=imx PLATFORM_FLAVOR=mx8mmevk CFG_ARM64_core=y CFG_UART_BASE=0x30860000
OPTEE_OS_CLEAN_COMMON_FLAGS += PLATFORM=imx-mx8mmevk
.PHONY: optee-os
optee-os: optee-os-common
.PHONY: optee-os-clean
optee-os-clean: optee-os-clean-common
################################################################################
# Linux
################################################################################
LINUX_DEFCONFIG_COMMON_ARCH := arm64
LINUX_DEFCONFIG_COMMON_FILES := \
$(LINUX_PATH)/arch/arm64/configs/defconfig \
linux-defconfig: $(LINUX_PATH)/.config
LINUX_COMMON_FLAGS += ARCH=arm64
linux: linux-common
$(MAKE) -C $(LINUX_PATH) $(LINUX_COMMON_FLAGS) freescale/fsl-imx8mm-verdin-dev.dtb
$(MAKE) -C $(LINUX_PATH) $(LINUX_COMMON_FLAGS) INSTALL_MOD_STRIP=1 \
INSTALL_MOD_PATH=$(MODULE_OUTPUT) modules_install
linux-defconfig-clean: linux-defconfig-clean-common
LINUX_CLEAN_COMMON_FLAGS += ARCH=arm64
linux-clean: linux-clean-common
LINUX_CLEANER_COMMON_FLAGS += ARCH=arm64
linux-cleaner: linux-cleaner-common
.PHONY: prepare-images
prepare-images: linux u-boot buildroot
@mkdir -p $(OUT_PATH)
@cp $(UBOOT_BIN) $(OUT_PATH)
@cp $(LINUX_PATH)/arch/arm64/boot/Image $(OUT_PATH)
@cp $(LINUX_DTB) $(OUT_PATH)
@cp $(ROOT)/out-br/images/rootfs.tar $(OUT_PATH)
################################################################################
# Buildroot/RootFS
################################################################################
.PHONY: update_rootfs
update_rootfs: u-boot linux
@cd $(MODULE_OUTPUT) && find . | cpio -pudm $(BUILDROOT_TARGET_ROOT)
@cd $(ROOT)/build
.PHONY: buildroot
buildroot: update_rootfs