温馨提示×

Rust在Debian上的嵌入式系统编程

小樊
31
2026-01-01 16:18:12
栏目: 编程语言

在 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 调试,保证环境一致性与可复现性

0