From e25e3b95a38313d2434303bcfbdf2e930d157576 Mon Sep 17 00:00:00 2001 From: zhji Date: Sun, 13 Apr 2025 17:29:34 +0800 Subject: [PATCH] [feat] prepare for boot2 --- example/boot2/CMakeLists.txt | 14 ++++++++ example/boot2/Makefile | 20 +++++++++++ example/boot2/boot2_pre.S | 21 ++++++++++++ example/boot2/flash.ld | 62 +++++++++++++++++++++++++++++++++++ example/boot2/main.c | 4 +++ example/boot2/proj.conf | 1 + project.build | 9 +++-- tools/elf2uf2 | Bin 0 -> 94024 bytes 8 files changed, 129 insertions(+), 2 deletions(-) create mode 100644 example/boot2/CMakeLists.txt create mode 100644 example/boot2/Makefile create mode 100644 example/boot2/boot2_pre.S create mode 100644 example/boot2/flash.ld create mode 100644 example/boot2/main.c create mode 100644 example/boot2/proj.conf create mode 100755 tools/elf2uf2 diff --git a/example/boot2/CMakeLists.txt b/example/boot2/CMakeLists.txt new file mode 100644 index 0000000..d154bdc --- /dev/null +++ b/example/boot2/CMakeLists.txt @@ -0,0 +1,14 @@ +cmake_minimum_required(VERSION 3.10) + +include(proj.conf) + +project(${EXAMPLE_NAME} VERSION 0.1) +add_executable(${EXAMPLE_NAME}.elf main.c) + +enable_language(ASM) +target_sources(${EXAMPLE_NAME}.elf PUBLIC boot2_pre.S) + +add_subdirectory(${SDK_BASE_DIR} sdk) +target_link_libraries(${EXAMPLE_NAME}.elf sdk) + + diff --git a/example/boot2/Makefile b/example/boot2/Makefile new file mode 100644 index 0000000..d383a42 --- /dev/null +++ b/example/boot2/Makefile @@ -0,0 +1,20 @@ +EXAMPLE_BASE_DIR ?= $(shell realpath .) +EXAMPLE_NAME := $(notdir $(patsubst %/,%,$(CURDIR))) +SDK_BASE_DIR ?= $(shell realpath ./../..) + +export SDK_BASE_DIR +export EXAMPLE_NAME +export EXAMPLE_BASE_DIR + +GCC_PATH := $(shell which arm-none-eabi-gcc) +CROSS_COMPILE := $(patsubst %gcc,%,$(GCC_PATH)) +ifeq ($(GCC_PATH),) +$(error arm-none-eabi-gcc not found in PATH. Please install the ARM toolchain.) +endif + +# add custom cmake definition +#cmake_definition+=-Dxxx=sss + +LDFLAGS += -T$(EXAMPLE_BASE_DIR)/flash.ld + +include $(SDK_BASE_DIR)/project.build diff --git a/example/boot2/boot2_pre.S b/example/boot2/boot2_pre.S new file mode 100644 index 0000000..1910ca1 --- /dev/null +++ b/example/boot2/boot2_pre.S @@ -0,0 +1,21 @@ +.syntax unified +.cpu cortex-m0plus +.thumb + +.global boot2_pre + +.section .text.boot2_pre +.type boot2_pre, %function +boot2_pre: + b boot2_copy_self + .word 0x11223344 + .word 0xabcdef58 + + + +boot2_copy_self: + + + bl main + +.size .boot2_pre, .-boot2_pre diff --git a/example/boot2/flash.ld b/example/boot2/flash.ld new file mode 100644 index 0000000..dc5ade1 --- /dev/null +++ b/example/boot2/flash.ld @@ -0,0 +1,62 @@ +_start = ORIGIN(FLASH); +ENTRY(_start) + +MEMORY +{ + FLASH (xrx) :ORIGIN = 0x10000000, LENGTH = 256K + RAM (xrw) :ORIGIN = 0x20000000, LENGTH = 256K + STACK (rw) :ORIGIN = 0x20040000, LENGTH = 8K - 256 + AUTO(xrx) :ORIGIN = 0x20041F00, LENGTH = 256 +} + +_stack_top = ORIGIN(STACK) + LENGTH(STACK); + +PHDRS +{ + boot2_pre PT_LOAD FLAGS(5); /* R + X */ + text PT_LOAD FLAGS(5); /* R + X */ + rodata PT_LOAD FLAGS(5); /* R + W */ + data PT_LOAD FLAGS(6); /* R + W */ + bss PT_LOAD FLAGS(6); /* R + W */ +} + +SECTIONS +{ + .boot2_pre : + { + KEEP(*(.text.boot2_pre)) + _boot2_pre_size = . - ADDR(.boot2_pre); + ASSERT(_boot2_pre_size <= 252, "Error: .boot2_pre size exceeds 252 bytes!"); + . += 256 - _boot2_pre_size; + } >AUTO AT > FLASH :boot2_pre + + .text : + { + . = ALIGN(4); + *(.text*) + . = ALIGN(4); + } >RAM AT > FLASH :text + + .rodata : + { + . = ALIGN(4); + *(.rodata*) + . = ALIGN(4); + } >RAM AT > FLASH :rodata + + .data : + { + . = ALIGN(4); + *(.data*) + . = ALIGN(4); + } >RAM AT > FLASH :data + + .bss (NOLOAD) : + { + . = ALIGN(4); + _bss_start = .; + *(.bss*) + . = ALIGN(4); + _bss_end = .; + } >RAM :bss +} diff --git a/example/boot2/main.c b/example/boot2/main.c new file mode 100644 index 0000000..43df275 --- /dev/null +++ b/example/boot2/main.c @@ -0,0 +1,4 @@ +int main(void) +{ + return 0; +} diff --git a/example/boot2/proj.conf b/example/boot2/proj.conf new file mode 100644 index 0000000..7d2ef31 --- /dev/null +++ b/example/boot2/proj.conf @@ -0,0 +1 @@ +# set(CONFIG_COMPONENT1 1) diff --git a/project.build b/project.build index b5581a1..b3fba9b 100644 --- a/project.build +++ b/project.build @@ -11,6 +11,9 @@ CFLAGS += -ffunction-sections CFLAGS += -fdata-sections CFLAGS += -Wpointer-arith +ifneq ($(findstring -T, $(LDFLAGS)), -T) +LDFLAGS += -T$(SDK_BASE_DIR)/ram.ld +endif LDFLAGS += -mcpu=cortex-m0plus LDFLAGS += -mthumb LDFLAGS += -g3 @@ -18,11 +21,11 @@ LDFLAGS += -O2 LDFLAGS += -Wall LDFLAGS += -Wl,--gc-sections LDFLAGS += -nostartfiles -LDFLAGS += -T$(SDK_BASE_DIR)/ram.ld LDFLAGS += -Wl,-Map=$(EXAMPLE_NAME).map LDFLAGS += -Wl,--print-memory-usage CMAKE := cmake +ELF2UF2 := $(SDK_BASE_DIR)/tools/elf2uf2 # The command to remove a file. RM = $(CMAKE) -E remove_directory @@ -55,8 +58,10 @@ build:Makefile $(MAKE) -C build -j $(CROSS_COMPILE)objcopy -O binary $(FINAL_NAME_PRE).elf $(FINAL_NAME_PRE).bin $(CROSS_COMPILE)objdump -d -S $(FINAL_NAME_PRE).elf > $(FINAL_NAME_PRE).asm + $(CROSS_COMPILE)nm $(FINAL_NAME_PRE).elf > $(FINAL_NAME_PRE).nm + $(ELF2UF2) $(FINAL_NAME_PRE).elf $(FINAL_NAME_PRE).uf2 size $(FINAL_NAME_PRE).elf - sha256sum $(FINAL_NAME_PRE).elf + sha256sum $(FINAL_NAME_PRE).bin clean:: $(RM) build diff --git a/tools/elf2uf2 b/tools/elf2uf2 new file mode 100755 index 0000000000000000000000000000000000000000..104e879ac92c6d23cd55c9267bc909c7ddecfdbc GIT binary patch literal 94024 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
dmnqAm|tImTk||Cg!Jy) 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 literal 0 HcmV?d00001