18.5 通用嵌入式开发环境
嵌入式系统开发是计算机科学与技术学科的重要分支,其技术成果广泛应用于物联网(Internet of Things,IoT)、工业自动化控制、消费类电子等诸多领域。本章详细介绍如何在 FreeBSD 操作系统上搭建主流的嵌入式开发环境。
STM32 开发环境
STM32 微控制器概述
STM32 是意法半导体(STMicroelectronics,ST)自 2007 年起推出的 32 位微控制器(Microcontroller Unit,MCU)产品系列,该系列产品基于 ARM Cortex-M 处理器内核架构,目前已成为嵌入式开发领域应用最为广泛的 MCU 平台之一。
STM32CubeMX 安装与配置
STM32CubeMX 是意法半导体官方提供的图形化硬件配置与代码生成工具,其核心功能是帮助开发者快速完成 STM32 项目的硬件初始化代码生成。本节介绍如何在 FreeBSD 平台上安装 STM32CubeMX。
在 FreeBSD 平台进行 STM32 嵌入式开发,推荐采用 STM32CubeMX 进行项目初始化配置。需要说明的是,STM32CubeMX 官方仅支持 Windows、Linux、macOS 三大平台,因此在 FreeBSD 上运行该软件需要借助 Linux 兼容层。
关于在 FreeBSD 上安装 Linux 兼容层的详细教程,请参考本书其他章节,推荐使用 FreeBSD 官方维护的 linux-rl9 兼容层。
在开始安装 STM32CubeMX 之前,请确保系统已安装 OpenJDK(版本要求不低于 17.0.6)作为运行时依赖。
注意
建议在
/compat/linux/home目录下为当前用户创建专用的主目录,并以非特权用户身份完成 STM32CubeMX 的安装流程,以避免不必要的 root 权限操作带来的安全风险。
例如:
# mkdir -p /compat/linux/home/username
# cd /compat/linux/home/
# chmod 775 -R username 配置好兼容层后,到 STM32CubeMX 官网 下载最新压缩包后进行解压。写作本文时,下载无需注册登录,仅需点击以访客身份下载即可,注意下载链接会被发送到邮件中,请确保邮件地址可以收信。
解压后进入 Linux 兼容层的 bash:
定位到解压缩文件夹并运行其中的 SetupSTM32CubeMX-{版本号} 安装脚本({版本号} 对应你下载的 STM32CubeMX 版本),指定安装的目录即可。
创建桌面快捷方式:
在 ~/Desktop 下创建 STM32CubeMX.desktop 文件,然后写入:

安装其他工具
除了 STM32CubeMX 外,还需要安装一些必要的开发工具链和调试工具,才能完成完整的嵌入式开发流程。本节介绍如何安装其他开发工具。使用 pkg 安装:
或者使用 ports 构建:
编译与烧录
完成开发环境搭建后,就可以开始进行 STM32 程序的编译和烧录工作。本节介绍如何编译和烧录 STM32 程序。使用 STM32CubeMX 创建项目,在 Project Manager 的 Project 里的 Toolchain/IDE 栏选择 CMake,在 Code Generator 里选择 copy all used libraries into project folder 和 Generate peripheral initialization as a pair of '.c/.h' files per peripheral。
生成项目后修改 CMakeLists.txt:
注意
该演示针对的是 STM32F103C8T6 等 STM32F1x 的芯片,请根据实际情况修改 CMakeLists.txt。
该演示使用的是 openocd 烧录,也可换为 stlink。
为了在终端使用 gcc-arm-embedded 的工具,应把其二进制文件加入 PATH 中。
对于 sh/bash/zsh,写入 ~/.profile:
对于 fish,写入 ~/.config/fish/config.fish 文件:
对于 csh,写入 ~/.cshrc:
开始编译:
最后烧录到开发板:
Espressif 乐鑫科技开发环境
ESP 系列芯片概述
除 STM32 平台外,乐鑫科技(Espressif)的 ESP 系列芯片亦是物联网(IoT)开发领域的主流选择,该系列芯片以其集成度高、功耗低以及出色的 Wi-Fi 和蓝牙连接能力而著称。
Espressif 乐鑫科技 的核心开发项目为 ESP-IDF,这是该公司为 ESP8266、ESP32 等芯片系列提供的官方开发框架,以 Apache 2.0 许可证开源发布。ESP-IDF 框架包含完整的 Wi-Fi/Bluetooth 协议栈、FreeRTOS 实时操作系统内核、各类外设驱动程序、功能组件库以及丰富的示例代码。
警告
需要明确的是,ESP-IDF 官方尚未正式支持 FreeBSD 平台,其官方文档仅列出了 Windows、Linux、macOS 三大平台的支持说明。
值得注意的是,在 ESP-IDF 仓库的
tools/idf_tools.py文件中存在以下配置:但这仅为将 FreeBSD 平台映射至 Linux 平台的兼容性处理手段,并非官方意义上的直接支持。
尽管通过一定的技术手段可在 FreeBSD 上成功编译 ESP-IDF,但其稳定性仍不及官方支持平台,且可能出现未预期的错误,因此不建议在生产环境中采用此配置。
esptool 与编译工具链安装
在开始使用 ESP-IDF 之前,需先安装一系列基础工具,包括固件烧录工具和交叉编译工具链。本节介绍 esptool 及相关工具的安装方法。
使用 pkg 二进制包管理器安装:
或者使用 ports 构建:
安装 ESP-IDF
ESP-IDF 是乐鑫科技官方提供的开发框架,包含了完整的开发工具链和组件库。
下载最新的 ESP-IDF RELEASE 压缩包
注意
ESP-IDF 的版本可能会更新,请检查 ESP-IDF 的 GitHub 仓库 来获取最新版。
安装必要工具
使用 pkg 安装:
或者使用 ports 构建:
初次运行 ESP-IDF 安装程序
下载完 ESP-IDF 后,需要运行安装脚本进行环境配置。本节介绍如何初次运行 ESP-IDF 安装程序。然后开始编译 ESP-IDF:
此时脚本会自动下载这些工具:
技巧
如果下载过慢,可以复制终端里的下载链接然后使用工具加速下载。
注意
第一次运行
./install.sh会卡在 Python 包安装阶段并报错:
原因:
PyPI 和 Espressif 的 extra-index 里根本没有 FreeBSD-amd64 的预编译 wheel(官方只提供了 linux-amd64、win-amd64、macosx 等)。同时 espidf.constraints.v5.5.txt 文件里还强制写了 --only-binary cryptography 和 --only-binary tree-sitter-c,导致 pip 拒绝从源码编译。
解决方法:修改 constraints 文件:
这行命令旨在放开源码编译限制,把文件中所有 --only-binary 都注释掉,允许 pip 从源码编译 cryptography、tree-sitter-c 等包。
修改完成后,重新执行:
这样才能让安装脚本顺利通过 Python 环境阶段。
成功编译后,就可以开始激活 ESP-IDF 的环境:
对于 sh / bash / zsh 用户:
对于 fish 用户:
编译与烧录示例
完成 ESP-IDF 环境配置后,就可以开始编译和烧录示例程序了。本节介绍如何编译和烧录 ESP-IDF 程序。
擦除整个 Flash
在烧录新固件前,通常需要先擦除芯片上的 Flash 存储空间,以确保新固件能够正常运行。
参数说明:
把
--chip改成你的芯片型号,如esp32s3、esp32c3;--port端口可根据dmesg | grep usb或usbconfig查找,通常是/dev/cuaU0或/dev/ttyU0
更多子命令帮助:esptool.py {子命令} --help,如 esptool.py write_flash --help
编译项目
擦除 Flash 后,就可以创建并编译 ESP-IDF 项目了。本节介绍如何编译 ESP-IDF 项目。执行编译操作:
烧录固件
使用 esptool.py 烧录:
参数说明:
-z:压缩模式,速度更快0x1000:常见起始地址(bootloader 后),如果是完整固件常从 0x0 开始firmware.bin:你编译的固件
或者使用 idf.py 烧录:
Arduino 开发环境
Arduino 平台概述
Arduino 是一款深受电子爱好者与教育工作者喜爱的开源硬件平台,其设计理念以简易性与可访问性为核心。本节介绍 Arduino 开发平台的配置与使用方法。
Arduino(中文常译为阿尔杜伊诺)是一个开源电子原型开发平台,于 2005 年由意大利伊夫雷亚交互设计学院(Interaction Design Institute Ivrea, IDII)的师生共同发起创立。该项目的初衷是服务于教学用途(具体为交互设计硕士课程),旨在让非专业背景的人士也能够便捷地开展电子项目开发。2006 年,由于资金困难,伊夫雷亚交互设计学院(2001-2006 年存续)宣告停办,但 Arduino 项目原型却得以保留并持续发展。
值得一提的是,Arduino 项目的愿景与 FreeBSD 项目的开源理念具有共通之处,Arduino 的官方愿景明确提出要让 Arduino 平台能够为任何人所使用。
背景知识
Arduino 这一名称源自一千多年前的一位意大利国王——伊夫雷亚的阿尔杜因(Arduin of Ivrea),其名字含义为“勇敢的朋友”。而在这位国王的出生地——意大利北部风景如画的伊夫雷亚镇(Ivrea),有一家名为“di Re Arduino”(意为“国王 Arduino 的”)的酒吧,Arduino 项目的联合创始人曾是这家酒吧的常客,项目名称即由此而来。
Arduino 安装方法
本节介绍 Arduino 开发环境的安装步骤。
使用 pkg 二进制包管理器安装:
或者使用 ports 构建:
然后加载模块:
加入到 /boot/loader.conf 永久生效:
注意
FreeBSD ports 上的 Arduino IDE 只有 1.8.x 版本,而最新的 Arduino IDE 已经到了 2.x 版本,这是因为 1.8.x 是基于 Java 编写的,易于移植,而 Arduino IDE 2.x(从 2.0 开始)基于 Theia(VS Code 衍生)和 Electron/Chromium 框架,这在 FreeBSD 上移植更复杂,因为 Electron 需要 Linux 专有依赖,且 FreeBSD 的 Chromium port 存在兼容性问题。
如果对此感兴趣,读者可尝试移植。

参考文献
Arduino,你的名字究竟该怎么读?[EB/OL]. [2026-03-25]. https://mp.weixin.qq.com/s/O4wfBF_WlHksmoWbMs7QeA. Arduino 中国官方微信公众号文章,详细介绍 Arduino 名称的由来与正确发音。微信公众号运营主体为 Arduino 在中国的外企独资公司,法定代表人为创始人 Federico Musto 先生。
Arduin of Ivrea[EB/OL]. [2026-03-25]. https://www.britannica.com/biography/Arduin-of-Ivrea. 大英百科全书关于意大利国王阿尔杜因·德·伊夫雷亚的历史记载条目。
故障排除与后续研究主题
嵌入式开发环境的搭建与使用过程中可能会遇到各类技术问题,本节旨在记录一些常见问题的解决思路,并预留后续内容的撰写位置。
课后习题
查找 PlatformIO 在 FreeBSD 上的相关资料,补充其完整的安装与配置流程,在 FreeBSD 上创建一个 STM32 项目并成功编译烧录。
适配 stm32cubemx2 到 FreeBSD。
最后更新于