新增核心模块: - 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 个场景全部通过 - 功能闭环验证完成
111 lines
3.5 KiB
CMake
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 "===============================") |