在 Debian 上搭建嵌入式 Rust 开发环境
- 安装基础工具与 Rust
- 更新索引并安装常用构建工具与驱动依赖:sudo apt update && sudo apt install -y build-essential curl git libssl-dev pkg-config libudev-dev libusb-1.0-0-dev
- 安装 Rust 工具链(rustup):curl --proto ‘=https’ --tlsv1.2 -sSf https://sh.rustup.rs | sh,执行 source $HOME/.cargo/env 使环境变量生效
- 国内镜像(可选,提升下载速度):在 $CARGO_HOME/config 写入
[source.crates-io]
replace-with = ‘ustc’
[source.ustc]
registry = “sparse+https://mirrors.ustc.edu.cn/crates.io-index/”
- 常用目标与工具
- 嵌入式 Linux(ARM/RISC-V):rustup target add aarch64-unknown-linux-gnu armv7-unknown-linux-gnueabihf riscv64gc-unknown-linux-gnu
- ARM Cortex-M(裸机):rustup target add thumbv7m-none-eabi thumbv8m.main-none-eabi
- RISC-V(裸机,如 ESP32-C3):rustup target add riscv32imc-unknown-none-elf
- 烧录/调试:cargo install cargo-flash cargo-embed probe-rs-cli(probe-rs 支持 SWD/JTAG 与 RTT)
- AVR(Arduino 等 8 位 MCU):rustup target add avr-unknown-gnu-atmega328p,配合 avrdude/ravedude 使用
裸机 MCU 开发流程
- 典型最小工程要素
- #![no_std] 与 #![no_main],提供 panic 处理器(如 panic_halt),使用 cortex-m-rt 的 #[entry] 入口
- 依赖示例:cortex-m、cortex-m-rt、stm32f4xx-hal 等(按芯片选择 HAL)
- 构建与烧录
- 选择目标三元组(如 thumbv7m-none-eabi),cargo build --release
- 使用 probe-rs 烧录与日志:probe-rs flash --chip <型号> target/thumbv7m-none-eabi/release/app
- 使用 RTT 日志:cargo embed --target thumbv7m-none-eabi(需工程启用 RTT)
- 示例要点(示意)
- 使用 HAL 获取外设、配置 GPIO 为输出、循环翻转实现 LED 闪烁;通过 cortex-m 提供的延时或定时器实现时序控制
ESP32 与 RISC-V/Xtensa 开发
- 一键安装工具链与环境
- 安装 espup:cargo install espup && espup install(会设置 xtensa/riscv 工具链与导出脚本)
- 将导出脚本加入 shell 配置(如 ~/.bashrc):source $HOME/export-esp.sh
- Debian 依赖
- sudo apt install libudev-dev libssl-dev git pkg-config clang-devel python3.11-venv
- 工程模板与构建
- 生成工程:cargo generate esp-rs/esp-idf-template,选择 MCU(如 esp32c3)、是否启用 std(基于 esp-idf)
- 构建与烧录:cargo build / cargo run;使用 espflash/espmonitor 进行烧录与日志
- 常见注意事项
- 切换 Xtensa/RISC-V 工具链后执行一次 cargo clean
- 晶振与日志波特率:26M 晶振日志波特率常为 74880,40M 常为 115200;必要时在 sdkconfig.defaults 中设置 CONFIG_XTAL_FREQ_26=y 并重新构建
在 Debian 主机上交叉编译嵌入式 Linux 应用
- 安装交叉编译器
- sudo apt install gcc-aarch64-linux-gnu g+±aarch64-linux-gnu gcc-arm-linux-gnueabihf g+±arm-linux-gnueabihf
- 配置 Cargo 链接器
- 在项目根目录 .cargo/config.toml 写入:
[target.aarch64-unknown-linux-gnu]
linker = “aarch64-linux-gnu-gcc”
[target.armv7-unknown-linux-gnueabihf]
linker = “arm-linux-gnueabihf-gcc”
- 构建与部署
- 交叉编译:cargo build --target aarch64-unknown-linux-gnu --release
- 将产物拷贝到目标设备(如 scp),在设备上运行或配合目标系统的包管理器/初始化系统部署
容器化与团队协作
- 使用基于 Debian 的容器镜像统一工具链与依赖
- 镜像可预装 Rust、交叉目标、probe-rs、cargo-flash、cargo-embed、flip-link 等
- 开发时在容器外挂载工作区与 USB 设备:docker run -it --rm -v $PWD:/workspace --device=/dev/bus/usb embedded-rust-dev:latest
- 在容器内执行构建、烧录与 RTT 调试,保证环境一致性与可复现性