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