[i=s] 本帖最后由 HEPPY 于 2026-7-1 10:40 编辑 [/i]
Bouffalo SDK Windows (Git Bash) 编译环境部署指南
环境概述
- 操作系统: Windows 10/11
- Shell: Git Bash (MinGW64)
- 芯片: BL616 / BL618 等
- 工具链: Xuantie-900 RISC-V (T-Head) GCC 10.2.0
1. 环境变量配置 (~/.bashrc)
编辑 C:\Users\<用户名>\.bashrc,添加以下内容:
# Bouffalo SDK Build Environment
export PATH="/e/tool/firmware/toolchain_gcc_t-head_windows/bin:$PATH"
export PATH="/e/tool/make:$PATH"
export PATH="/e/tool/ninja:$PATH"
export PATH="/e/tool/cmake/bin:$PATH"
unset BL_SDK_BASE
说明: 以上为当前实际配置。所有工具统一放在 E:\tool\ 下集中管理:
| 工具 |
路径 |
| 工具链 (riscv64-unknown-elf-gcc) |
E:\tool\firmware\toolchain_gcc_t-head_windows\bin |
| make |
E:\tool\make |
| ninja |
E:\tool\ninja |
| cmake |
E:\tool\cmake\bin |
BL_SDK_BASE 🚨必须取消设置,Makefile 会根据示例位置自动推导 SDK 根目录。
关键说明
| 配置项 |
说明 |
PATH |
需要添加工具链 bin/、make、ninja、cmake/bin/(均统一放在 E:\tool\ 下) |
BL_SDK_BASE |
必须取消设置,Makefile 会根据示例位置自动推导 SDK 根目录 |
| 启动加载 |
~/.bash_profile 会自动 source ~/.bashrc,打开 Git Bash 即可使用,无需手动执行 |
2. SDK Bug 修复
以下修改已经应用到我使用的本地代码中。如果重新拉取 SDK 或更新版本,可能需要重新应用。
2.1 project.build — 并行写入竞争修复
文件: project.build 第 161 行
问题: Windows 下使用 & 后台并行执行多个 cmake -E echo 写入同一文件,导致 defconfig.cmake 内容损坏,CMake 配置阶段报错 Parse error. Function missing ending ")"。
修复: 将 & 改为 ;(串行执行)。
ifeq ($(OS),Windows_NT)
@$(foreach var,$(CONFIG_VARS), \
- $(CMAKE) -E echo "set($(var) $(value $(var)))" >> $(BUILD_DIR)/generated/defconfig.cmake.new& \
+ $(CMAKE) -E echo "set($(var) $(value $(var)))" >> $(BUILD_DIR)/generated/defconfig.cmake.new; \
)
2.2 cmake/compiler_flags.cmake — LTO 链接兼容性修复
文件: cmake/compiler_flags.cmake 第 56-68 行
问题:
- 链接选项无条件添加
-flto
- 预编译的静态库(WiFi stack:
libfhost_*.a, libmacsw_*.a, libphyrf.a 等)由不同版本工具链编译,其 LTO 中间代码与当前链接器不兼容
- 报错:
lto1.exe: internal compiler error: original not compressed with zstd
修复:
- 从无条件链接选项中移除
-flto
-flto 仅在 CONFIG_GCC_COMPILE_LTO=y 时添加
- 默认添加
-fno-lto 禁用 LTO 插件
sdk_add_link_options(
-Wl,--cref
-Wl,--gc-sections
-nostartfiles
-fms-extensions
- -flto
-ffunction-sections
-fdata-sections
-Wl,--print-memory-usage
)
+if(CONFIG_GCC_COMPILE_LTO)
+ sdk_add_link_options(-flto)
+else()
+ sdk_add_link_options(-fno-lto)
+endif()
目前先补充到这里,再发现我再俩补充