blob: 35795567fa82a1f4150abe283f465266b55f41cd [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
11# Firmware package to download, for convenience later on when unpacking etc,
12# we split it up in three different variables. Note that this should be updated
13# when newer firmware packages will be used.
14RPI3_FIRMWARE_URL = https://github.com/raspberrypi/firmware/archive
Igor Opaniuk3aaa1f12017-01-04 16:54:51 +020015RPI3_FIRMWARE_FILE = da504fcd4c673ecf85841ea80c28a8bb8b94e612
Philip Attfield3f9250f2016-09-14 07:43:32 +020016RPI3_FIRMWARE_FILE_EXT = zip
17
18-include common.mk
19
20################################################################################
21# Mandatory definition to use common.mk
22################################################################################
23ifeq ($(COMPILE_NS_USER),64)
24MULTIARCH := aarch64-linux-gnu
25else
26MULTIARCH := arm-linux-gnueabihf
27endif
28
29################################################################################
30# Paths to git projects and various binaries
31################################################################################
32ARM_TF_PATH ?= $(ROOT)/arm-trusted-firmware
33ARM_TF_OUT ?= $(ARM_TF_PATH)/build/rpi3/debug
34ARM_TF_BIN ?= $(ARM_TF_OUT)/bl31.bin
35ARM_TF_TMP ?= $(ARM_TF_OUT)/bl31.tmp
36ARM_TF_HEAD ?= $(ARM_TF_OUT)/bl31.head
37ARM_TF_BOOT ?= $(ARM_TF_OUT)/optee.bin
38
39U-BOOT_PATH ?= $(ROOT)/u-boot
40U-BOOT_BIN ?= $(U-BOOT_PATH)/u-boot.bin
Igor Opaniukaccde812017-07-14 17:36:56 +030041U-BOOT_RPI_BIN ?= $(U-BOOT_PATH)/u-boot-rpi.bin
Philip Attfield3f9250f2016-09-14 07:43:32 +020042
Igor Opaniuk67959e12016-12-21 15:19:27 +020043RPI3_FIRMWARE_PATH ?= $(BUILD_PATH)/rpi3/firmware
44RPI3_HEAD_BIN ?= $(ROOT)/out/head.bin
45RPI3_BOOT_CONFIG ?= $(RPI3_FIRMWARE_PATH)/config.txt
46RPI3_UBOOT_ENV ?= $(ROOT)/out/uboot.env
47RPI3_UBOOT_ENV_TXT ?= $(RPI3_FIRMWARE_PATH)/uboot.env.txt
48RPI3_STOCK_FW_PATH ?= $(ROOT)/rpi3_firmware
49RPI3_STOCK_FW_PATH_BOOT ?= $(RPI3_STOCK_FW_PATH)/boot
50RPI3_STOCK_ZIP_BOOT ?= firmware-$(RPI3_FIRMWARE_FILE)/boot
51OPTEE_OS_PAGER ?= $(OPTEE_OS_PATH)/out/arm/core/tee-pager.bin
Philip Attfield3f9250f2016-09-14 07:43:32 +020052
53LINUX_IMAGE ?= $(LINUX_PATH)/arch/arm64/boot/Image
54LINUX_DTB ?= $(LINUX_PATH)/arch/arm64/boot/dts/broadcom/bcm2710-rpi-3-b.dtb
55MODULE_OUTPUT ?= $(ROOT)/module_output
56
57################################################################################
58# Targets
59################################################################################
Igor Opaniukd5226382017-07-14 18:11:07 +030060ifeq ($(CFG_TEE_BENCHMARK),y)
61all: benchmark-app
62clean: benchmark-app-clean
63endif
Igor Opaniukd5034112017-09-04 23:46:42 +030064all: rpi3-firmware arm-tf optee-os optee-client xtest u-boot u-boot-rpi-bin\
Igor Opaniuk584efe52017-08-07 01:41:48 +030065 linux update_rootfs optee-examples
Igor Opaniukd5034112017-09-04 23:46:42 +030066clean: arm-tf-clean busybox-clean u-boot-clean u-boot-rpi-bin-clean \
Igor Opaniuk584efe52017-08-07 01:41:48 +030067 optee-os-clean optee-client-clean rpi3-firmware-clean head-bin-clean \
68 optee-examples-clean
Philip Attfield3f9250f2016-09-14 07:43:32 +020069
70-include toolchain.mk
71
72################################################################################
73# ARM Trusted Firmware
74################################################################################
75ARM_TF_EXPORTS ?= \
76 CFLAGS="-O0 -gdwarf-2" \
77 CROSS_COMPILE="$(CCACHE)$(AARCH64_CROSS_COMPILE)"
78
79ARM_TF_FLAGS ?= \
80 BL32=$(OPTEE_OS_BIN) \
81 DEBUG=1 \
82 V=0 \
83 CRASH_REPORTING=1 \
84 LOG_LEVEL=40 \
85 PLAT=rpi3 \
86 SPD=opteed
87
88arm-tf: optee-os
89 $(ARM_TF_EXPORTS) $(MAKE) -C $(ARM_TF_PATH) $(ARM_TF_FLAGS) all
90 cd $(ARM_TF_OUT) && \
91 dd if=/dev/zero of=scratch bs=1c count=131072 && \
92 cat $(ARM_TF_BIN) scratch > $(ARM_TF_TMP) && \
93 dd if=$(ARM_TF_TMP) of=$(ARM_TF_HEAD) bs=1c count=131072 && \
94 cat $(ARM_TF_HEAD) $(OPTEE_OS_PAGER) > $(ARM_TF_BOOT) && \
95 rm scratch $(ARM_TF_TMP) $(ARM_TF_HEAD)
96
97arm-tf-clean:
98 $(ARM_TF_EXPORTS) $(MAKE) -C $(ARM_TF_PATH) $(ARM_TF_FLAGS) clean
99
100################################################################################
101# Das U-Boot
102################################################################################
103
104U-BOOT_EXPORTS ?= CROSS_COMPILE=$(LEGACY_AARCH64_CROSS_COMPILE) ARCH=arm64
105
106.PHONY: u-boot
Jerome Forissiere8caec72016-12-15 17:07:07 +0100107u-boot: $(RPI3_HEAD_BIN)
Philip Attfield3f9250f2016-09-14 07:43:32 +0200108 $(U-BOOT_EXPORTS) $(MAKE) -C $(U-BOOT_PATH) rpi_3_defconfig
109 $(U-BOOT_EXPORTS) $(MAKE) -C $(U-BOOT_PATH) all
Igor Opaniukc176f572016-12-19 22:47:09 +0200110 $(U-BOOT_EXPORTS) $(MAKE) -C $(U-BOOT_PATH) tools
Philip Attfield3f9250f2016-09-14 07:43:32 +0200111
112u-boot-clean:
113 $(U-BOOT_EXPORTS) $(MAKE) -C $(U-BOOT_PATH) clean
114
Igor Opaniukaccde812017-07-14 17:36:56 +0300115u-boot-rpi-bin: $(RPI3_UBOOT_ENV) u-boot
116 cd $(U-BOOT_PATH) && cat $(RPI3_HEAD_BIN) $(U-BOOT_BIN) > $(U-BOOT_RPI_BIN)
Igor Opaniukc176f572016-12-19 22:47:09 +0200117
Igor Opaniukaccde812017-07-14 17:36:56 +0300118u-boot-rpi-bin-clean:
119 rm -f $(U-BOOT_RPI_BIN)
Igor Opaniukc176f572016-12-19 22:47:09 +0200120
Jerome Forissiere8caec72016-12-15 17:07:07 +0100121$(RPI3_HEAD_BIN): $(RPI3_FIRMWARE_PATH)/head.S
122 mkdir -p $(ROOT)/out/
123 $(AARCH64_CROSS_COMPILE)as $< -o $(ROOT)/out/head.o
124 $(AARCH64_CROSS_COMPILE)objcopy -O binary $(ROOT)/out/head.o $@
125
126head-bin-clean:
127 rm -f $(RPI3_HEAD_BIN) $(ROOT)/out/head.o
128
Igor Opaniukc176f572016-12-19 22:47:09 +0200129$(RPI3_UBOOT_ENV): $(RPI3_UBOOT_ENV_TXT) u-boot
130 mkdir -p $(ROOT)/out
131 $(U-BOOT_PATH)/tools/mkenvimage -s 0x4000 -o $(ROOT)/out/uboot.env $(RPI3_UBOOT_ENV_TXT)
132
133u-boot-env-clean:
134 rm -f $(RPI3_UBOOT_ENV)
135
Philip Attfield3f9250f2016-09-14 07:43:32 +0200136################################################################################
137# Busybox
138################################################################################
139BUSYBOX_COMMON_TARGET = rpi3
140BUSYBOX_CLEAN_COMMON_TARGET = rpi3 clean
141
142busybox: busybox-common
143
144busybox-clean: busybox-clean-common
145
146busybox-cleaner: busybox-cleaner-common
147################################################################################
148# Linux kernel
149################################################################################
150LINUX_DEFCONFIG_COMMON_ARCH := arm64
151LINUX_DEFCONFIG_COMMON_FILES := \
152 $(LINUX_PATH)/arch/arm64/configs/bcmrpi3_defconfig \
153 $(CURDIR)/kconfigs/rpi3.conf
154
155linux-defconfig: $(LINUX_PATH)/.config
156
157LINUX_COMMON_FLAGS += ARCH=arm64
158
159linux: linux-common
160 $(MAKE) -C $(LINUX_PATH) $(LINUX_COMMON_FLAGS) INSTALL_MOD_STRIP=1 INSTALL_MOD_PATH=$(MODULE_OUTPUT) modules_install
161
162linux-defconfig-clean: linux-defconfig-clean-common
163
164LINUX_CLEAN_COMMON_FLAGS += ARCH=arm64
165
166linux-clean: linux-clean-common
167
168LINUX_CLEANER_COMMON_FLAGS += ARCH=arm64
169
170linux-cleaner: linux-cleaner-common
171
172################################################################################
173# OP-TEE
174################################################################################
175OPTEE_OS_COMMON_FLAGS += PLATFORM=rpi3
176optee-os: optee-os-common
177
178OPTEE_OS_CLEAN_COMMON_FLAGS += PLATFORM=rpi3
179optee-os-clean: optee-os-clean-common
180
181optee-client: optee-client-common
182
183optee-client-clean: optee-client-clean-common
184
185################################################################################
186# Raspberry Pi 3 firmware
187################################################################################
188.PHONY: rpi3-firmware
189rpi3-firmware:
190ifeq ("$(wildcard $(ROOT)/out/$(RPI3_FIRMWARE_FILE).$(RPI3_FIRMWARE_FILE_EXT))","")
191 echo "Downloading Raspberry Pi 3 firmware ..."
192 mkdir -p $(ROOT)/out
Igor Opaniuk67959e12016-12-21 15:19:27 +0200193 mkdir -p $(RPI3_STOCK_FW_PATH)/boot
Philip Attfield3f9250f2016-09-14 07:43:32 +0200194 wget $(RPI3_FIRMWARE_URL)/$(RPI3_FIRMWARE_FILE).$(RPI3_FIRMWARE_FILE_EXT) -O $(ROOT)/out/$(RPI3_FIRMWARE_FILE).$(RPI3_FIRMWARE_FILE_EXT)
Igor Opaniuk67959e12016-12-21 15:19:27 +0200195 unzip -aj $(ROOT)/out/$(RPI3_FIRMWARE_FILE).$(RPI3_FIRMWARE_FILE_EXT) \
196 '$(RPI3_STOCK_ZIP_BOOT)/bootcode.bin' \
197 '$(RPI3_STOCK_ZIP_BOOT)/COPYING.linux' \
198 '$(RPI3_STOCK_ZIP_BOOT)/fixup_cd.dat' \
199 '$(RPI3_STOCK_ZIP_BOOT)/fixup.dat' \
200 '$(RPI3_STOCK_ZIP_BOOT)/fixup_db.dat' \
201 '$(RPI3_STOCK_ZIP_BOOT)/fixup_x.dat' \
202 '$(RPI3_STOCK_ZIP_BOOT)/LICENCE.broadcom' \
203 '$(RPI3_STOCK_ZIP_BOOT)/start_cd.elf' \
204 '$(RPI3_STOCK_ZIP_BOOT)/start_db.elf' \
205 '$(RPI3_STOCK_ZIP_BOOT)/start.elf' \
206 '$(RPI3_STOCK_ZIP_BOOT)/start_x.elf' -d $(RPI3_STOCK_FW_PATH)/boot
Philip Attfield3f9250f2016-09-14 07:43:32 +0200207endif
208
209.PHONY: rpi3-firmware-clean
210rpi3-firmware-clean:
211 rm -f $(ROOT)/out/$(RPI3_FIRMWARE_FILE).$(RPI3_FIRMWARE_FILE_EXT)
Igor Opaniuk67959e12016-12-21 15:19:27 +0200212 if [ -d "$(RPI3_STOCK_FW_PATH_BOOT)" ]; then \
213 rm -f '$(RPI3_STOCK_FW_PATH_BOOT)/bootcode.bin' \
214 '$(RPI3_STOCK_FW_PATH_BOOT)/COPYING.linux' \
215 '$(RPI3_STOCK_FW_PATH_BOOT)/fixup_cd.dat' \
216 '$(RPI3_STOCK_FW_PATH_BOOT)/fixup.dat' \
217 '$(RPI3_STOCK_FW_PATH_BOOT)/fixup_db.dat' \
218 '$(RPI3_STOCK_FW_PATH_BOOT)/fixup_x.dat' \
219 '$(RPI3_STOCK_FW_PATH_BOOT)/LICENCE.broadcom' \
220 '$(RPI3_STOCK_FW_PATH_BOOT)/start_cd.elf' \
221 '$(RPI3_STOCK_FW_PATH_BOOT)/start_db.elf' \
222 '$(RPI3_STOCK_FW_PATH_BOOT)/start.elf' \
223 '$(RPI3_STOCK_FW_PATH_BOOT)/start_x.elf'; \
224 rmdir $(RPI3_STOCK_FW_PATH_BOOT); \
225 rmdir $(RPI3_STOCK_FW_PATH); \
226 fi
227
Philip Attfield3f9250f2016-09-14 07:43:32 +0200228
229################################################################################
230# xtest / optee_test
231################################################################################
232xtest: xtest-common
233
234xtest-clean: xtest-clean-common
235
236xtest-patch: xtest-patch-common
237
238################################################################################
Igor Opaniuk584efe52017-08-07 01:41:48 +0300239# Sample applications / optee_examples
Philip Attfield3f9250f2016-09-14 07:43:32 +0200240################################################################################
Igor Opaniuk584efe52017-08-07 01:41:48 +0300241optee-examples: optee-examples-common
Philip Attfield3f9250f2016-09-14 07:43:32 +0200242
Igor Opaniuk584efe52017-08-07 01:41:48 +0300243optee-examples-clean: optee-examples-clean-common
Philip Attfield3f9250f2016-09-14 07:43:32 +0200244
245################################################################################
Igor Opaniukd5226382017-07-14 18:11:07 +0300246# benchmark
247################################################################################
248benchmark-app: benchmark-app-common
249
250benchmark-app-clean: benchmark-app-clean-common
251
252################################################################################
Philip Attfield3f9250f2016-09-14 07:43:32 +0200253# Root FS
254################################################################################
255.PHONY: filelist-tee
Igor Opaniuk67959e12016-12-21 15:19:27 +0200256filelist-tee: linux rpi3-firmware
Etienne Carriere5e113512016-10-21 10:13:57 +0200257filelist-tee: filelist-tee-common
Philip Attfield3f9250f2016-09-14 07:43:32 +0200258 @echo "dir /usr/bin 755 0 0" >> $(GEN_ROOTFS_FILELIST)
Philip Attfield3f9250f2016-09-14 07:43:32 +0200259 @echo "dir /boot 755 0 0" >> $(GEN_ROOTFS_FILELIST)
260 @echo "file /boot/bcm2710-rpi-3-b.dtb $(LINUX_DTB) 755 0 0" >> $(GEN_ROOTFS_FILELIST)
261 @echo "file /boot/config.txt $(RPI3_BOOT_CONFIG) 755 0 0" >> $(GEN_ROOTFS_FILELIST)
262 @echo "file /boot/Image $(LINUX_IMAGE) 755 0 0" >> $(GEN_ROOTFS_FILELIST)
263 @echo "file /boot/optee.bin $(ARM_TF_BOOT) 755 0 0" >> $(GEN_ROOTFS_FILELIST)
264 @echo "file /boot/uboot.env $(RPI3_UBOOT_ENV) 755 0 0" >> $(GEN_ROOTFS_FILELIST)
Igor Opaniukaccde812017-07-14 17:36:56 +0300265 @echo "file /boot/u-boot-rpi.bin $(U-BOOT_RPI_BIN) 755 0 0" >> $(GEN_ROOTFS_FILELIST)
Philip Attfield3f9250f2016-09-14 07:43:32 +0200266 @cd $(MODULE_OUTPUT) && find ! -path . -type d | sed 's/\.\(.*\)/dir \1 755 0 0/g' >> $(GEN_ROOTFS_FILELIST)
267 @cd $(MODULE_OUTPUT) && find -type f | sed "s|\.\(.*\)|file \1 $(MODULE_OUTPUT)\1 755 0 0|g" >> $(GEN_ROOTFS_FILELIST)
268 @echo "file /boot/bootcode.bin $(RPI3_STOCK_FW_PATH)/boot/bootcode.bin 755 0 0" >> $(GEN_ROOTFS_FILELIST)
269 @echo "file /boot/COPYING.linux $(RPI3_STOCK_FW_PATH)/boot/COPYING.linux 755 0 0" >> $(GEN_ROOTFS_FILELIST)
270 @echo "file /boot/fixup_cd.dat $(RPI3_STOCK_FW_PATH)/boot/fixup_cd.dat 755 0 0" >> $(GEN_ROOTFS_FILELIST)
271 @echo "file /boot/fixup.dat $(RPI3_STOCK_FW_PATH)/boot/fixup.dat 755 0 0" >> $(GEN_ROOTFS_FILELIST)
272 @echo "file /boot/fixup_db.dat $(RPI3_STOCK_FW_PATH)/boot/fixup_db.dat 755 0 0" >> $(GEN_ROOTFS_FILELIST)
273 @echo "file /boot/fixup_x.dat $(RPI3_STOCK_FW_PATH)/boot/fixup_x.dat 755 0 0" >> $(GEN_ROOTFS_FILELIST)
274 @echo "file /boot/LICENCE.broadcom $(RPI3_STOCK_FW_PATH)/boot/LICENCE.broadcom 755 0 0" >> $(GEN_ROOTFS_FILELIST)
275 @echo "file /boot/start_cd.elf $(RPI3_STOCK_FW_PATH)/boot/start_cd.elf 755 0 0" >> $(GEN_ROOTFS_FILELIST)
276 @echo "file /boot/start_db.elf $(RPI3_STOCK_FW_PATH)/boot/start_db.elf 755 0 0" >> $(GEN_ROOTFS_FILELIST)
277 @echo "file /boot/start.elf $(RPI3_STOCK_FW_PATH)/boot/start.elf 755 0 0" >> $(GEN_ROOTFS_FILELIST)
278 @echo "file /boot/start_x.elf $(RPI3_STOCK_FW_PATH)/boot/start_x.elf 755 0 0" >> $(GEN_ROOTFS_FILELIST)
279
280.PHONY: update_rootfs
Igor Opaniuk67959e12016-12-21 15:19:27 +0200281update_rootfs: arm-tf u-boot rpi3-firmware
Etienne Carriere5e113512016-10-21 10:13:57 +0200282update_rootfs: update_rootfs-common
Philip Attfield3f9250f2016-09-14 07:43:32 +0200283
284# Creating images etc, could wipe out a drive on the system, therefore we don't
285# want to automate that in script or make target. Instead we just simply provide
286# the steps here.
287.PHONY: img-help
288img-help:
289 @echo "$$ fdisk /dev/sdx # where sdx is the name of your sd-card"
290 @echo " > p # prints partition table"
291 @echo " > d # repeat until all partitions are deleted"
292 @echo " > n # create a new partition"
293 @echo " > p # create primary"
294 @echo " > 1 # make it the first partition"
295 @echo " > <enter> # use the default sector"
296 @echo " > +32M # create a boot partition with 32MB of space"
297 @echo " > n # create rootfs partition"
298 @echo " > p"
299 @echo " > 2"
300 @echo " > <enter>"
301 @echo " > <enter> # fill the remaining disk, adjust size to fit your needs"
302 @echo " > t # change partition type"
303 @echo " > 1 # select first partition"
304 @echo " > e # use type 'e' (FAT16)"
305 @echo " > a # make partition bootable"
306 @echo " > 1 # select first partition"
307 @echo " > p # double check everything looks right"
308 @echo " > w # write partition table to disk."
309 @echo ""
310 @echo "run the following as root"
311 @echo " $$ mkfs.vfat -F16 -n BOOT /dev/sdx1"
312 @echo " $$ mkdir -p /media/boot"
313 @echo " $$ mount /dev/sdx1 /media/boot"
314 @echo " $$ cd /media"
315 @echo " $$ gunzip -cd $(GEN_ROOTFS_PATH)/filesystem.cpio.gz | sudo cpio -idmv \"boot/*\""
316 @echo " $$ umount boot"
317 @echo ""
318 @echo "run the following as root"
319 @echo " $$ mkfs.ext4 -L rootfs /dev/sdx2"
320 @echo " $$ mkdir -p /media/rootfs"
321 @echo " $$ mount /dev/sdx2 /media/rootfs"
322 @echo " $$ cd rootfs"
323 @echo " $$ gunzip -cd $(GEN_ROOTFS_PATH)/filesystem.cpio.gz | sudo cpio -idmv"
324 @echo " $$ rm -rf /media/rootfs/boot/*"
325 @echo " $$ cd .. && umount rootfs"