游乐游手机版
首页/编程语言/文章详情

Linux系统下使用Rust进行嵌入式开发完整实战教程

时间:2026-07-24 20:51
在Linux中搭建Rust嵌入式开发环境需安装工具链、配置镜像加速及交叉编译目标。通过cortex-m-quickstart模板创建项目,配置内存布局和链接脚本。编写 ![no_std]和 ![no_main]程序,使用cargobuild构建,QEMU模拟运行或openocd烧写,gdb调试。支持HAL库和条件编译。

一、开发环境准备

在Linux系统(如Ubuntu/Debian)上搭建Rust嵌入式开发环境,需要完成以下基础配置步骤:

如何在Linux中使用Rust进行嵌入式开发

  1. 安装Rust工具链:通过rustup安装最新稳定版Rust(包含rustc编译器、Cargo包管理器),执行命令如下:
    curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
    source $HOME/.cargo/env  # 激活环境变量
    验证安装是否成功:rustc --version(显示版本号即表示安装成功)。
  2. 配置国内镜像加速(可选但强烈推荐):编辑~/.cargo/config,添加清华镜像源以提升依赖包下载速度:
    [source.crates-io]
    replace-with = 'tuna'
    [source.tuna]
    registry = "https://mirrors.tuna.tsinghua.edu.cn/git/crates.io-index"
  3. 安装嵌入式开发工具链:根据目标硬件选择合适的工具链(例如Cortex-M系列需要thumbv6m-none-eabithumbv7m-none-eabi等),并通过cargo安装相关工具:
    rustup target add thumbv7em-none-eabihf  # 示例:Cortex-M4F/F7
    cargo install cargo-binutils  # 提供cargo objcopy/objdump等命令
    rustup component add llvm-tools-preview  # 支持LLVM工具链
  4. 安装系统工具:用于编译、烧写和调试,例如build-essential(编译工具)、openocd(调试接口)、qemu-system-arm(模拟运行):
    sudo apt update && sudo apt install build-essential openocd qemu-system-arm gdb-multiarch

二、创建嵌入式项目

使用社区提供的开源模板快速生成嵌入式项目(以Cortex-M为例),避免手动配置繁杂的目录结构:

cargo generate --git https://github.com/rust-embedded/cortex-m-quickstart

按照提示输入项目名称(例如hello-embedded),生成的项目目录结构如下:

hello-embedded/
├── .cargo/          # Cargo配置目录
├── src/             # 源代码目录
│   ├── main.rs      # 主程序入口
│   └── lib.rs       # 库文件(可选)
├── Cargo.toml       # 项目配置文件
├── memory.x         # 内存布局脚本(定义Flash/RAM地址)
└── build.rs         # 构建脚本(可选,用于自定义编译流程)

三、配置项目参数

  1. 修改.cargo/config.toml:配置交叉编译目标、运行器(如QEMU)和调试工具,示例如下:
    [target.thumbv7em-none-eabihf]
    runner = "qemu-system-arm -cpu cortex-m4 -nographic -semihosting -kernel"  # 使用QEMU运行
    rustflags = ["-C", "linker=arm-none-eabi-gcc",  # 指定链接器
                 "-C", "link-arg=-Tmemory.x",       # 指定链接脚本
                ]
  2. 调整memory.x:根据目标芯片的实际Flash/RAM起始地址和大小进行修改(以STM32F103ZET6为例):
    MEMORY
    {
        FLASH : ORIGIN = 0x08000000, LENGTH = 512K  # Flash起始地址和大小
        RAM   : ORIGIN = 0x20000000, LENGTH = 64K   # RAM起始地址和大小
    }

四、编写嵌入式程序

嵌入式程序通常需要采用#![no_std](无标准库)和#![no_main](自定义入口),代码示例如下:

#![no_std]        // 不使用标准库
#![no_main]       // 自定义入口点
use panic_halt as _; // panic时停止程序(简单处理)
use cortex_m_rt::entry;  // Cortex-M运行时入口宏
use cortex_m_semihosting::hprintln; // 半主机模式打印(通过调试器)

#[entry]          // 标记入口函数
fn main() -> ! {
    hprintln!("Hello, Embedded Rust World!".as_bytes()).unwrap(); // 打印消息
    loop {}       // 无限循环(嵌入式程序通常不退出)
}

五、构建与运行

  1. 构建项目:使用cargo build编译,添加--release参数可优化代码体积与运行性能:
    cargo build --release
    编译生成的二进制文件位于target/thumbv7em-none-eabihf/release/目录下(例如hello-embedded)。
  2. 模拟运行:通过QEMU模拟执行(需提前安装QEMU):
    qemu-system-arm -cpu cortex-m4 -nographic -semihosting -kernel target/thumbv7em-none-eabihf/release/hello-embedded
    若配置正确,终端将显示`Hello, Embedded Rust World!'。
  3. 烧写到硬件:使用cargo objcopy将二进制文件转换为适合目标芯片的格式(如HEX或BIN),再通过openocd进行烧写:
    cargo objcopy --release -- -O ihex target/thumbv7em-none-eabihf/release/hello-embedded.hex  # 转换为HEX格式
    openocd -f interface/stlink.cfg -f target/stm32f1x.cfg  # 启动OpenOCD
    在另一个终端使用telnetgdb烧写HEX文件(具体命令请参考对应芯片的文档)。

六、调试方法

  1. 使用GDB调试:通过gdb-multiarch连接目标设备或模拟器,加载符号并进行调试:
    gdb-multiarch target/thumbv7em-none-eabihf/release/hello-embedded
    (gdb) target remote :3333  # 连接OpenOCD(端口需匹配)
    (gdb) load                 # 加载程序
    (gdb) continue             # 运行程序
  2. VSCode集成调试:安装cortex-debug插件,在.vscode/launch.json中配置调试参数,即可通过点击调试按钮一键启动GDB和OpenOCD。

七、进阶技巧

  • 交叉编译到其他平台:若需要编译到ARM Linux或其他架构,添加对应的目标平台(如aarch64-unknown-linux-gnu),并在~/.cargo/config.toml中配置相应的链接器(例如aarch64-linux-gnu-gcc)。
  • 使用HAL库:针对具体芯片(如STM32、RP2040),使用对应的HAL库(例如stm32f1xx-halrp2040-hal)可以大幅简化外设操作(如GPIO、UART)。
  • 条件编译:通过#[cfg(target_arch = "arm")]等属性,针对不同硬件平台编写差异化的代码逻辑。
来源:https://www.yisu.com/ask/9968610.html
上一篇Rust语言在Linux系统中的安全审计常用技巧 下一篇Linux系统下Rust编程内存泄漏检测方法及工具详解
本站内容用于信息整理与展示,如有侵权或内容问题请及时联系处理。

相关推荐

补充同频道和同主题内容,方便继续浏览更多相关内容。

同类最新

继续查看同栏目最近更新的文章。

更多
FileZilla断点续传设置与操作指南
编程语言 · 2026-07-25

FileZilla断点续传设置与操作指南

FileZilla支持断点续传,需客户端与服务器均开启REST命令。设置中确保启用断点续传及继续传输选项。中断后自动或手动从断点恢复。注意服务器支持、传输模式匹配及文件完整性校验。

Debian系统C++编译器位置查找方法
编程语言 · 2026-07-25

Debian系统C++编译器位置查找方法

在Debian系统中,通过apt安装的C++编译器g++默认位于 usr bin g++,可使用which或whereis命令验证路径。g++属于build-essential软件包,若未安装则需执行sudoaptinstallbuild-essential。该包还包含gcc、make等编译工具链,g++是GNUC++编译器,实际是符号链接指向具体版本,验证

Debian系统安装C++环境的方法
编程语言 · 2026-07-25

Debian系统安装C++环境的方法

在Debian系统安装C++开发环境:先sudoaptupdate更新包列表,再sudoaptinstallbuild-essential安装编译工具链,或单独安装g++。用g++--version验证。可选安装VSCode、GDB、CMake等工具并配置默认编译器版本。

Debian系统C++开发环境配置指南
编程语言 · 2026-07-25

Debian系统C++开发环境配置指南

在Debian系统中,先执行aptupdate更新软件包列表,再安装build-essential元包即可获得GCC、G++、Make和GDB。通过运行g++--version命令验证编译器安装成功。可选安装VisualStudioCode、CLion等编辑器及CMake构建工具,并编写一个简单的HelloWorld程序,使用g++编译运行以验证环境配置正确

通过cpustat工具查看CPU状态的具体方法与详细步骤
编程语言 · 2026-07-25

通过cpustat工具查看CPU状态的具体方法与详细步骤

cpustat是sysstat包中的CPU监控工具,可按固定间隔输出带时间戳的CPU使用率统计。安装后运行cpustat即可实时显示各核心信息,常用指标包括%usr、%sys、%iowait、%steal和%idle,用于定位用户态、内核态或I O瓶颈。高级选项-c可显示单核统计,-m可同时查看内存使用,适合脚本采集和性能分析。