blob: c6b4e0cf52b287c6642d910af447764e3c3fc8ef [file] [log] [blame]
Jerome Forissier3521ef32022-11-03 17:32:47 +01001COMPILE_NS_USER ?= 64
2override COMPILE_NS_KERNEL := 64
3COMPILE_S_USER ?= 64
4COMPILE_S_KERNEL ?= 64
5
6include common.mk
7
8DEBUG ?= 1
9
10# Do not leave a partially downloaded binary in case wget fails midway
11.DELETE_ON_ERROR:
12
13################################################################################
14# Paths to git projects and various binaries
15################################################################################
16TF_A_PATH ?= $(ROOT)/trusted-firmware-a
17BINARIES_PATH ?= $(ROOT)/out
18UBOOT_PATH ?= $(ROOT)/u-boot
19UBOOT_BIN ?= $(UBOOT_PATH)/u-boot.bin
20ROOT_IMG ?= $(ROOT)/out-br/images/rootfs.ext2
21BOOT_IMG ?= $(ROOT)/out/rockpi4.img
22RKDEVELOPTOOL_PATH ?= $(ROOT)/rkdeveloptool
23RKDEVELOPTOOL_BIN ?= $(RKDEVELOPTOOL_PATH)/rkdeveloptool
24LOADER_BIN ?= $(BINARIES_PATH)/rk3399_loader_v1.20.119.bin
25
26BR2_TARGET_ROOTFS_CPIO=n
27BR2_TARGET_ROOTFS_CPIO_GZIP=n
28BR2_TARGET_ROOTFS_EXT2=y
29BR2_TARGET_ROOTFS_EXT2_SIZE=112M
30BR2_TARGET_GENERIC_GETTY_PORT=ttyS2
31
32################################################################################
33# Targets
34################################################################################
35
36all: boot-img
37
38clean: buildroot-clean
39
40include toolchain.mk
41
42################################################################################
43# Arm Trusted Firmware-A
44################################################################################
45TF_A_EXPORTS ?= CROSS_COMPILE="$(CCACHE)$(AARCH64_CROSS_COMPILE)" \
46 M0_CROSS_COMPILE="$(CCACHE)$(AARCH32_CROSS_COMPILE)"
47
48TF_A_DEBUG ?= $(DEBUG)
49ifeq ($(TF_A_DEBUG),0)
50TF_A_LOGLVL ?= 30
51TF_A_OUT = $(TF_A_PATH)/build/rk3399/release
52else
53TF_A_LOGLVL ?= 40
54TF_A_OUT = $(TF_A_PATH)/build/rk3399/debug
55endif
56
57TF_A_FLAGS ?= ARCH=aarch64 PLAT=rk3399 SPD=opteed DEBUG=$(TF_A_DEBUG) \
58 LOG_LEVEL=$(TF_A_LOGLVL)
59
60.PHONY: tfa
61tfa:
62 $(TF_A_EXPORTS) $(MAKE) -C $(TF_A_PATH) $(TF_A_FLAGS) bl31
63
64.PHONY: tfa-clean
65tfa-clean:
66 $(TF_A_EXPORTS) $(MAKE) -C $(TF_A_PATH) $(TF_A_FLAGS) clean
67
68clean: tfa-clean
69
70################################################################################
71# U-Boot
72################################################################################
73UBOOT_DEFCONFIG_FILES := $(UBOOT_PATH)/configs/rock-pi-4-rk3399_defconfig \
74 $(ROOT)/build/kconfigs/u-boot_rockpi4.conf
75
76UBOOT_FLAGS ?= CROSS_COMPILE=$(CROSS_COMPILE_NS_KERNEL) \
77 CC=$(CROSS_COMPILE_NS_KERNEL)gcc \
78 HOSTCC="$(CCACHE) gcc"
79
80UBOOT_EXPORTS ?= BL31=$(TF_A_OUT)/bl31/bl31.elf TEE=$(OPTEE_OS_BIN)
81
82u-boot-defconfig: $(UBOOT_PATH)/.config
83
84$(UBOOT_PATH)/.config: $(UBOOT_DEFCONFIG_FILES)
85 cd $(UBOOT_PATH) && \
86 scripts/kconfig/merge_config.sh $(UBOOT_DEFCONFIG_FILES)
87
88.PHONY: u-boot-defconfig
89
90.PHONY: u-boot
91u-boot: $(UBOOT_PATH)/.config optee-os tfa
92 $(UBOOT_EXPORTS) $(MAKE) -C $(UBOOT_PATH) $(UBOOT_FLAGS)
93
94.PHONY: u-boot-clean
95u-boot-clean:
96 $(UBOOT_EXPORTS) $(MAKE) -C $(UBOOT_PATH) $(UBOOT_FLAGS) distclean
97
98clean: u-boot-clean
99
100################################################################################
101# Linux kernel
102################################################################################
103LINUX_DEFCONFIG_COMMON_ARCH ?= arm64
104LINUX_DEFCONFIG_COMMON_FILES ?= $(LINUX_PATH)/arch/arm64/configs/defconfig \
105 $(CURDIR)/kconfigs/rockpi4.conf
106
107.PHONY: linux-defconfig
108linux-defconfig: $(LINUX_PATH)/.config
109
110LINUX_COMMON_FLAGS += ARCH=arm64 Image rockchip/rk3399-rock-pi-4b.dtb
111
112.PHONY: linux
113linux: linux-common
114
115$(LINUX_PATH)/arch/arm64/boot/Image.gz: linux
116 gzip -c $(LINUX_PATH)/arch/arm64/boot/Image >$@
117
118.PHONY: linux-defconfig-clean
119linux-defconfig-clean: linux-defconfig-clean-common
120
121LINUX_CLEAN_COMMON_FLAGS += ARCH=arm64
122
123.PHONY: linux-clean
124linux-clean: linux-clean-common
125
126LINUX_CLEANER_COMMON_FLAGS += ARCH=arm64
127
128.PHONY: linux-cleaner
129linux-cleaner: linux-cleaner-common
130
131################################################################################
132# OP-TEE
133################################################################################
134OPTEE_OS_PLATFORM = rockchip-rk3399
135OPTEE_OS_COMMON_FLAGS += CFG_ENABLE_EMBEDDED_TESTS=y
136
137.PHONY: optee-os
138optee-os: optee-os-common
139
140.PHONY: optee-os-clean
141optee-os-clean: optee-os-clean-common
142
143clean: optee-os-clean
144
145################################################################################
146# Boot image, shall be copied to SD card
147################################################################################
Jerome Forissier1baec992022-11-29 17:34:53 +0100148
Jerome Forissier3521ef32022-11-03 17:32:47 +0100149# U-Boot offset comes from CONFIG_SYS_MMCSD_RAW_MODE_U_BOOT_SECTOR=0x4000
150# Partition no. 5 ends at 12288 + BR2_TARGET_ROOTFS_EXT2_SIZE (in kiB)
Jerome Forissier1baec992022-11-29 17:34:53 +0100151# File size needs to be slightly bigger to accomodate for whatever meta-data
152rootfs-size-kib := $(shell echo $(BR2_TARGET_ROOTFS_EXT2_SIZE) | sed 's/M/*1024/')
153p5-end-kib := $(shell echo $$((12288 + $(rootfs-size-kib))))
154img-size-kib := $(shell echo $$(($(p5-end-kib) + 1024)))
155
Jerome Forissier3521ef32022-11-03 17:32:47 +0100156.PHONY: boot-img
157boot-img: u-boot buildroot $(LINUX_PATH)/arch/arm64/boot/Image.gz
158 mkdir -p $(BINARIES_PATH)
159 rm -f $(BOOT_IMG)
Jerome Forissier1baec992022-11-29 17:34:53 +0100160 truncate -s $(img-size-kib)KiB $(BOOT_IMG)
Jerome Forissier3521ef32022-11-03 17:32:47 +0100161 parted -s $(BOOT_IMG) \
162 unit kiB \
163 mklabel gpt \
164 mkpart idbloader 32 4032 \
165 mkpart primary fat32 4032 4096 \
166 mkpart primary fat32 4096 8192 \
167 mkpart uboot 8192 12288 \
Jerome Forissier1baec992022-11-29 17:34:53 +0100168 mkpart root fat32 12288 $(p5-end-kib)
Jerome Forissier3521ef32022-11-03 17:32:47 +0100169 sgdisk -u 5:17d61bff-8fdc-4089-b675-9be21b9f6ac7 $(BOOT_IMG)
170 dd if=$(UBOOT_PATH)/idbloader.img of=$(BOOT_IMG) bs=1kiB seek=32 conv=notrunc
171 dd if=$(UBOOT_PATH)/u-boot.itb of=$(BOOT_IMG) bs=1kiB seek=8192 conv=notrunc
172 e2mkdir $(ROOT_IMG):/boot
173 e2cp $(LINUX_PATH)/arch/arm64/boot/Image.gz $(ROOT_IMG):/boot
174 e2cp $(LINUX_PATH)/arch/arm64/boot/dts/rockchip/rk3399-rock-pi-4b.dtb $(ROOT_IMG):/boot
175 dd if=$(ROOT_IMG) of=$(BOOT_IMG) bs=1kiB seek=12288 conv=notrunc
176
177.PHONY: boot-img-clean
178boot-img-clean:
179 rm -f $(BOOT_IMG)
180
181clean: boot-img-clean
182
183################################################################################
184# rkdeveloptool
185################################################################################
186
187$(RKDEVELOPTOOL_PATH)/Makefile:
188 cd $(RKDEVELOPTOOL_PATH) && \
189 autoreconf -i && \
190 ./configure CXXFLAGS=-Wno-format-truncation
191
192$(RKDEVELOPTOOL_BIN): $(RKDEVELOPTOOL_PATH)/Makefile
193 $(MAKE) -C $(RKDEVELOPTOOL_PATH)
194
195rkdeveloptool: $(RKDEVELOPTOOL_BIN)
196
197rkdeveloptool-clean:
198 $(MAKE) -C $(RKDEVELOPTOOL_PATH) clean
199
200rkdeveloptool-distclean:
201 $(MAKE) -C $(RKDEVELOPTOOL_PATH) clean
202
203clean: rkdeveloptool-clean
204
205$(LOADER_BIN):
206 cd $(BINARIES_PATH) && \
207 wget https://dl.radxa.com/rockpi/images/loader/$(notdir $(LOADER_BIN))
208
209################################################################################
210# Flash the image via USB onto the onboard eMMC
211################################################################################
212
213define flash-help
214 @echo
215 @echo "Please connect the board to the computer via a USB cable."
216 @echo "The cable must be connected to the upper USB 3 (blue) port."
217 @echo "Then press and hold the mask ROM button (first one on the left"
218 @echo "under the HDMI connector), apply power and release the button."
219 @echo "(More details at https://wiki.radxa.com/Rockpi4/dev/usb-install)"
220 @echo
221 @read -r -p "Press enter to continue, Ctrl-C to cancel:" dummy
222endef
223
224flash: $(BOOT_IMG) $(LOADER_BIN) $(RKDEVELOPTOOL_BIN)
225 $(call flash-help)
226 $(RKDEVELOPTOOL_BIN) db $(LOADER_BIN)
227 sleep 1
228 $(RKDEVELOPTOOL_BIN) wl 0 $(BOOT_IMG)
229
230nuke-emmc: $(LOADER_BIN) $(RKDEVELOPTOOL_BIN)
231 @echo
232 @echo "** WARNING: this command will make the onboard eMMC unbootable!"
233 @echo "It can be used to boot from the SD card again."
234 $(call flash-help)
235 dd if=/dev/zero of=$(BINARIES_PATH)/zero.img bs=1M count=64
236 $(RKDEVELOPTOOL_BIN) db $(LOADER_BIN)
237 sleep 1
238 $(RKDEVELOPTOOL_BIN) wl 0 $(BINARIES_PATH)/zero.img