Files
bootloader/CMakeLists.txt
robinson c90c187749 feat: 完成 STM32 Bootloader 核心功能实现和测试框架
新增核心模块:
- bootloader.c: Bootloader 主逻辑,状态机,命令处理
- protocol.c: 通信协议,帧解析,CRC16 验证
- boot_jump.c: 启动跳转,VTOR 重定向,应用程序有效性检查
- firmware_mgr.c: 固件管理,双 Bank 支持
- crc_check.c: CRC32 计算与验证 (ISO 9809-2 标准)
- aes_crypto.c: AES-256 解密 (ECB 模式)
- boot_trigger.c: 触发机制,魔术字,按键检测
- version_mgr.c: 版本管理,固件版本读取、更新、回滚

新增头文件:
- include/protocol.h: 协议接口定义
- include/boot_jump.h: 跳转接口定义
- include/firmware_mgr.h: 固件管理接口定义
- include/crc_check.h: CRC 校验接口定义
- include/aes_crypto.h: AES 加密接口定义
- include/boot_trigger.h: 触发机制接口定义
- include/version_mgr.h: 版本管理接口定义

修复现有 Bug:
- flash_port.c: 修复变量名错误 (word_data -> chunk_data)
- flash_port.c: 添加 Flash 解锁 (HAL_FLASH_Unlock)
- bsp_uart.c: 添加 uart_port_register 调用
- bsp_flash.c: 添加 flash_port_register 调用
- CMakeLists.txt: 取消核心模块注释,添加条件编译

新增测试框架 (tests/):
- unit/: 单元测试 (CRC32, AES, Boot Jump, Protocol)
- integration/: 集成测试 (完整升级流程)
- pc_tool/: PC 端烧录工具和测试固件生成器
- 提供一键编译运行脚本 (run_tests.sh, run_tests.bat)
- 完整测试文档 (README.md, TEST_REPORT.md)

配置更新:
- 所有功能默认启用 (AES, CRC, Dual Bank, Version Mgr)
- 支持条件编译和模块化配置

测试状态:
- 单元测试:36 个用例全部通过
- 集成测试:6 个场景全部通过
- 功能闭环验证完成
2026-04-05 15:49:04 +08:00

111 lines
3.5 KiB
CMake

cmake_minimum_required(VERSION 3.22)
set(MCU_FAMILY "stm32f4xx" CACHE STRING "MCU family")
set_property(CACHE MCU_FAMILY PROPERTY STRINGS
"stm32f4xx"
"stm32f1xx"
)
option(BOOT_ENABLE_AES "Enable AES encryption" ON)
option(BOOT_ENABLE_CRC "Enable CRC verification" ON)
option(BOOT_ENABLE_DUAL_BANK "Enable dual bank support" ON)
option(BOOT_ENABLE_VERSION_MGR "Enable version management" ON)
option(BOOT_ENABLE_LOG "Enable logging" ON)
add_library(bootloader STATIC)
set(BOOTLOADER_CORE_SRC
${CMAKE_CURRENT_SOURCE_DIR}/src/bootloader.c
${CMAKE_CURRENT_SOURCE_DIR}/src/bsp_flash.c
${CMAKE_CURRENT_SOURCE_DIR}/src/bsp_uart.c
${CMAKE_CURRENT_SOURCE_DIR}/src/protocol.c
${CMAKE_CURRENT_SOURCE_DIR}/src/crc_check.c
${CMAKE_CURRENT_SOURCE_DIR}/src/firmware_mgr.c
${CMAKE_CURRENT_SOURCE_DIR}/src/boot_jump.c
${CMAKE_CURRENT_SOURCE_DIR}/src/boot_trigger.c
${CMAKE_CURRENT_SOURCE_DIR}/src/version_mgr.c
)
# 加密模块(条件编译)
if(BOOT_ENABLE_AES)
list(APPEND BOOTLOADER_CORE_SRC
${CMAKE_CURRENT_SOURCE_DIR}/src/aes_crypto.c
)
endif()
# 版本管理模块(条件编译)
if(BOOT_ENABLE_VERSION_MGR)
list(APPEND BOOTLOADER_CORE_SRC
${CMAKE_CURRENT_SOURCE_DIR}/src/version_mgr.c
)
endif()
set(BOOTLOADER_PORT_SRC
${CMAKE_CURRENT_SOURCE_DIR}/port/${MCU_FAMILY}/flash_port.c
${CMAKE_CURRENT_SOURCE_DIR}/port/${MCU_FAMILY}/uart_port.c
)
target_sources(bootloader PRIVATE
${BOOTLOADER_CORE_SRC}
${BOOTLOADER_PORT_SRC}
)
target_include_directories(bootloader PUBLIC
${CMAKE_CURRENT_SOURCE_DIR}/include
${CMAKE_CURRENT_SOURCE_DIR}/port/${MCU_FAMILY}
)
if(BOOT_ENABLE_AES)
target_compile_definitions(bootloader PRIVATE BOOT_ENABLE_AES=1)
else()
target_compile_definitions(bootloader PRIVATE BOOT_ENABLE_AES=0)
endif()
if(BOOT_ENABLE_CRC)
target_compile_definitions(bootloader PRIVATE BOOT_ENABLE_CRC=1)
else()
target_compile_definitions(bootloader PRIVATE BOOT_ENABLE_CRC=0)
endif()
if(BOOT_ENABLE_DUAL_BANK)
target_compile_definitions(bootloader PRIVATE BOOT_ENABLE_DUAL_BANK=1)
else()
target_compile_definitions(bootloader PRIVATE BOOT_ENABLE_DUAL_BANK=0)
endif()
if(BOOT_ENABLE_VERSION_MGR)
target_compile_definitions(bootloader PRIVATE BOOT_ENABLE_VERSION_MGR=1)
else()
target_compile_definitions(bootloader PRIVATE BOOT_ENABLE_VERSION_MGR=0)
endif()
if(BOOT_ENABLE_LOG)
target_compile_definitions(bootloader PRIVATE BOOT_ENABLE_LOG=1)
else()
target_compile_definitions(bootloader PRIVATE BOOT_ENABLE_LOG=0)
endif()
if(MCU_FAMILY STREQUAL "stm32f4xx")
target_compile_definitions(bootloader PRIVATE MCU_FAMILY_STM32F4XX=1)
elseif(MCU_FAMILY STREQUAL "stm32f1xx")
target_compile_definitions(bootloader PRIVATE MCU_FAMILY_STM32F1XX=1)
endif()
target_link_libraries(bootloader PUBLIC
stm32cubemx
)
target_compile_options(bootloader PRIVATE
-Wall # 所有警告
-Wextra # 额外警告
-Wpedantic # 严格ISO C标准
-fdata-sections # 数据分段(链接器优化)
-ffunction-sections # 函数分段(链接器优化)
)
message(STATUS "=== Bootloader Configuration ===")
message(STATUS "MCU Family: ${MCU_FAMILY}")
message(STATUS "AES Encryption: ${BOOT_ENABLE_AES}")
message(STATUS "CRC Verification: ${BOOT_ENABLE_CRC}")
message(STATUS "Dual Bank: ${BOOT_ENABLE_DUAL_BANK}")
message(STATUS "Version Manager: ${BOOT_ENABLE_VERSION_MGR}")
message(STATUS "Logging: ${BOOT_ENABLE_LOG}")
message(STATUS "===============================")