blob: 7d89d5e6bc4b89d9b0fd17d700f749cefda2725d [file] [log] [blame]
Ed Tubbs8b9e4282024-08-26 13:59:21 -05001COMPILE_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/nanopc-t6.img
22TPL_BIN ?= $(BINARIES_PATH)/rk3588_ddr_lp4_2112MHz_lp5_2400MHz_v1.18.bin
23BOOT_CMD ?= $(ROOT)/build/nanopc-t6/nanopi6.h
24BOARD_DTSO ?= $(ROOT)/build/nanopc-t6/rk3588-nanopi6-optee.dtso
Ed Tubbsdb588892025-01-31 11:16:24 -060025FIT_WRAPPER ?= $(ROOT)/build/nanopc-t6/fit_wrapper.sh
Ed Tubbs8b9e4282024-08-26 13:59:21 -050026LINUX_DTSI ?= $(LINUX_PATH)/arch/arm64/boot/dts/rockchip/rk3588-nanopi6-common.dtsi
27UBOOT_HEADER ?= $(UBOOT_PATH)/include/configs/nanopi6.h
Ed Tubbsdb588892025-01-31 11:16:24 -060028UBOOT_FIT ?= $(UBOOT_PATH)/arch/arm/mach-rockchip/fit_wrapper.sh
Ed Tubbs8b9e4282024-08-26 13:59:21 -050029
30LINUX_MODULES ?= n
31
32BR2_TARGET_ROOTFS_CPIO = n
33BR2_TARGET_ROOTFS_CPIO_GZIP = n
34BR2_TARGET_ROOTFS_EXT2 = y
35# Use Debug UART (tty1) for system console
36# Reference: https://wiki.friendlyelec.com/wiki/index.php/NanoPC-T6#NanoPC-T6
37BR2_TARGET_GENERIC_GETTY_PORT = tty1
38ifeq ($(LINUX_MODULES),y)
39# If modules are installed...
40# ...enable automatic device detection and driver loading
41BR2_ROOTFS_DEVICE_CREATION_DYNAMIC_EUDEV = y
42# ...and configure enP2p33s0 automatically based on ifup helpers
43BR2_PACKAGE_IFUPDOWN_SCRIPTS = y
44BR2_SYSTEM_DHCP = enP2p33s0
45# An image with module takes more space
46BR2_TARGET_ROOTFS_EXT2_SIZE = 1536M
47# Enable SSH daemon for remote login
48BR2_PACKAGE_OPENSSH = y
49BR2_PACKAGE_OPENSSH_SERVER = y
50BR2_ROOTFS_POST_BUILD_SCRIPT = $(ROOT)/build/br-ext/board/nanopc-t6/post-build.sh
51# Enable NTP for current time
52BR2_PACKAGE_NTP = y
53BR2_PACKAGE_NTP_NTPD = y
54else
55BR2_TARGET_ROOTFS_EXT2_SIZE = 112M
56endif
57
58################################################################################
59# Targets
60################################################################################
61
62all: boot-img
63
64clean: buildroot-clean
65
66include toolchain.mk
67
68################################################################################
69# Arm Trusted Firmware-A
70################################################################################
71TF_A_EXPORTS ?= CROSS_COMPILE="$(CCACHE)$(AARCH64_CROSS_COMPILE)" \
72 M0_CROSS_COMPILE="$(CCACHE)$(AARCH32_CROSS_COMPILE)" \
73 CC="$(CCACHE)$(AARCH64_CROSS_COMPILE)gcc" \
74 LD="$(CCACHE)$(AARCH64_CROSS_COMPILE)ld"
75
76TF_A_DEBUG ?= $(DEBUG)
77ifeq ($(TF_A_DEBUG),0)
78TF_A_LOGLVL ?= 30
79TF_A_OUT = $(TF_A_PATH)/build/rk3588/release
80else
81TF_A_LOGLVL ?= 40
82TF_A_OUT = $(TF_A_PATH)/build/rk3588/debug
83endif
84
85TF_A_FLAGS ?= ARCH=aarch64 PLAT=rk3588 SPD=opteed DEBUG=$(TF_A_DEBUG) \
86 LOG_LEVEL=$(TF_A_LOGLVL)
87
88.PHONY: tfa
89tfa:
90 $(TF_A_EXPORTS) $(MAKE) -C $(TF_A_PATH) $(TF_A_FLAGS) bl31
91
92.PHONY: tfa-clean
93tfa-clean:
94 $(TF_A_EXPORTS) $(MAKE) -C $(TF_A_PATH) $(TF_A_FLAGS) clean
95
96clean: tfa-clean
97
98################################################################################
99# U-Boot
100################################################################################
101UBOOT_DEFCONFIG_FILES := $(UBOOT_PATH)/configs/nanopi6_defconfig \
102 $(ROOT)/build/kconfigs/u-boot_nanopc-t6.conf
103
104UBOOT_FLAGS ?= CROSS_COMPILE=$(CROSS_COMPILE_NS_KERNEL) \
105 CC=$(CROSS_COMPILE_NS_KERNEL)gcc \
106 HOSTCC="$(CCACHE) gcc"
107
108$(TPL_BIN):
109 mkdir -p $(BINARIES_PATH)
110 wget -O $(TPL_BIN) https://github.com/rockchip-linux/rkbin/raw/master/bin/rk35/$(notdir $(TPL_BIN))
111
112UBOOT_EXPORTS ?= BL31=$(TF_A_OUT)/bl31/bl31.elf \
113 TEE=$(OPTEE_OS_BIN) \
114 ROCKCHIP_TPL=$(TPL_BIN)
115
116u-boot-defconfig: $(UBOOT_PATH)/.config
117
118$(UBOOT_PATH)/.config: $(UBOOT_DEFCONFIG_FILES)
119 cd $(UBOOT_PATH) && \
120 scripts/kconfig/merge_config.sh $(UBOOT_DEFCONFIG_FILES)
121
122.PHONY: u-boot-defconfig
123
124.PHONY: u-boot-config
125u-boot-config: $(UBOOT_PATH)/.config optee-os tfa
126 cp $(TF_A_OUT)/bl31/bl31.elf $(UBOOT_PATH)/
127 cp $(ROOT)/optee_os/out/arm/core/tee-raw.bin $(UBOOT_PATH)/tee.bin
128
129.PHONY: u-boot-proper
130u-boot-proper: $(TPL_BIN) $(UBOOT_PATH)/.config u-boot-config
131 $(UBOOT_EXPORTS) $(MAKE) -C $(UBOOT_PATH) $(UBOOT_FLAGS)
132
133.PHONY: u-boot-apply-bootcmd
134u-boot-apply-bootcmd:
135 cp $(BOOT_CMD) $(UBOOT_HEADER)
136
Ed Tubbsdb588892025-01-31 11:16:24 -0600137$(UBOOT_FIT): $(FIT_WRAPPER)
138 cp $< $@
139
Ed Tubbs8b9e4282024-08-26 13:59:21 -0500140.PHONY: u-boot-loader
141u-boot-loader: u-boot-proper
142 $(UBOOT_PATH)/tools/mkimage -n rk3588 -T rksd -d $(UBOOT_PATH)/tpl/u-boot-tpl.bin:$(UBOOT_PATH)/spl/u-boot-spl.bin $(UBOOT_PATH)/idbloader.img
143
144.PHONY: u-boot
Ed Tubbsdb588892025-01-31 11:16:24 -0600145u-boot: u-boot-apply-bootcmd $(UBOOT_FIT) $(TPL_BIN) $(UBOOT_PATH)/.config u-boot-loader
Ed Tubbs8b9e4282024-08-26 13:59:21 -0500146 $(UBOOT_EXPORTS) $(MAKE) -C $(UBOOT_PATH) $(UBOOT_FLAGS) u-boot.itb
147
148.PHONY: u-boot-clean
149u-boot-clean:
150 $(UBOOT_EXPORTS) $(MAKE) -C $(UBOOT_PATH) $(UBOOT_FLAGS) distclean
151
152clean: u-boot-clean
153
154################################################################################
155# Linux kernel
156################################################################################
157LINUX_DEFCONFIG_COMMON_ARCH ?= arm64
158LINUX_DEFCONFIG_COMMON_FILES ?= $(LINUX_PATH)/arch/arm64/configs/nanopi6_linux_defconfig \
159 $(CURDIR)/kconfigs/nanopc-t6.conf
160
161.PHONY: linux-defconfig
162linux-defconfig: $(LINUX_PATH)/.config
163
164LINUX_COMMON_FLAGS += ARCH=arm64 CFLAGS_KERNEL="-Wno-error"
165LINUX_COMMON_TARGETS += Image rockchip/rk3588-nanopi6-rev01.dtb \
166 $(if $(filter y,$(LINUX_MODULES)),modules)
167
168.PHONY: linux-apply-dtso
169linux-apply-dtso: linux-common
Ed Tubbse0ca9912025-01-29 16:18:28 -0600170 $(LINUX_PATH)/scripts/dtc/dtc -I dts -O dtb -@ \
Ed Tubbs8b9e4282024-08-26 13:59:21 -0500171 -o $(LINUX_PATH)/arch/arm64/boot/dts/rockchip/rk3588-nanopi6-optee.dtbo \
172 $(BOARD_DTSO)
173
174.PHONY: linux
175linux: linux-common linux-apply-dtso
176ifeq ($(LINUX_MODULES),y)
177 $(MAKE) -C $(LINUX_PATH) ARCH=arm64 modules_install \
178 INSTALL_MOD_PATH=$(BINARIES_PATH)/modules
179endif
180
181$(LINUX_PATH)/arch/arm64/boot/Image.gz: linux
182 gzip -c $(LINUX_PATH)/arch/arm64/boot/Image >$@
183
184.PHONY: linux-defconfig-clean
185linux-defconfig-clean: linux-defconfig-clean-common
186
187LINUX_CLEAN_COMMON_FLAGS += ARCH=arm64
188
189.PHONY: linux-clean
190linux-clean: linux-clean-common
191
192LINUX_CLEANER_COMMON_FLAGS += ARCH=arm64
193
194.PHONY: linux-cleaner
195linux-cleaner: linux-cleaner-common
196
197################################################################################
198# OP-TEE
199################################################################################
200OPTEE_OS_PLATFORM = rockchip-rk3588
201OPTEE_OS_COMMON_FLAGS += CFG_ENABLE_EMBEDDED_TESTS=y
202
203.PHONY: optee-os
204optee-os: optee-os-common
205
206.PHONY: optee-os-clean
207optee-os-clean: optee-os-clean-common
208
209clean: optee-os-clean
210
211################################################################################
212# Boot image, shall be copied to SD card
213################################################################################
214
215# U-Boot offset comes from CONFIG_SYS_MMCSD_RAW_MODE_U_BOOT_SECTOR=0x4000
216# Partition no. 5 ends at 12288 + BR2_TARGET_ROOTFS_EXT2_SIZE (in kiB)
217# File size needs to be slightly bigger to accomodate for whatever meta-data
218rootfs-size-kib := $(shell echo $(BR2_TARGET_ROOTFS_EXT2_SIZE) | sed 's/M/*1024/')
219p5-end-kib := $(shell echo $$((12288 + $(rootfs-size-kib))))
220img-size-kib := $(shell echo $$(($(p5-end-kib) + 1024)))
221
222.PHONY: boot-img
223boot-img: u-boot buildroot $(LINUX_PATH)/arch/arm64/boot/Image.gz
224 mkdir -p $(BINARIES_PATH)
225 rm -f $(BOOT_IMG)
226 truncate -s $(img-size-kib)KiB $(BOOT_IMG)
227 parted -s $(BOOT_IMG) \
228 unit kiB \
229 mklabel gpt \
230 mkpart idbloader 32 4032 \
231 mkpart primary fat32 4032 4096 \
232 mkpart primary fat32 4096 8192 \
233 mkpart uboot 8192 12288 \
234 mkpart root fat32 12288 $(p5-end-kib)
235 sgdisk -u 5:17d61bff-8fdc-4089-b675-9be21b9f6ac7 $(BOOT_IMG)
236 dd if=$(UBOOT_PATH)/idbloader.img of=$(BOOT_IMG) bs=1kiB seek=32 conv=notrunc
237 dd if=$(UBOOT_PATH)/u-boot.itb of=$(BOOT_IMG) bs=1kiB seek=8192 conv=notrunc
238 e2mkdir $(ROOT_IMG):/boot
239 e2cp $(LINUX_PATH)/arch/arm64/boot/Image.gz $(ROOT_IMG):/boot
240 e2cp $(LINUX_PATH)/arch/arm64/boot/dts/rockchip/rk3588-nanopi6-rev01.dtb $(ROOT_IMG):/boot
241 e2cp $(LINUX_PATH)/arch/arm64/boot/dts/rockchip/rk3588-nanopi6-optee.dtbo $(ROOT_IMG):/boot
242ifeq ($(LINUX_MODULES),y)
243 find $(BINARIES_PATH)/modules -type f | while read f; do e2cp -a $$f $(ROOT_IMG):$$(echo $$f | sed s@$(BINARIES_PATH)/modules@@); done
244endif
245 dd if=$(ROOT_IMG) of=$(BOOT_IMG) bs=1kiB seek=12288 conv=notrunc
246
247.PHONY: boot-img-clean
248boot-img-clean:
249 rm -f $(BOOT_IMG)
250
251clean: boot-img-clean