blob: a64731dd63a63bff78b6eb5d4b0975b9d6f9e616 [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
Joakim Bech359d1302018-06-11 20:48:46 +020011# Need to set this before including common.mk
12BUILDROOT_GETTY_PORT ?= ttyS0
13
Victor Chong7a716512017-09-11 15:18:44 +010014include common.mk
Philip Attfield3f9250f2016-09-14 07:43:32 +020015
16################################################################################
Philip Attfield3f9250f2016-09-14 07:43:32 +020017# Paths to git projects and various binaries
18################################################################################
19ARM_TF_PATH ?= $(ROOT)/arm-trusted-firmware
20ARM_TF_OUT ?= $(ARM_TF_PATH)/build/rpi3/debug
21ARM_TF_BIN ?= $(ARM_TF_OUT)/bl31.bin
22ARM_TF_TMP ?= $(ARM_TF_OUT)/bl31.tmp
23ARM_TF_HEAD ?= $(ARM_TF_OUT)/bl31.head
24ARM_TF_BOOT ?= $(ARM_TF_OUT)/optee.bin
25
26U-BOOT_PATH ?= $(ROOT)/u-boot
27U-BOOT_BIN ?= $(U-BOOT_PATH)/u-boot.bin
Igor Opaniukaccde812017-07-14 17:36:56 +030028U-BOOT_RPI_BIN ?= $(U-BOOT_PATH)/u-boot-rpi.bin
Philip Attfield3f9250f2016-09-14 07:43:32 +020029
Igor Opaniuk67959e12016-12-21 15:19:27 +020030RPI3_FIRMWARE_PATH ?= $(BUILD_PATH)/rpi3/firmware
31RPI3_HEAD_BIN ?= $(ROOT)/out/head.bin
32RPI3_BOOT_CONFIG ?= $(RPI3_FIRMWARE_PATH)/config.txt
33RPI3_UBOOT_ENV ?= $(ROOT)/out/uboot.env
34RPI3_UBOOT_ENV_TXT ?= $(RPI3_FIRMWARE_PATH)/uboot.env.txt
Igor Opaniuk29da21d2017-09-14 23:55:10 +030035RPI3_STOCK_FW_PATH ?= $(ROOT)/firmware
Igor Opaniuk67959e12016-12-21 15:19:27 +020036RPI3_STOCK_FW_PATH_BOOT ?= $(RPI3_STOCK_FW_PATH)/boot
Igor Opaniuk67959e12016-12-21 15:19:27 +020037OPTEE_OS_PAGER ?= $(OPTEE_OS_PATH)/out/arm/core/tee-pager.bin
Philip Attfield3f9250f2016-09-14 07:43:32 +020038
39LINUX_IMAGE ?= $(LINUX_PATH)/arch/arm64/boot/Image
40LINUX_DTB ?= $(LINUX_PATH)/arch/arm64/boot/dts/broadcom/bcm2710-rpi-3-b.dtb
41MODULE_OUTPUT ?= $(ROOT)/module_output
42
43################################################################################
44# Targets
45################################################################################
Joakim Beched30f4e2018-06-11 19:24:19 +020046all: arm-tf buildroot optee-os u-boot u-boot-rpi-bin \
47 linux update_rootfs
48clean: arm-tf-clean buildroot-clean u-boot-clean u-boot-rpi-bin-clean \
49 optee-os-clean head-bin-clean
Philip Attfield3f9250f2016-09-14 07:43:32 +020050
Victor Chong7a716512017-09-11 15:18:44 +010051include toolchain.mk
Philip Attfield3f9250f2016-09-14 07:43:32 +020052
53################################################################################
54# ARM Trusted Firmware
55################################################################################
56ARM_TF_EXPORTS ?= \
Philip Attfield3f9250f2016-09-14 07:43:32 +020057 CROSS_COMPILE="$(CCACHE)$(AARCH64_CROSS_COMPILE)"
58
59ARM_TF_FLAGS ?= \
60 BL32=$(OPTEE_OS_BIN) \
61 DEBUG=1 \
62 V=0 \
63 CRASH_REPORTING=1 \
64 LOG_LEVEL=40 \
65 PLAT=rpi3 \
66 SPD=opteed
67
68arm-tf: optee-os
69 $(ARM_TF_EXPORTS) $(MAKE) -C $(ARM_TF_PATH) $(ARM_TF_FLAGS) all
70 cd $(ARM_TF_OUT) && \
71 dd if=/dev/zero of=scratch bs=1c count=131072 && \
72 cat $(ARM_TF_BIN) scratch > $(ARM_TF_TMP) && \
73 dd if=$(ARM_TF_TMP) of=$(ARM_TF_HEAD) bs=1c count=131072 && \
74 cat $(ARM_TF_HEAD) $(OPTEE_OS_PAGER) > $(ARM_TF_BOOT) && \
75 rm scratch $(ARM_TF_TMP) $(ARM_TF_HEAD)
76
77arm-tf-clean:
78 $(ARM_TF_EXPORTS) $(MAKE) -C $(ARM_TF_PATH) $(ARM_TF_FLAGS) clean
79
80################################################################################
81# Das U-Boot
82################################################################################
83
Joakim Bech025e6322018-05-23 08:37:57 +020084U-BOOT_EXPORTS ?= CROSS_COMPILE=$(AARCH64_CROSS_COMPILE) ARCH=arm64
Philip Attfield3f9250f2016-09-14 07:43:32 +020085
86.PHONY: u-boot
Jerome Forissiere8caec72016-12-15 17:07:07 +010087u-boot: $(RPI3_HEAD_BIN)
Philip Attfield3f9250f2016-09-14 07:43:32 +020088 $(U-BOOT_EXPORTS) $(MAKE) -C $(U-BOOT_PATH) rpi_3_defconfig
89 $(U-BOOT_EXPORTS) $(MAKE) -C $(U-BOOT_PATH) all
Igor Opaniukc176f572016-12-19 22:47:09 +020090 $(U-BOOT_EXPORTS) $(MAKE) -C $(U-BOOT_PATH) tools
Philip Attfield3f9250f2016-09-14 07:43:32 +020091
92u-boot-clean:
93 $(U-BOOT_EXPORTS) $(MAKE) -C $(U-BOOT_PATH) clean
94
Igor Opaniukaccde812017-07-14 17:36:56 +030095u-boot-rpi-bin: $(RPI3_UBOOT_ENV) u-boot
96 cd $(U-BOOT_PATH) && cat $(RPI3_HEAD_BIN) $(U-BOOT_BIN) > $(U-BOOT_RPI_BIN)
Igor Opaniukc176f572016-12-19 22:47:09 +020097
Igor Opaniukaccde812017-07-14 17:36:56 +030098u-boot-rpi-bin-clean:
99 rm -f $(U-BOOT_RPI_BIN)
Igor Opaniukc176f572016-12-19 22:47:09 +0200100
Jerome Forissiere8caec72016-12-15 17:07:07 +0100101$(RPI3_HEAD_BIN): $(RPI3_FIRMWARE_PATH)/head.S
102 mkdir -p $(ROOT)/out/
103 $(AARCH64_CROSS_COMPILE)as $< -o $(ROOT)/out/head.o
104 $(AARCH64_CROSS_COMPILE)objcopy -O binary $(ROOT)/out/head.o $@
105
106head-bin-clean:
107 rm -f $(RPI3_HEAD_BIN) $(ROOT)/out/head.o
108
Igor Opaniukc176f572016-12-19 22:47:09 +0200109$(RPI3_UBOOT_ENV): $(RPI3_UBOOT_ENV_TXT) u-boot
110 mkdir -p $(ROOT)/out
111 $(U-BOOT_PATH)/tools/mkenvimage -s 0x4000 -o $(ROOT)/out/uboot.env $(RPI3_UBOOT_ENV_TXT)
112
113u-boot-env-clean:
114 rm -f $(RPI3_UBOOT_ENV)
115
Philip Attfield3f9250f2016-09-14 07:43:32 +0200116################################################################################
117# Busybox
118################################################################################
119BUSYBOX_COMMON_TARGET = rpi3
120BUSYBOX_CLEAN_COMMON_TARGET = rpi3 clean
121
122busybox: busybox-common
123
124busybox-clean: busybox-clean-common
125
126busybox-cleaner: busybox-cleaner-common
127################################################################################
128# Linux kernel
129################################################################################
130LINUX_DEFCONFIG_COMMON_ARCH := arm64
131LINUX_DEFCONFIG_COMMON_FILES := \
132 $(LINUX_PATH)/arch/arm64/configs/bcmrpi3_defconfig \
133 $(CURDIR)/kconfigs/rpi3.conf
134
135linux-defconfig: $(LINUX_PATH)/.config
136
137LINUX_COMMON_FLAGS += ARCH=arm64
138
139linux: linux-common
140 $(MAKE) -C $(LINUX_PATH) $(LINUX_COMMON_FLAGS) INSTALL_MOD_STRIP=1 INSTALL_MOD_PATH=$(MODULE_OUTPUT) modules_install
141
142linux-defconfig-clean: linux-defconfig-clean-common
143
144LINUX_CLEAN_COMMON_FLAGS += ARCH=arm64
145
146linux-clean: linux-clean-common
147
148LINUX_CLEANER_COMMON_FLAGS += ARCH=arm64
149
150linux-cleaner: linux-cleaner-common
151
152################################################################################
153# OP-TEE
154################################################################################
155OPTEE_OS_COMMON_FLAGS += PLATFORM=rpi3
156optee-os: optee-os-common
157
158OPTEE_OS_CLEAN_COMMON_FLAGS += PLATFORM=rpi3
159optee-os-clean: optee-os-clean-common
160
Igor Opaniukd5226382017-07-14 18:11:07 +0300161################################################################################
Philip Attfield3f9250f2016-09-14 07:43:32 +0200162# Root FS
163################################################################################
Philip Attfield3f9250f2016-09-14 07:43:32 +0200164.PHONY: update_rootfs
Joakim Beched30f4e2018-06-11 19:24:19 +0200165# Make sure this is built before the buildroot target which will create the
166# root file system based on what's in $(BUILDROOT_TARGET_ROOT)
167buildroot: update_rootfs
168update_rootfs: arm-tf linux u-boot
169 @mkdir -p --mode=755 $(BUILDROOT_TARGET_ROOT)/boot
170 @mkdir -p --mode=755 $(BUILDROOT_TARGET_ROOT)/usr/bin
171 @install -v -p --mode=755 $(LINUX_DTB) $(BUILDROOT_TARGET_ROOT)/boot/bcm2710-rpi-3-b.dtb
172 @install -v -p --mode=755 $(RPI3_BOOT_CONFIG) $(BUILDROOT_TARGET_ROOT)/boot/config.txt
173 @install -v -p --mode=755 $(LINUX_IMAGE) $(BUILDROOT_TARGET_ROOT)/boot/Image
174 @install -v -p --mode=755 $(ARM_TF_BOOT) $(BUILDROOT_TARGET_ROOT)/boot/optee.bin
175 @install -v -p --mode=755 $(RPI3_UBOOT_ENV) $(BUILDROOT_TARGET_ROOT)/boot/uboot.env
176 @install -v -p --mode=755 $(U-BOOT_RPI_BIN) $(BUILDROOT_TARGET_ROOT)/boot/u-boot-rpi.bin
177 @install -v -p --mode=755 $(RPI3_STOCK_FW_PATH)/boot/bootcode.bin $(BUILDROOT_TARGET_ROOT)/boot/bootcode.bin
178 @install -v -p --mode=755 $(RPI3_STOCK_FW_PATH)/boot/COPYING.linux $(BUILDROOT_TARGET_ROOT)/boot/COPYING.linux
179 @install -v -p --mode=755 $(RPI3_STOCK_FW_PATH)/boot/fixup_cd.dat $(BUILDROOT_TARGET_ROOT)/boot/fixup_cd.dat
180 @install -v -p --mode=755 $(RPI3_STOCK_FW_PATH)/boot/fixup.dat $(BUILDROOT_TARGET_ROOT)/boot/fixup.dat
181 @install -v -p --mode=755 $(RPI3_STOCK_FW_PATH)/boot/fixup_db.dat $(BUILDROOT_TARGET_ROOT)/boot/fixup_db.dat
182 @install -v -p --mode=755 $(RPI3_STOCK_FW_PATH)/boot/fixup_x.dat $(BUILDROOT_TARGET_ROOT)/boot/fixup_x.dat
183 @install -v -p --mode=755 $(RPI3_STOCK_FW_PATH)/boot/LICENCE.broadcom $(BUILDROOT_TARGET_ROOT)/boot/LICENCE.broadcom
184 @install -v -p --mode=755 $(RPI3_STOCK_FW_PATH)/boot/start_cd.elf $(BUILDROOT_TARGET_ROOT)/boot/start_cd.elf
185 @install -v -p --mode=755 $(RPI3_STOCK_FW_PATH)/boot/start_db.elf $(BUILDROOT_TARGET_ROOT)/boot/start_db.elf
186 @install -v -p --mode=755 $(RPI3_STOCK_FW_PATH)/boot/start.elf $(BUILDROOT_TARGET_ROOT)/boot/start.elf
187 @install -v -p --mode=755 $(RPI3_STOCK_FW_PATH)/boot/start_x.elf $(BUILDROOT_TARGET_ROOT)/boot/start_x.elf
188 @cd $(MODULE_OUTPUT) && find . | cpio -pudm $(BUILDROOT_TARGET_ROOT)
Philip Attfield3f9250f2016-09-14 07:43:32 +0200189
190# Creating images etc, could wipe out a drive on the system, therefore we don't
191# want to automate that in script or make target. Instead we just simply provide
192# the steps here.
193.PHONY: img-help
194img-help:
195 @echo "$$ fdisk /dev/sdx # where sdx is the name of your sd-card"
196 @echo " > p # prints partition table"
197 @echo " > d # repeat until all partitions are deleted"
198 @echo " > n # create a new partition"
199 @echo " > p # create primary"
200 @echo " > 1 # make it the first partition"
201 @echo " > <enter> # use the default sector"
202 @echo " > +32M # create a boot partition with 32MB of space"
203 @echo " > n # create rootfs partition"
204 @echo " > p"
205 @echo " > 2"
206 @echo " > <enter>"
207 @echo " > <enter> # fill the remaining disk, adjust size to fit your needs"
208 @echo " > t # change partition type"
209 @echo " > 1 # select first partition"
210 @echo " > e # use type 'e' (FAT16)"
211 @echo " > a # make partition bootable"
212 @echo " > 1 # select first partition"
213 @echo " > p # double check everything looks right"
214 @echo " > w # write partition table to disk."
215 @echo ""
216 @echo "run the following as root"
217 @echo " $$ mkfs.vfat -F16 -n BOOT /dev/sdx1"
218 @echo " $$ mkdir -p /media/boot"
219 @echo " $$ mount /dev/sdx1 /media/boot"
220 @echo " $$ cd /media"
Joakim Beched30f4e2018-06-11 19:24:19 +0200221 @echo " $$ gunzip -cd $(ROOT)/out-br/images/rootfs.cpio.gz | sudo cpio -idmv \"boot/*\""
Philip Attfield3f9250f2016-09-14 07:43:32 +0200222 @echo " $$ umount boot"
223 @echo ""
224 @echo "run the following as root"
225 @echo " $$ mkfs.ext4 -L rootfs /dev/sdx2"
226 @echo " $$ mkdir -p /media/rootfs"
227 @echo " $$ mount /dev/sdx2 /media/rootfs"
228 @echo " $$ cd rootfs"
Joakim Beched30f4e2018-06-11 19:24:19 +0200229 @echo " $$ gunzip -cd $(ROOT)/out-br/images/rootfs.cpio.gz | sudo cpio -idmv"
Philip Attfield3f9250f2016-09-14 07:43:32 +0200230 @echo " $$ rm -rf /media/rootfs/boot/*"
231 @echo " $$ cd .. && umount rootfs"