blob: 031ec74d300458881fee56911697a7e06ef66434 [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
Jerome Forissier366accb2022-11-30 10:19:31 +000026LINUX_MODULES ?= n
27
28BR2_TARGET_ROOTFS_CPIO = n
29BR2_TARGET_ROOTFS_CPIO_GZIP = n
30BR2_TARGET_ROOTFS_EXT2 = y
31BR2_TARGET_GENERIC_GETTY_PORT = ttyS2
32ifeq ($(LINUX_MODULES),y)
33# If modules are installed...
34# ...enable automatic device detection and driver loading
35BR2_ROOTFS_DEVICE_CREATION_DYNAMIC_EUDEV = y
36# ...and configure eth0 automatically based on ifup helpers
37BR2_PACKAGE_IFUPDOWN_SCRIPTS = y
38BR2_SYSTEM_DHCP = eth0
39# An image with module takes more space
40BR2_TARGET_ROOTFS_EXT2_SIZE = 256M
41else
42BR2_TARGET_ROOTFS_EXT2_SIZE = 112M
43endif
Jerome Forissier3521ef32022-11-03 17:32:47 +010044
45################################################################################
46# Targets
47################################################################################
48
49all: boot-img
50
51clean: buildroot-clean
52
53include toolchain.mk
54
55################################################################################
56# Arm Trusted Firmware-A
57################################################################################
58TF_A_EXPORTS ?= CROSS_COMPILE="$(CCACHE)$(AARCH64_CROSS_COMPILE)" \
59 M0_CROSS_COMPILE="$(CCACHE)$(AARCH32_CROSS_COMPILE)"
60
61TF_A_DEBUG ?= $(DEBUG)
62ifeq ($(TF_A_DEBUG),0)
63TF_A_LOGLVL ?= 30
64TF_A_OUT = $(TF_A_PATH)/build/rk3399/release
65else
66TF_A_LOGLVL ?= 40
67TF_A_OUT = $(TF_A_PATH)/build/rk3399/debug
68endif
69
70TF_A_FLAGS ?= ARCH=aarch64 PLAT=rk3399 SPD=opteed DEBUG=$(TF_A_DEBUG) \
71 LOG_LEVEL=$(TF_A_LOGLVL)
72
73.PHONY: tfa
74tfa:
75 $(TF_A_EXPORTS) $(MAKE) -C $(TF_A_PATH) $(TF_A_FLAGS) bl31
76
77.PHONY: tfa-clean
78tfa-clean:
79 $(TF_A_EXPORTS) $(MAKE) -C $(TF_A_PATH) $(TF_A_FLAGS) clean
80
81clean: tfa-clean
82
83################################################################################
84# U-Boot
85################################################################################
86UBOOT_DEFCONFIG_FILES := $(UBOOT_PATH)/configs/rock-pi-4-rk3399_defconfig \
87 $(ROOT)/build/kconfigs/u-boot_rockpi4.conf
88
89UBOOT_FLAGS ?= CROSS_COMPILE=$(CROSS_COMPILE_NS_KERNEL) \
90 CC=$(CROSS_COMPILE_NS_KERNEL)gcc \
91 HOSTCC="$(CCACHE) gcc"
92
93UBOOT_EXPORTS ?= BL31=$(TF_A_OUT)/bl31/bl31.elf TEE=$(OPTEE_OS_BIN)
94
95u-boot-defconfig: $(UBOOT_PATH)/.config
96
97$(UBOOT_PATH)/.config: $(UBOOT_DEFCONFIG_FILES)
98 cd $(UBOOT_PATH) && \
99 scripts/kconfig/merge_config.sh $(UBOOT_DEFCONFIG_FILES)
100
101.PHONY: u-boot-defconfig
102
103.PHONY: u-boot
104u-boot: $(UBOOT_PATH)/.config optee-os tfa
105 $(UBOOT_EXPORTS) $(MAKE) -C $(UBOOT_PATH) $(UBOOT_FLAGS)
106
107.PHONY: u-boot-clean
108u-boot-clean:
109 $(UBOOT_EXPORTS) $(MAKE) -C $(UBOOT_PATH) $(UBOOT_FLAGS) distclean
110
111clean: u-boot-clean
112
113################################################################################
114# Linux kernel
115################################################################################
116LINUX_DEFCONFIG_COMMON_ARCH ?= arm64
117LINUX_DEFCONFIG_COMMON_FILES ?= $(LINUX_PATH)/arch/arm64/configs/defconfig \
118 $(CURDIR)/kconfigs/rockpi4.conf
119
120.PHONY: linux-defconfig
121linux-defconfig: $(LINUX_PATH)/.config
122
Jerome Forissier366accb2022-11-30 10:19:31 +0000123LINUX_COMMON_FLAGS += ARCH=arm64 Image rockchip/rk3399-rock-pi-4b.dtb \
124 $(if $(filter y,$(LINUX_MODULES)),modules)
Jerome Forissier3521ef32022-11-03 17:32:47 +0100125
126.PHONY: linux
127linux: linux-common
Jerome Forissier366accb2022-11-30 10:19:31 +0000128ifeq ($(LINUX_MODULES),y)
129 $(MAKE) -C $(LINUX_PATH) ARCH=arm64 modules_install \
130 INSTALL_MOD_PATH=$(BINARIES_PATH)/modules
131endif
Jerome Forissier3521ef32022-11-03 17:32:47 +0100132
133$(LINUX_PATH)/arch/arm64/boot/Image.gz: linux
134 gzip -c $(LINUX_PATH)/arch/arm64/boot/Image >$@
135
136.PHONY: linux-defconfig-clean
137linux-defconfig-clean: linux-defconfig-clean-common
138
139LINUX_CLEAN_COMMON_FLAGS += ARCH=arm64
140
141.PHONY: linux-clean
142linux-clean: linux-clean-common
143
144LINUX_CLEANER_COMMON_FLAGS += ARCH=arm64
145
146.PHONY: linux-cleaner
147linux-cleaner: linux-cleaner-common
148
149################################################################################
150# OP-TEE
151################################################################################
152OPTEE_OS_PLATFORM = rockchip-rk3399
153OPTEE_OS_COMMON_FLAGS += CFG_ENABLE_EMBEDDED_TESTS=y
154
155.PHONY: optee-os
156optee-os: optee-os-common
157
158.PHONY: optee-os-clean
159optee-os-clean: optee-os-clean-common
160
161clean: optee-os-clean
162
163################################################################################
164# Boot image, shall be copied to SD card
165################################################################################
Jerome Forissier1baec992022-11-29 17:34:53 +0100166
Jerome Forissier3521ef32022-11-03 17:32:47 +0100167# U-Boot offset comes from CONFIG_SYS_MMCSD_RAW_MODE_U_BOOT_SECTOR=0x4000
168# Partition no. 5 ends at 12288 + BR2_TARGET_ROOTFS_EXT2_SIZE (in kiB)
Jerome Forissier1baec992022-11-29 17:34:53 +0100169# File size needs to be slightly bigger to accomodate for whatever meta-data
170rootfs-size-kib := $(shell echo $(BR2_TARGET_ROOTFS_EXT2_SIZE) | sed 's/M/*1024/')
171p5-end-kib := $(shell echo $$((12288 + $(rootfs-size-kib))))
172img-size-kib := $(shell echo $$(($(p5-end-kib) + 1024)))
173
Jerome Forissier3521ef32022-11-03 17:32:47 +0100174.PHONY: boot-img
175boot-img: u-boot buildroot $(LINUX_PATH)/arch/arm64/boot/Image.gz
176 mkdir -p $(BINARIES_PATH)
177 rm -f $(BOOT_IMG)
Jerome Forissier1baec992022-11-29 17:34:53 +0100178 truncate -s $(img-size-kib)KiB $(BOOT_IMG)
Jerome Forissier3521ef32022-11-03 17:32:47 +0100179 parted -s $(BOOT_IMG) \
180 unit kiB \
181 mklabel gpt \
182 mkpart idbloader 32 4032 \
183 mkpart primary fat32 4032 4096 \
184 mkpart primary fat32 4096 8192 \
185 mkpart uboot 8192 12288 \
Jerome Forissier1baec992022-11-29 17:34:53 +0100186 mkpart root fat32 12288 $(p5-end-kib)
Jerome Forissier3521ef32022-11-03 17:32:47 +0100187 sgdisk -u 5:17d61bff-8fdc-4089-b675-9be21b9f6ac7 $(BOOT_IMG)
188 dd if=$(UBOOT_PATH)/idbloader.img of=$(BOOT_IMG) bs=1kiB seek=32 conv=notrunc
189 dd if=$(UBOOT_PATH)/u-boot.itb of=$(BOOT_IMG) bs=1kiB seek=8192 conv=notrunc
190 e2mkdir $(ROOT_IMG):/boot
191 e2cp $(LINUX_PATH)/arch/arm64/boot/Image.gz $(ROOT_IMG):/boot
192 e2cp $(LINUX_PATH)/arch/arm64/boot/dts/rockchip/rk3399-rock-pi-4b.dtb $(ROOT_IMG):/boot
Jerome Forissier366accb2022-11-30 10:19:31 +0000193ifeq ($(LINUX_MODULES),y)
194 find $(BINARIES_PATH)/modules -type f | while read f; do e2cp -a $$f $(ROOT_IMG):$$(echo $$f | sed s@$(BINARIES_PATH)/modules@@); done
195endif
Jerome Forissier3521ef32022-11-03 17:32:47 +0100196 dd if=$(ROOT_IMG) of=$(BOOT_IMG) bs=1kiB seek=12288 conv=notrunc
197
198.PHONY: boot-img-clean
199boot-img-clean:
200 rm -f $(BOOT_IMG)
201
202clean: boot-img-clean
203
204################################################################################
205# rkdeveloptool
206################################################################################
207
208$(RKDEVELOPTOOL_PATH)/Makefile:
209 cd $(RKDEVELOPTOOL_PATH) && \
210 autoreconf -i && \
211 ./configure CXXFLAGS=-Wno-format-truncation
212
213$(RKDEVELOPTOOL_BIN): $(RKDEVELOPTOOL_PATH)/Makefile
214 $(MAKE) -C $(RKDEVELOPTOOL_PATH)
215
216rkdeveloptool: $(RKDEVELOPTOOL_BIN)
217
218rkdeveloptool-clean:
219 $(MAKE) -C $(RKDEVELOPTOOL_PATH) clean
220
221rkdeveloptool-distclean:
222 $(MAKE) -C $(RKDEVELOPTOOL_PATH) clean
223
224clean: rkdeveloptool-clean
225
226$(LOADER_BIN):
227 cd $(BINARIES_PATH) && \
228 wget https://dl.radxa.com/rockpi/images/loader/$(notdir $(LOADER_BIN))
229
230################################################################################
231# Flash the image via USB onto the onboard eMMC
232################################################################################
233
234define flash-help
235 @echo
236 @echo "Please connect the board to the computer via a USB cable."
237 @echo "The cable must be connected to the upper USB 3 (blue) port."
238 @echo "Then press and hold the mask ROM button (first one on the left"
239 @echo "under the HDMI connector), apply power and release the button."
240 @echo "(More details at https://wiki.radxa.com/Rockpi4/dev/usb-install)"
241 @echo
242 @read -r -p "Press enter to continue, Ctrl-C to cancel:" dummy
243endef
244
245flash: $(BOOT_IMG) $(LOADER_BIN) $(RKDEVELOPTOOL_BIN)
246 $(call flash-help)
247 $(RKDEVELOPTOOL_BIN) db $(LOADER_BIN)
248 sleep 1
249 $(RKDEVELOPTOOL_BIN) wl 0 $(BOOT_IMG)
250
251nuke-emmc: $(LOADER_BIN) $(RKDEVELOPTOOL_BIN)
252 @echo
253 @echo "** WARNING: this command will make the onboard eMMC unbootable!"
254 @echo "It can be used to boot from the SD card again."
255 $(call flash-help)
256 dd if=/dev/zero of=$(BINARIES_PATH)/zero.img bs=1M count=64
257 $(RKDEVELOPTOOL_BIN) db $(LOADER_BIN)
258 sleep 1
259 $(RKDEVELOPTOOL_BIN) wl 0 $(BINARIES_PATH)/zero.img