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