blob: a5768617714a5de56041733c97af424e1cc9211d [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
Igor Opaniuk2e947f22018-06-19 22:21:36 +030021ARM_TF_BOOT ?= $(ARM_TF_OUT)/armstub8.bin
Philip Attfield3f9250f2016-09-14 07:43:32 +020022
Igor Opaniuk2e947f22018-06-19 22:21:36 +030023OPTEE_PATH ?= $(ROOT)/optee_os
Philip Attfield3f9250f2016-09-14 07:43:32 +020024U-BOOT_PATH ?= $(ROOT)/u-boot
25U-BOOT_BIN ?= $(U-BOOT_PATH)/u-boot.bin
Philip Attfield3f9250f2016-09-14 07:43:32 +020026
Joakim Bech54411f22018-06-11 19:28:42 +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
32RPI3_STOCK_FW_PATH ?= $(ROOT)/firmware
Igor Opaniuk67959e12016-12-21 15:19:27 +020033RPI3_STOCK_FW_PATH_BOOT ?= $(RPI3_STOCK_FW_PATH)/boot
Igor Opaniuk2e947f22018-06-19 22:21:36 +030034OPTEE_BIN ?= $(OPTEE_PATH)/out/arm/core/tee-header_v2.bin
35OPTEE_BIN_EXTRA1 ?= $(OPTEE_PATH)/out/arm/core/tee-pager_v2.bin
36OPTEE_BIN_EXTRA2 ?= $(OPTEE_PATH)/out/arm/core/tee-pageable_v2.bin
Philip Attfield3f9250f2016-09-14 07:43:32 +020037
38LINUX_IMAGE ?= $(LINUX_PATH)/arch/arm64/boot/Image
39LINUX_DTB ?= $(LINUX_PATH)/arch/arm64/boot/dts/broadcom/bcm2710-rpi-3-b.dtb
40MODULE_OUTPUT ?= $(ROOT)/module_output
41
42################################################################################
43# Targets
44################################################################################
Igor Opaniuk2e947f22018-06-19 22:21:36 +030045all: arm-tf buildroot optee-os u-boot linux update_rootfs
46clean: arm-tf-clean buildroot-clean u-boot-clean \
47 optee-os-clean
Philip Attfield3f9250f2016-09-14 07:43:32 +020048
Victor Chong7a716512017-09-11 15:18:44 +010049include toolchain.mk
Philip Attfield3f9250f2016-09-14 07:43:32 +020050
51################################################################################
52# ARM Trusted Firmware
53################################################################################
54ARM_TF_EXPORTS ?= \
Philip Attfield3f9250f2016-09-14 07:43:32 +020055 CROSS_COMPILE="$(CCACHE)$(AARCH64_CROSS_COMPILE)"
56
57ARM_TF_FLAGS ?= \
Igor Opaniuk2e947f22018-06-19 22:21:36 +030058 NEED_BL32=yes \
59 BL32=$(OPTEE_BIN) \
60 BL32_EXTRA1=$(OPTEE_BIN_EXTRA1) \
61 BL32_EXTRA2=$(OPTEE_BIN_EXTRA2) \
62 BL33=$(U-BOOT_BIN) \
Philip Attfield3f9250f2016-09-14 07:43:32 +020063 DEBUG=1 \
64 V=0 \
65 CRASH_REPORTING=1 \
66 LOG_LEVEL=40 \
67 PLAT=rpi3 \
68 SPD=opteed
69
Igor Opaniuk2e947f22018-06-19 22:21:36 +030070arm-tf: optee-os $(RPI3_UBOOT_ENV)
71 $(ARM_TF_EXPORTS) $(MAKE) -C $(ARM_TF_PATH) $(ARM_TF_FLAGS) all fip
Philip Attfield3f9250f2016-09-14 07:43:32 +020072
73arm-tf-clean:
74 $(ARM_TF_EXPORTS) $(MAKE) -C $(ARM_TF_PATH) $(ARM_TF_FLAGS) clean
75
76################################################################################
77# Das U-Boot
78################################################################################
79
Joakim Bech025e6322018-05-23 08:37:57 +020080U-BOOT_EXPORTS ?= CROSS_COMPILE=$(AARCH64_CROSS_COMPILE) ARCH=arm64
Igor Opaniuk2e947f22018-06-19 22:21:36 +030081U-BOOT_DEFCONFIG_COMMON_FILES := \
82 $(U-BOOT_PATH)/configs/rpi_3_defconfig \
83 $(CURDIR)/kconfigs/u-boot_rpi3.conf
Philip Attfield3f9250f2016-09-14 07:43:32 +020084.PHONY: u-boot
Igor Opaniuk2e947f22018-06-19 22:21:36 +030085u-boot: u-boot-defconfig
Philip Attfield3f9250f2016-09-14 07:43:32 +020086 $(U-BOOT_EXPORTS) $(MAKE) -C $(U-BOOT_PATH) all
Igor Opaniukc176f572016-12-19 22:47:09 +020087 $(U-BOOT_EXPORTS) $(MAKE) -C $(U-BOOT_PATH) tools
Philip Attfield3f9250f2016-09-14 07:43:32 +020088
Igor Opaniuk2e947f22018-06-19 22:21:36 +030089u-boot-clean: u-boot-defconfig-clean
Philip Attfield3f9250f2016-09-14 07:43:32 +020090 $(U-BOOT_EXPORTS) $(MAKE) -C $(U-BOOT_PATH) clean
91
Igor Opaniukc176f572016-12-19 22:47:09 +020092$(RPI3_UBOOT_ENV): $(RPI3_UBOOT_ENV_TXT) u-boot
93 mkdir -p $(ROOT)/out
94 $(U-BOOT_PATH)/tools/mkenvimage -s 0x4000 -o $(ROOT)/out/uboot.env $(RPI3_UBOOT_ENV_TXT)
95
96u-boot-env-clean:
97 rm -f $(RPI3_UBOOT_ENV)
98
Igor Opaniuk2e947f22018-06-19 22:21:36 +030099u-boot-defconfig: $(U-BOOT_DEFCONFIG_COMMON_FILES)
100 cd $(U-BOOT_PATH) && \
101 ARCH=arm64 \
102 scripts/kconfig/merge_config.sh $(U-BOOT_DEFCONFIG_COMMON_FILES)
103
104.PHONY: u-boot-defconfig-clean
105u-boot-defconfig-clean:
106 rm -f $(U-BOOT_PATH)/.config
Philip Attfield3f9250f2016-09-14 07:43:32 +0200107################################################################################
108# Busybox
109################################################################################
110BUSYBOX_COMMON_TARGET = rpi3
111BUSYBOX_CLEAN_COMMON_TARGET = rpi3 clean
112
113busybox: busybox-common
114
115busybox-clean: busybox-clean-common
116
117busybox-cleaner: busybox-cleaner-common
118################################################################################
119# Linux kernel
120################################################################################
121LINUX_DEFCONFIG_COMMON_ARCH := arm64
122LINUX_DEFCONFIG_COMMON_FILES := \
123 $(LINUX_PATH)/arch/arm64/configs/bcmrpi3_defconfig \
124 $(CURDIR)/kconfigs/rpi3.conf
125
126linux-defconfig: $(LINUX_PATH)/.config
127
128LINUX_COMMON_FLAGS += ARCH=arm64
129
130linux: linux-common
131 $(MAKE) -C $(LINUX_PATH) $(LINUX_COMMON_FLAGS) INSTALL_MOD_STRIP=1 INSTALL_MOD_PATH=$(MODULE_OUTPUT) modules_install
132
133linux-defconfig-clean: linux-defconfig-clean-common
134
135LINUX_CLEAN_COMMON_FLAGS += ARCH=arm64
136
137linux-clean: linux-clean-common
138
139LINUX_CLEANER_COMMON_FLAGS += ARCH=arm64
140
141linux-cleaner: linux-cleaner-common
142
143################################################################################
144# OP-TEE
145################################################################################
146OPTEE_OS_COMMON_FLAGS += PLATFORM=rpi3
147optee-os: optee-os-common
148
149OPTEE_OS_CLEAN_COMMON_FLAGS += PLATFORM=rpi3
150optee-os-clean: optee-os-clean-common
151
Igor Opaniukd5226382017-07-14 18:11:07 +0300152################################################################################
Philip Attfield3f9250f2016-09-14 07:43:32 +0200153# Root FS
154################################################################################
Philip Attfield3f9250f2016-09-14 07:43:32 +0200155.PHONY: update_rootfs
Joakim Beched30f4e2018-06-11 19:24:19 +0200156# Make sure this is built before the buildroot target which will create the
157# root file system based on what's in $(BUILDROOT_TARGET_ROOT)
158buildroot: update_rootfs
159update_rootfs: arm-tf linux u-boot
160 @mkdir -p --mode=755 $(BUILDROOT_TARGET_ROOT)/boot
161 @mkdir -p --mode=755 $(BUILDROOT_TARGET_ROOT)/usr/bin
162 @install -v -p --mode=755 $(LINUX_DTB) $(BUILDROOT_TARGET_ROOT)/boot/bcm2710-rpi-3-b.dtb
163 @install -v -p --mode=755 $(RPI3_BOOT_CONFIG) $(BUILDROOT_TARGET_ROOT)/boot/config.txt
Igor Opaniuk2e947f22018-06-19 22:21:36 +0300164 @install -v -p --mode=755 $(LINUX_IMAGE) $(BUILDROOT_TARGET_ROOT)/boot/kernel8.img
165 @install -v -p --mode=755 $(ARM_TF_BOOT) $(BUILDROOT_TARGET_ROOT)/boot/armstub8.bin
Joakim Beched30f4e2018-06-11 19:24:19 +0200166 @install -v -p --mode=755 $(RPI3_UBOOT_ENV) $(BUILDROOT_TARGET_ROOT)/boot/uboot.env
Joakim Beched30f4e2018-06-11 19:24:19 +0200167 @install -v -p --mode=755 $(RPI3_STOCK_FW_PATH)/boot/bootcode.bin $(BUILDROOT_TARGET_ROOT)/boot/bootcode.bin
168 @install -v -p --mode=755 $(RPI3_STOCK_FW_PATH)/boot/COPYING.linux $(BUILDROOT_TARGET_ROOT)/boot/COPYING.linux
169 @install -v -p --mode=755 $(RPI3_STOCK_FW_PATH)/boot/fixup_cd.dat $(BUILDROOT_TARGET_ROOT)/boot/fixup_cd.dat
170 @install -v -p --mode=755 $(RPI3_STOCK_FW_PATH)/boot/fixup.dat $(BUILDROOT_TARGET_ROOT)/boot/fixup.dat
171 @install -v -p --mode=755 $(RPI3_STOCK_FW_PATH)/boot/fixup_db.dat $(BUILDROOT_TARGET_ROOT)/boot/fixup_db.dat
172 @install -v -p --mode=755 $(RPI3_STOCK_FW_PATH)/boot/fixup_x.dat $(BUILDROOT_TARGET_ROOT)/boot/fixup_x.dat
173 @install -v -p --mode=755 $(RPI3_STOCK_FW_PATH)/boot/LICENCE.broadcom $(BUILDROOT_TARGET_ROOT)/boot/LICENCE.broadcom
174 @install -v -p --mode=755 $(RPI3_STOCK_FW_PATH)/boot/start_cd.elf $(BUILDROOT_TARGET_ROOT)/boot/start_cd.elf
175 @install -v -p --mode=755 $(RPI3_STOCK_FW_PATH)/boot/start_db.elf $(BUILDROOT_TARGET_ROOT)/boot/start_db.elf
176 @install -v -p --mode=755 $(RPI3_STOCK_FW_PATH)/boot/start.elf $(BUILDROOT_TARGET_ROOT)/boot/start.elf
177 @install -v -p --mode=755 $(RPI3_STOCK_FW_PATH)/boot/start_x.elf $(BUILDROOT_TARGET_ROOT)/boot/start_x.elf
178 @cd $(MODULE_OUTPUT) && find . | cpio -pudm $(BUILDROOT_TARGET_ROOT)
Philip Attfield3f9250f2016-09-14 07:43:32 +0200179
180# Creating images etc, could wipe out a drive on the system, therefore we don't
181# want to automate that in script or make target. Instead we just simply provide
182# the steps here.
183.PHONY: img-help
184img-help:
185 @echo "$$ fdisk /dev/sdx # where sdx is the name of your sd-card"
186 @echo " > p # prints partition table"
187 @echo " > d # repeat until all partitions are deleted"
188 @echo " > n # create a new partition"
189 @echo " > p # create primary"
190 @echo " > 1 # make it the first partition"
191 @echo " > <enter> # use the default sector"
192 @echo " > +32M # create a boot partition with 32MB of space"
193 @echo " > n # create rootfs partition"
194 @echo " > p"
195 @echo " > 2"
196 @echo " > <enter>"
197 @echo " > <enter> # fill the remaining disk, adjust size to fit your needs"
198 @echo " > t # change partition type"
199 @echo " > 1 # select first partition"
200 @echo " > e # use type 'e' (FAT16)"
201 @echo " > a # make partition bootable"
202 @echo " > 1 # select first partition"
203 @echo " > p # double check everything looks right"
204 @echo " > w # write partition table to disk."
205 @echo ""
206 @echo "run the following as root"
207 @echo " $$ mkfs.vfat -F16 -n BOOT /dev/sdx1"
208 @echo " $$ mkdir -p /media/boot"
209 @echo " $$ mount /dev/sdx1 /media/boot"
210 @echo " $$ cd /media"
Joakim Beched30f4e2018-06-11 19:24:19 +0200211 @echo " $$ gunzip -cd $(ROOT)/out-br/images/rootfs.cpio.gz | sudo cpio -idmv \"boot/*\""
Philip Attfield3f9250f2016-09-14 07:43:32 +0200212 @echo " $$ umount boot"
213 @echo ""
214 @echo "run the following as root"
215 @echo " $$ mkfs.ext4 -L rootfs /dev/sdx2"
216 @echo " $$ mkdir -p /media/rootfs"
217 @echo " $$ mount /dev/sdx2 /media/rootfs"
218 @echo " $$ cd rootfs"
Joakim Beched30f4e2018-06-11 19:24:19 +0200219 @echo " $$ gunzip -cd $(ROOT)/out-br/images/rootfs.cpio.gz | sudo cpio -idmv"
Philip Attfield3f9250f2016-09-14 07:43:32 +0200220 @echo " $$ rm -rf /media/rootfs/boot/*"
221 @echo " $$ cd .. && umount rootfs"