blob: 9453fcdcde7d0cc27cf55baab3002b2e8a85c370 [file] [log] [blame]
Philip Attfield3f9250f2016-09-14 07:43:32 +02001################################################################################
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
Philip Attfield3f9250f2016-09-14 07:43:32 +020011-include common.mk
12
13################################################################################
Philip Attfield3f9250f2016-09-14 07:43:32 +020014# Paths to git projects and various binaries
15################################################################################
16ARM_TF_PATH ?= $(ROOT)/arm-trusted-firmware
17ARM_TF_OUT ?= $(ARM_TF_PATH)/build/rpi3/debug
18ARM_TF_BIN ?= $(ARM_TF_OUT)/bl31.bin
19ARM_TF_TMP ?= $(ARM_TF_OUT)/bl31.tmp
20ARM_TF_HEAD ?= $(ARM_TF_OUT)/bl31.head
21ARM_TF_BOOT ?= $(ARM_TF_OUT)/optee.bin
22
23U-BOOT_PATH ?= $(ROOT)/u-boot
24U-BOOT_BIN ?= $(U-BOOT_PATH)/u-boot.bin
Igor Opaniukaccde812017-07-14 17:36:56 +030025U-BOOT_RPI_BIN ?= $(U-BOOT_PATH)/u-boot-rpi.bin
Philip Attfield3f9250f2016-09-14 07:43:32 +020026
Igor Opaniuk67959e12016-12-21 15:19:27 +020027RPI3_FIRMWARE_PATH ?= $(BUILD_PATH)/rpi3/firmware
28RPI3_HEAD_BIN ?= $(ROOT)/out/head.bin
29RPI3_BOOT_CONFIG ?= $(RPI3_FIRMWARE_PATH)/config.txt
30RPI3_UBOOT_ENV ?= $(ROOT)/out/uboot.env
31RPI3_UBOOT_ENV_TXT ?= $(RPI3_FIRMWARE_PATH)/uboot.env.txt
Igor Opaniuk29da21d2017-09-14 23:55:10 +030032RPI3_STOCK_FW_PATH ?= $(ROOT)/firmware
Igor Opaniuk67959e12016-12-21 15:19:27 +020033RPI3_STOCK_FW_PATH_BOOT ?= $(RPI3_STOCK_FW_PATH)/boot
Igor Opaniuk67959e12016-12-21 15:19:27 +020034OPTEE_OS_PAGER ?= $(OPTEE_OS_PATH)/out/arm/core/tee-pager.bin
Philip Attfield3f9250f2016-09-14 07:43:32 +020035
36LINUX_IMAGE ?= $(LINUX_PATH)/arch/arm64/boot/Image
37LINUX_DTB ?= $(LINUX_PATH)/arch/arm64/boot/dts/broadcom/bcm2710-rpi-3-b.dtb
38MODULE_OUTPUT ?= $(ROOT)/module_output
39
40################################################################################
41# Targets
42################################################################################
Igor Opaniukd5226382017-07-14 18:11:07 +030043ifeq ($(CFG_TEE_BENCHMARK),y)
44all: benchmark-app
45clean: benchmark-app-clean
46endif
Igor Opaniuk29da21d2017-09-14 23:55:10 +030047all: arm-tf optee-os optee-client xtest u-boot u-boot-rpi-bin\
Igor Opaniuk584efe52017-08-07 01:41:48 +030048 linux update_rootfs optee-examples
Igor Opaniukd5034112017-09-04 23:46:42 +030049clean: arm-tf-clean busybox-clean u-boot-clean u-boot-rpi-bin-clean \
Igor Opaniuk29da21d2017-09-14 23:55:10 +030050 optee-os-clean optee-client-clean head-bin-clean \
Igor Opaniuk584efe52017-08-07 01:41:48 +030051 optee-examples-clean
Philip Attfield3f9250f2016-09-14 07:43:32 +020052
53-include toolchain.mk
54
55################################################################################
56# ARM Trusted Firmware
57################################################################################
58ARM_TF_EXPORTS ?= \
59 CFLAGS="-O0 -gdwarf-2" \
60 CROSS_COMPILE="$(CCACHE)$(AARCH64_CROSS_COMPILE)"
61
62ARM_TF_FLAGS ?= \
63 BL32=$(OPTEE_OS_BIN) \
64 DEBUG=1 \
65 V=0 \
66 CRASH_REPORTING=1 \
67 LOG_LEVEL=40 \
68 PLAT=rpi3 \
69 SPD=opteed
70
71arm-tf: optee-os
72 $(ARM_TF_EXPORTS) $(MAKE) -C $(ARM_TF_PATH) $(ARM_TF_FLAGS) all
73 cd $(ARM_TF_OUT) && \
74 dd if=/dev/zero of=scratch bs=1c count=131072 && \
75 cat $(ARM_TF_BIN) scratch > $(ARM_TF_TMP) && \
76 dd if=$(ARM_TF_TMP) of=$(ARM_TF_HEAD) bs=1c count=131072 && \
77 cat $(ARM_TF_HEAD) $(OPTEE_OS_PAGER) > $(ARM_TF_BOOT) && \
78 rm scratch $(ARM_TF_TMP) $(ARM_TF_HEAD)
79
80arm-tf-clean:
81 $(ARM_TF_EXPORTS) $(MAKE) -C $(ARM_TF_PATH) $(ARM_TF_FLAGS) clean
82
83################################################################################
84# Das U-Boot
85################################################################################
86
87U-BOOT_EXPORTS ?= CROSS_COMPILE=$(LEGACY_AARCH64_CROSS_COMPILE) ARCH=arm64
88
89.PHONY: u-boot
Jerome Forissiere8caec72016-12-15 17:07:07 +010090u-boot: $(RPI3_HEAD_BIN)
Philip Attfield3f9250f2016-09-14 07:43:32 +020091 $(U-BOOT_EXPORTS) $(MAKE) -C $(U-BOOT_PATH) rpi_3_defconfig
92 $(U-BOOT_EXPORTS) $(MAKE) -C $(U-BOOT_PATH) all
Igor Opaniukc176f572016-12-19 22:47:09 +020093 $(U-BOOT_EXPORTS) $(MAKE) -C $(U-BOOT_PATH) tools
Philip Attfield3f9250f2016-09-14 07:43:32 +020094
95u-boot-clean:
96 $(U-BOOT_EXPORTS) $(MAKE) -C $(U-BOOT_PATH) clean
97
Igor Opaniukaccde812017-07-14 17:36:56 +030098u-boot-rpi-bin: $(RPI3_UBOOT_ENV) u-boot
99 cd $(U-BOOT_PATH) && cat $(RPI3_HEAD_BIN) $(U-BOOT_BIN) > $(U-BOOT_RPI_BIN)
Igor Opaniukc176f572016-12-19 22:47:09 +0200100
Igor Opaniukaccde812017-07-14 17:36:56 +0300101u-boot-rpi-bin-clean:
102 rm -f $(U-BOOT_RPI_BIN)
Igor Opaniukc176f572016-12-19 22:47:09 +0200103
Jerome Forissiere8caec72016-12-15 17:07:07 +0100104$(RPI3_HEAD_BIN): $(RPI3_FIRMWARE_PATH)/head.S
105 mkdir -p $(ROOT)/out/
106 $(AARCH64_CROSS_COMPILE)as $< -o $(ROOT)/out/head.o
107 $(AARCH64_CROSS_COMPILE)objcopy -O binary $(ROOT)/out/head.o $@
108
109head-bin-clean:
110 rm -f $(RPI3_HEAD_BIN) $(ROOT)/out/head.o
111
Igor Opaniukc176f572016-12-19 22:47:09 +0200112$(RPI3_UBOOT_ENV): $(RPI3_UBOOT_ENV_TXT) u-boot
113 mkdir -p $(ROOT)/out
114 $(U-BOOT_PATH)/tools/mkenvimage -s 0x4000 -o $(ROOT)/out/uboot.env $(RPI3_UBOOT_ENV_TXT)
115
116u-boot-env-clean:
117 rm -f $(RPI3_UBOOT_ENV)
118
Philip Attfield3f9250f2016-09-14 07:43:32 +0200119################################################################################
120# Busybox
121################################################################################
122BUSYBOX_COMMON_TARGET = rpi3
123BUSYBOX_CLEAN_COMMON_TARGET = rpi3 clean
124
125busybox: busybox-common
126
127busybox-clean: busybox-clean-common
128
129busybox-cleaner: busybox-cleaner-common
130################################################################################
131# Linux kernel
132################################################################################
133LINUX_DEFCONFIG_COMMON_ARCH := arm64
134LINUX_DEFCONFIG_COMMON_FILES := \
135 $(LINUX_PATH)/arch/arm64/configs/bcmrpi3_defconfig \
136 $(CURDIR)/kconfigs/rpi3.conf
137
138linux-defconfig: $(LINUX_PATH)/.config
139
140LINUX_COMMON_FLAGS += ARCH=arm64
141
142linux: linux-common
143 $(MAKE) -C $(LINUX_PATH) $(LINUX_COMMON_FLAGS) INSTALL_MOD_STRIP=1 INSTALL_MOD_PATH=$(MODULE_OUTPUT) modules_install
144
145linux-defconfig-clean: linux-defconfig-clean-common
146
147LINUX_CLEAN_COMMON_FLAGS += ARCH=arm64
148
149linux-clean: linux-clean-common
150
151LINUX_CLEANER_COMMON_FLAGS += ARCH=arm64
152
153linux-cleaner: linux-cleaner-common
154
155################################################################################
156# OP-TEE
157################################################################################
158OPTEE_OS_COMMON_FLAGS += PLATFORM=rpi3
159optee-os: optee-os-common
160
161OPTEE_OS_CLEAN_COMMON_FLAGS += PLATFORM=rpi3
162optee-os-clean: optee-os-clean-common
163
164optee-client: optee-client-common
165
166optee-client-clean: optee-client-clean-common
167
168################################################################################
Philip Attfield3f9250f2016-09-14 07:43:32 +0200169# xtest / optee_test
170################################################################################
171xtest: xtest-common
172
173xtest-clean: xtest-clean-common
174
175xtest-patch: xtest-patch-common
176
177################################################################################
Igor Opaniuk584efe52017-08-07 01:41:48 +0300178# Sample applications / optee_examples
Philip Attfield3f9250f2016-09-14 07:43:32 +0200179################################################################################
Igor Opaniuk584efe52017-08-07 01:41:48 +0300180optee-examples: optee-examples-common
Philip Attfield3f9250f2016-09-14 07:43:32 +0200181
Igor Opaniuk584efe52017-08-07 01:41:48 +0300182optee-examples-clean: optee-examples-clean-common
Philip Attfield3f9250f2016-09-14 07:43:32 +0200183
184################################################################################
Igor Opaniukd5226382017-07-14 18:11:07 +0300185# benchmark
186################################################################################
187benchmark-app: benchmark-app-common
188
189benchmark-app-clean: benchmark-app-clean-common
190
191################################################################################
Philip Attfield3f9250f2016-09-14 07:43:32 +0200192# Root FS
193################################################################################
194.PHONY: filelist-tee
Igor Opaniuk29da21d2017-09-14 23:55:10 +0300195filelist-tee: linux
Etienne Carriere5e113512016-10-21 10:13:57 +0200196filelist-tee: filelist-tee-common
Philip Attfield3f9250f2016-09-14 07:43:32 +0200197 @echo "dir /usr/bin 755 0 0" >> $(GEN_ROOTFS_FILELIST)
Philip Attfield3f9250f2016-09-14 07:43:32 +0200198 @echo "dir /boot 755 0 0" >> $(GEN_ROOTFS_FILELIST)
199 @echo "file /boot/bcm2710-rpi-3-b.dtb $(LINUX_DTB) 755 0 0" >> $(GEN_ROOTFS_FILELIST)
200 @echo "file /boot/config.txt $(RPI3_BOOT_CONFIG) 755 0 0" >> $(GEN_ROOTFS_FILELIST)
201 @echo "file /boot/Image $(LINUX_IMAGE) 755 0 0" >> $(GEN_ROOTFS_FILELIST)
202 @echo "file /boot/optee.bin $(ARM_TF_BOOT) 755 0 0" >> $(GEN_ROOTFS_FILELIST)
203 @echo "file /boot/uboot.env $(RPI3_UBOOT_ENV) 755 0 0" >> $(GEN_ROOTFS_FILELIST)
Igor Opaniukaccde812017-07-14 17:36:56 +0300204 @echo "file /boot/u-boot-rpi.bin $(U-BOOT_RPI_BIN) 755 0 0" >> $(GEN_ROOTFS_FILELIST)
Philip Attfield3f9250f2016-09-14 07:43:32 +0200205 @cd $(MODULE_OUTPUT) && find ! -path . -type d | sed 's/\.\(.*\)/dir \1 755 0 0/g' >> $(GEN_ROOTFS_FILELIST)
206 @cd $(MODULE_OUTPUT) && find -type f | sed "s|\.\(.*\)|file \1 $(MODULE_OUTPUT)\1 755 0 0|g" >> $(GEN_ROOTFS_FILELIST)
207 @echo "file /boot/bootcode.bin $(RPI3_STOCK_FW_PATH)/boot/bootcode.bin 755 0 0" >> $(GEN_ROOTFS_FILELIST)
208 @echo "file /boot/COPYING.linux $(RPI3_STOCK_FW_PATH)/boot/COPYING.linux 755 0 0" >> $(GEN_ROOTFS_FILELIST)
209 @echo "file /boot/fixup_cd.dat $(RPI3_STOCK_FW_PATH)/boot/fixup_cd.dat 755 0 0" >> $(GEN_ROOTFS_FILELIST)
210 @echo "file /boot/fixup.dat $(RPI3_STOCK_FW_PATH)/boot/fixup.dat 755 0 0" >> $(GEN_ROOTFS_FILELIST)
211 @echo "file /boot/fixup_db.dat $(RPI3_STOCK_FW_PATH)/boot/fixup_db.dat 755 0 0" >> $(GEN_ROOTFS_FILELIST)
212 @echo "file /boot/fixup_x.dat $(RPI3_STOCK_FW_PATH)/boot/fixup_x.dat 755 0 0" >> $(GEN_ROOTFS_FILELIST)
213 @echo "file /boot/LICENCE.broadcom $(RPI3_STOCK_FW_PATH)/boot/LICENCE.broadcom 755 0 0" >> $(GEN_ROOTFS_FILELIST)
214 @echo "file /boot/start_cd.elf $(RPI3_STOCK_FW_PATH)/boot/start_cd.elf 755 0 0" >> $(GEN_ROOTFS_FILELIST)
215 @echo "file /boot/start_db.elf $(RPI3_STOCK_FW_PATH)/boot/start_db.elf 755 0 0" >> $(GEN_ROOTFS_FILELIST)
216 @echo "file /boot/start.elf $(RPI3_STOCK_FW_PATH)/boot/start.elf 755 0 0" >> $(GEN_ROOTFS_FILELIST)
217 @echo "file /boot/start_x.elf $(RPI3_STOCK_FW_PATH)/boot/start_x.elf 755 0 0" >> $(GEN_ROOTFS_FILELIST)
218
219.PHONY: update_rootfs
Igor Opaniuk29da21d2017-09-14 23:55:10 +0300220update_rootfs: arm-tf u-boot
Etienne Carriere5e113512016-10-21 10:13:57 +0200221update_rootfs: update_rootfs-common
Philip Attfield3f9250f2016-09-14 07:43:32 +0200222
223# Creating images etc, could wipe out a drive on the system, therefore we don't
224# want to automate that in script or make target. Instead we just simply provide
225# the steps here.
226.PHONY: img-help
227img-help:
228 @echo "$$ fdisk /dev/sdx # where sdx is the name of your sd-card"
229 @echo " > p # prints partition table"
230 @echo " > d # repeat until all partitions are deleted"
231 @echo " > n # create a new partition"
232 @echo " > p # create primary"
233 @echo " > 1 # make it the first partition"
234 @echo " > <enter> # use the default sector"
235 @echo " > +32M # create a boot partition with 32MB of space"
236 @echo " > n # create rootfs partition"
237 @echo " > p"
238 @echo " > 2"
239 @echo " > <enter>"
240 @echo " > <enter> # fill the remaining disk, adjust size to fit your needs"
241 @echo " > t # change partition type"
242 @echo " > 1 # select first partition"
243 @echo " > e # use type 'e' (FAT16)"
244 @echo " > a # make partition bootable"
245 @echo " > 1 # select first partition"
246 @echo " > p # double check everything looks right"
247 @echo " > w # write partition table to disk."
248 @echo ""
249 @echo "run the following as root"
250 @echo " $$ mkfs.vfat -F16 -n BOOT /dev/sdx1"
251 @echo " $$ mkdir -p /media/boot"
252 @echo " $$ mount /dev/sdx1 /media/boot"
253 @echo " $$ cd /media"
254 @echo " $$ gunzip -cd $(GEN_ROOTFS_PATH)/filesystem.cpio.gz | sudo cpio -idmv \"boot/*\""
255 @echo " $$ umount boot"
256 @echo ""
257 @echo "run the following as root"
258 @echo " $$ mkfs.ext4 -L rootfs /dev/sdx2"
259 @echo " $$ mkdir -p /media/rootfs"
260 @echo " $$ mount /dev/sdx2 /media/rootfs"
261 @echo " $$ cd rootfs"
262 @echo " $$ gunzip -cd $(GEN_ROOTFS_PATH)/filesystem.cpio.gz | sudo cpio -idmv"
263 @echo " $$ rm -rf /media/rootfs/boot/*"
264 @echo " $$ cd .. && umount rootfs"