# wsl_toolchain_build **Repository Path**: taylorxp/wsl_toolchain_build ## Basic Information - **Project Name**: wsl_toolchain_build - **Description**: 通用linux下的所有mcu编译 - **Primary Language**: C - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-02-08 - **Last Updated**: 2026-02-10 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # WSL ARM Cortex-M 编译工具链 > 🚀 通用的 Cortex-M MCU 编译工具链 - 支持 STM32/GD32/NXP/Nordic 等主流厂商 --- ## 📋 目录 - [快速开始](#快速开始) - [功能特性](#功能特性) - [支持的MCU](#支持的mcu) - [使用方法](#使用方法) - [项目结构](#项目结构) - [高级配置](#高级配置) - [常见问题](#常见问题) - [文档索引](#文档索引) --- ## 🚀 快速开始 ### 前置要求 ```bash # 安装 ARM GCC 工具链和 CMake sudo apt install gcc-arm-none-eabi cmake make # 验证安装 arm-none-eabi-gcc --version cmake --version ``` ### 三步快速上手 ```bash # 进入工具链目录 cd toolchain # Step 1: 设置MCU型号(可选,默认STM32F103) ./build.sh mcu STM32F103 # Step 2: 编译项目 ./build.sh build # Step 3: 查看输出文件 ls ../demo_project/build/ ``` ### 输出文件 编译成功后在 `build/` 目录生成: - `*.elf` - ELF可执行文件(用于调试) - `*.hex` - Intel HEX格式(用于烧录) - `*.bin` - 二进制格式(用于烧录) - `*.map` - 内存映射文件 - `*.lst` - 反汇编文件 --- ## ✨ 功能特性 ### ✅ 通用性强 - 支持所有 Cortex-M 系列 MCU(M0/M0+/M3/M4/M7/M23/M33/M35P/M52/M55/M85) - 支持主流厂商:STM32、GD32、NXP、Nordic、TI 等 - 跨平台支持:Windows、Linux、WSL ### 🔧 配置简单 - **一行命令切换MCU**:`cd toolchain && ./build.sh mcu STM32H743` - **自动工具链检测**:自动查找 ARM GCC 工具链 - **智能平台适配**:自动识别 Windows/Linux/macOS ### 📦 开箱即用 - 提供完整的 demo 项目 - 包含启动文件、链接脚本模板 - 清晰的项目结构 ### 🎯 测试工具 - **统一测试脚本**:`test_all.sh` 整合所有测试功能 - 支持快速测试、Cortex-M核心测试、STM32全系列测试 - 自动保存和恢复MCU配置 --- ## 🔌 支持的MCU ### 厂商系列(推荐使用) #### STMicroelectronics STM32 ```bash STM32F0 # Cortex-M0 (超低功耗) STM32F1 # Cortex-M3 (主流,如STM32F103) STM32F4 # Cortex-M4F (高性能,如STM32F407) STM32H7 # Cortex-M7DP (双精度FPU,如STM32H743) STM32L4 # Cortex-M4F (低功耗) STM32G0 # Cortex-M0+ (超值系列) ``` #### GigaDevice GD32 ```bash GD32F1 # Cortex-M3 (兼容STM32F1) GD32F4 # Cortex-M4F GD32H7 # Cortex-M7DP (高性能) ``` #### Nordic nRF ```bash NRF52 # Cortex-M4F NRF53 # Cortex-M33 ``` #### NXP LPC ```bash LPC11XX # Cortex-M0 LPC17XX # Cortex-M3 LPC55XX # Cortex-M33F ``` ### 核心 CPU 类型 ```bash CORTEX_M0 # ARMv6-M, 最小 CORTEX_M0PLUS # ARMv6-M, 改进版 CORTEX_M3 # ARMv7-M, 高性能无FPU CORTEX_M4F # ARMv7E-M, 单精度FPU CORTEX_M7DP # ARMv7E-M, 双精度FPU扩展 CORTEX_M23 # ARMv8-M.baseline, 安全基础 CORTEX_M33F # ARMv8-M.mainline, 硬件FPU ``` ### FPU 配置对比 | 核心配置 | CPU | FPU | 浮点ABI | 说明 | |---------|-----|-----|---------|------| | CORTEX_M0 | M0 | 无 | soft | 基础型,最小面积 | | CORTEX_M3 | M3 | 无 | soft | 高性能,无FPU | | CORTEX_M4F | M4 | fpv4-sp-d16 | hard | 单精度,硬件浮点 | | CORTEX_M7DP | M7 | fpv5-sp-d16 | hard | 双精度扩展,最快 | --- ## 📖 使用方法 ### 方法1: 使用 build.sh 脚本(推荐) #### 基本命令 ```bash cd toolchain # 进入工具链目录 ./build.sh # 编译项目(默认) ./build.sh build # 编译项目 ./build.sh clean # 清理构建文件 ./build.sh rebuild # 清理并重新编译 ./build.sh mcu <型号> # 切换MCU型号并编译 ./build.sh list # 列出所有支持的MCU ./build.sh info # 显示构建环境信息 ./build.sh help # 显示帮助 ``` #### 典型工作流 ```bash cd toolchain # 进入工具链目录 # 1. 首次使用 - 设置MCU型号 ./build.sh mcu STM32F103 # 2. 编译项目 ./build.sh build # 3. 修改代码后重新编译 ./build.sh rebuild # 4. 切换到不同的MCU ./build.sh mcu STM32H743 # 5. 查看环境信息 ./build.sh info ``` ### 方法2: 直接使用 CMake ```bash cd demo_project # 配置项目(指定MCU型号) cmake -DCMAKE_TOOLCHAIN_FILE=../cmake-config/toolchain-gcc-arm-none-eabi.cmake \ -DMCU=STM32F103 \ -B build # 编译 cmake --build build # 查看详细编译输出 cmake --build build -- VERBOSE=1 ``` ### 使用测试脚本 ```bash # 查看测试帮助 cd toolchain && ./scripts/test.sh help # 快速测试(2个常用MCU) ./scripts/test.sh quick # 测试所有Cortex-M核心(11个) ./scripts/test.sh cortex # 测试STM32全系列(27个型号) ./scripts/test.sh stm32 # 运行所有测试 ./scripts/test.sh all # 详细模式 ./scripts/test.sh stm32 --verbose # 不恢复原始配置 ./scripts/test.sh quick --no-restore ``` --- ## 📁 项目结构 ``` wsl_toolchain_build/ ├── README.md # 项目主文档 ├── QUICK_START.md # 快速开始指南 ├── docs/ # 详细文档目录 │ ├── UNIVERSAL_CONFIG_GUIDE.md # 通用配置指南 │ ├── MCU_CONFIG_IMPLEMENTATION.md # MCU配置实现文档 │ ├── DEPLOYMENT.md # 部署指南 │ ├── REVIEW_REPORT.md # 项目审查报告 │ ├── VERSION_CONTROL_GUIDE.md # 版本控制指南 │ └── WSL_SETUP_GUIDE.md # WSL环境设置指南 ├── toolchain/ # 工具链目录 ⭐ │ ├── build.sh # 通用MCU编译脚本 ⭐ │ ├── version.conf # 版本配置文件 │ ├── scripts/ # 脚本配置文件目录 │ │ ├── flash_download.sh # 烧录脚本 │ │ ├── test.sh # 测试脚本 │ │ ├── jlink_config.sh # J-Link配置脚本 │ │ ├── device-mappings.sh # 设备映射配置 │ │ ├── load_mcu_config.sh # MCU配置加载脚本 │ │ ├── MCU_CONFIG_README.md # MCU配置说明文档 │ │ └── .mcu-config.example # MCU配置示例文件 │ └── cmake-config/ # CMake配置文件目录 │ ├── toolchain-gcc-arm-none-eabi.cmake # 工具链配置 ⭐ │ └── common-mcu-config.cmake # MCU型号配置 ⭐ ├── demo_project/ # 演示项目 │ ├── CMakeLists.txt # 项目构建文件 │ ├── src/ # 源文件 │ ├── include/ # 头文件 │ ├── ld/ # 链接脚本 │ └── startup/ # 启动文件 └── docs/ # 详细文档目录 └── WSL_SETUP_GUIDE.md # WSL环境设置指南 ``` ### 核心文件说明 #### build.sh - 通用 MCU 编译脚本 - 支持所有 Cortex-M 系列 MCU - 提供 build、clean、rebuild、mcu 切换等功能 - 自动工具链检测和错误处理 #### scripts/test.sh - 统一的 MCU 测试脚本 - 整合了所有测试功能到一个文件 - 支持多种测试模式:quick、cortex、stm32、all 等 - 自动保存和恢复 MCU 配置 #### cmake-config/toolchain-gcc-arm-none-eabi.cmake - 工具链配置文件 - 自动检测操作系统和工具链 - 加载 MCU 配置并设置编译选项 #### cmake-config/common-mcu-config.cmake - MCU 配置数据库 - 定义所有 Cortex-M 核心的编译选项 - 厂商 MCU 型号到核心的映射表 #### scripts/ 目录 - `flash_download.sh` - 烧录脚本,支持 J-Link 自动检测和烧录 - `test.sh` - 测试脚本,支持多种测试模式 - `jlink_config.sh` - J-Link 配置脚本 - `device-mappings.sh` - 设备映射配置 - `load_mcu_config.sh` - MCU 配置加载脚本 - `MCU_CONFIG_README.md` - MCU 配置说明文档 --- ## 🔧 高级配置 ### 自定义链接脚本 ```bash cmake -DMCU=STM32F103 \ -DLD_SCRIPT=custom.ld \ -B build ``` ### 指定优化级别 ```bash # 在命令行 cmake -DMCU=STM32F103 -DOPT_LEVEL=O2 -B build # 或在 CMakeLists.txt 中 set(CMAKE_C_FLAGS_RELEASE "-O3") ``` ### 多 MCU 项目管理 创建多个构建目录: ```bash # STM32F103 版本 cmake -DMCU=STM32F103 -B build_f103 cmake --build build_f103 # STM32H743 版本 cmake -DMCU=STM32H743 -B build_h743 cmake --build build_h743 ``` ### 添加预定义宏 在 `CMakeLists.txt` 中: ```cmake target_compile_definitions(${PROJECT_NAME}.elf PRIVATE USE_HAL_DRIVER STM32F103xE MY_CUSTOM_DEFINE=1 ) ``` ### 浮点 ABI 选择 理解三种浮点 ABI 的区别: | ABI | 说明 | 优缺点 | 使用场景 | |-----|------|--------|----------| | **soft** | 纯软件浮点 | ✅ 最大兼容性
❌ 最慢性能 | 无 FPU 的 MCU (M0, M3) | | **softfp** | 硬件 FPU + 软件兼容 | ✅ 兼容软浮点库
✅ 硬件加速
❌ 函数调用开销 | 需要调用第三方软浮点库 | | **hard** | 纯硬件浮点 | ✅ 最快性能
❌ 不兼容软浮点 | 纯硬件浮点项目 | --- ## ❓ 常见问题 ### Q1: 如何添加新的MCU型号? **A**: 编辑 `cmake-config/common-mcu-config.cmake`,添加映射: ```cmake # 添加厂商映射 set(STM32G4_SERIES CORTEX_M4F) # 或添加核心配置(如果需要新核心) set(MCU_CONFIG_CORTEX_MXXX CPU_FLAGS "-mcpu=cortex-mxxx -mthumb" FPU_FLAGS "-mfpu=xxx" FLOAT_ABI "hard" CORE_TYPE "MXXX" ARCH "vX-m" ) ``` ### Q2: 编译时提示找不到工具链? **A**: 确保 ARM GCC 工具链已安装并在 PATH 中: ```bash # 检查工具链 arm-none-eabi-gcc --version # 如果未安装 sudo apt install gcc-arm-none-eabi ``` ### Q3: 浮点未定义引用错误? **A**: 浮点配置错误。检查: - 如果使用 `-mfloat-abi=hard`,确保所有库都使用 hard 编译 - 如果链接第三方库,改用 `softfp` 或 `soft` ### Q4: 如何查看完整的编译命令? **A**: 使用 `VERBOSE=1`: ```bash cmake --build build -- VERBOSE=1 ``` ### Q5: Windows 下如何使用? **A**: 如果使用 MinGW: ```cmd cmake -DCMAKE_TOOLCHAIN_FILE=toolchain-gcc-arm-none-eabi.cmake ^ -DMCU=STM32F103 ^ -G "MinGW Makefiles" ^ -B build cmake --build build ``` ### Q6: 如何为不同的 MCU 使用不同的链接脚本? **A**: 在 `cmake-config/common-mcu-config.cmake` 中添加链接脚本映射: ```cmake # 为每个 MCU 添加链接脚本路径 set(MCU_CONFIG_CORTEX_M4_LD_SCRIPT "${CMAKE_CURRENT_LIST_DIR}/ld/cortex-m4.ld") set(MCU_CONFIG_CORTEX_M7_LD_SCRIPT "${CMAKE_CURRENT_LIST_DIR}/ld/cortex-m7.ld") ``` --- ## 📚 文档索引 ### 快速入门 - **[QUICK_START.md](QUICK_START.md)** - 快速开始指南 - 环境准备 - 5分钟快速上手 - 常用命令速查 ### 配置指南 - **[docs/UNIVERSAL_CONFIG_GUIDE.md](docs/UNIVERSAL_CONFIG_GUIDE.md)** - 通用配置指南 - MCU 配置详解 - 工具链配置 - 编译选项说明 - **[docs/MCU_CONFIG_IMPLEMENTATION.md](docs/MCU_CONFIG_IMPLEMENTATION.md)** - MCU配置实现文档 - 配置系统架构 - 实现细节说明 - 扩展指南 - **[toolchain/scripts/MCU_CONFIG_README.md](toolchain/scripts/MCU_CONFIG_README.md)** - MCU配置说明文档 - 配置文件格式 - 环境变量说明 - 使用示例 ### 部署与运维 - **[docs/DEPLOYMENT.md](docs/DEPLOYMENT.md)** - 部署指南 - 环境部署 - CI/CD 集成 - 生产环境配置 - **[docs/VERSION_CONTROL_GUIDE.md](docs/VERSION_CONTROL_GUIDE.md)** - 版本控制指南 - 固件版本号管理 - 版本历史记录 - Git标签集成 - **[docs/WSL_SETUP_GUIDE.md](docs/WSL_SETUP_GUIDE.md)** - WSL环境设置指南 - WSL 安装配置 - 工具链安装 - 常见问题解决 ### 开发文档 - **[docs/REVIEW_REPORT.md](docs/REVIEW_REPORT.md)** - 项目审查报告 - 代码审查结果 - 改进建议 - 最佳实践 --- ## 🚀 VSCode 集成 创建 `.vscode/tasks.json`: ```json { "version": "2.0.0", "tasks": [ { "label": "编译 MCU 项目", "type": "shell", "command": "./build.sh", "group": {"kind": "build", "isDefault": true}, "problemMatcher": [] }, { "label": "清理并重新编译", "type": "shell", "command": "./build.sh", "args": ["rebuild"], "problemMatcher": [] }, { "label": "运行快速测试", "type": "shell", "command": "./scripts/test.sh", "args": ["quick"], "problemMatcher": [] } ] } ``` 创建 `.vscode/launch.json` 用于调试: ```json { "version": "0.2.0", "configurations": [ { "name": "Cortex Debug", "cwd": "${workspaceRoot}", "executable": "./build/mcu_demo.elf", "request": "launch", "type": "cortex-debug", "servertype": "jlink", "device": "STM32F103C8T6", "interface": "swd" } ] } ``` --- ## 📚 参考资料 - [CMake 官方文档](https://cmake.org/documentation/) - [ARM GCC 工具链文档](https://developer.arm.com/documentation/dui0473/) - [Cortex-M 处理器参考手册](https://developer.arm.com/documentation/) - [J-Link 软件下载](https://www.segger.com/downloads/jlink/) --- ## 📝 版本历史 ### v2.2 (2025-02-09) - 📝 更新 README.md 文档,反映当前项目结构 - 📁 修正文件路径和脚本名称 - 📚 添加文档索引部分,整理所有相关文档 - ✨ 新增多个详细文档:QUICK_START.md、UNIVERSAL_CONFIG_GUIDE.md、MCU_CONFIG_IMPLEMENTATION.md 等 - 🔧 优化项目结构说明 ### v2.1 (2025-02-08) - ✨ 重组项目结构,分离脚本和配置文件 - 📁 脚本文件移至 `scripts/` 目录 - 📁 CMake配置移至 `cmake-config/` 目录 - 📝 更新文档以反映新结构 ### v2.0 (2025-02-08) - ✨ 整合所有测试脚本到 `test.sh` - ✨ 优化编译脚本文档和帮助信息 - ✨ 统一项目文档结构 - 🐛 删除冗余的测试脚本 ### v1.0 (2025-02-07) - 🎉 初始版本 - ✅ 基础编译和测试功能 - ✅ 支持所有 Cortex-M 系列 MCU - ✅ 跨平台支持 --- ## 📄 许可证 本项目采用 MIT 许可证。 --- **祝你开发顺利!🎉** 如有问题或建议,欢迎反馈。