嵌入式Rust:学习工具链

更新时间: 2024-08-06 10:43:08来源: 粤嵌教育浏览量:1142


了解Rust工具链以及作为嵌入式软件开发人员在嵌入式目标上使用Rust需要什么是很重要的。在本中,我们将探索Rust的工具链和生态系统,以帮助了解它如何提高生产力、确保安全和简化开发过程。

 

Rust工具链简介

Rust工具链包含各种各样的工具,可用于构建、测试、格式化等等。然而,在工具链的根部只有几个工具,可以在下图中进行总结:



1Rust工具链概述

 

Rustup

rustup.rs工具是一个用于管理Rust工具链和相关组件的命令行工具。它提供了一种简单的方法来安装、更新和管理Rust编程语言及其工具的多个版本。如果你想安装Rust,你可以从访问Rust-lang.org网站开始,并按照操作系统的说明进行操作。

 

Rustc

作为标准安装的一部分安装的另一个工具是rustcrustcRust编程语言的官方编译器。它把你的Rust源代码编译成可执行的二进制文件。例如,可以使用以下命令编译一个main.rs文件:

rustc main.rs

或者,由于我们对嵌入式软件感兴趣,可以使用如下命令:

rustc–target = thumb v7m-none-eabi main . RS

结果是代码被编译并生成一个二进制文件,该文件可以直接在PC上执行,也可以闪存到的嵌入式目标上。

 

Cargo

但是在很多情况下,我们并不直接使用rustc。相反,我们使用Rust工具CargoCargoRust构建工具和包管理器。它内置了多种构建类型,例如:

构建编译的项目

运行——执行项目(并在需要时构建)

测试运行的单元测试

文档生成的文档

publish——的板条箱发布到crate.io,它托管所有可用于Rust的库。

CargoCargo.toml配置文件中查找关于项目依赖项的信息。例如,如果正在为Arm Cortex-M处理器编写一个应用程序,可能会有如下所示的依赖关系:



这些依赖项中的每一个都是一个库箱。一般来说,一个crate是一个编译单元,充当Rust代码的基本构建块。它可以是一个库或二进制箱。库箱通常有一个lib.rs文件,而二进制箱有一个main.rs文件。这有时会令人困惑,因为单个文件(*.rs)被认为是板条箱,即使发布的多个文件可以组成一个板条箱。

如果创建了一个有用的crate可以将它们发布到crate.io,供其他开发人员使用。他们使用Cargo.toml文件来指定他们希望在应用程序中使用的板条箱名称和版本。

 

嵌入Rust的附加工具

Rust附加的基本工具非常适合开发应用程序,但如果想编写嵌入式Rust应用程序,它们并不是需要的全部。还需要包括一些额外的内容,如下所示:

l Cargo-Binutils

l LLVM工具

l Cargo-generate

l GNU Arm交叉编译工具

交叉编译的Rust目标

 

Cargo BinutilsCargo子命令的集合,它使Rust工具链附带的LLVM工具易于使用。这些工具包括objdumpnmsizeLLVM版本,用于检查二进制文件。这些工具对于理解嵌入式应用程序的大小和检查交叉编译器生成的指令非常有用。

 

LLVM工具是模块化和可重用的编译器和工具链技术的集合。

 

Cargo-Generate是一个开发工具,通过利用预先存在的git存储库作为模板,帮助快速启动并运行一个新的Rust项目。有一个针对Cortex-M处理器的快速入门示例,通常用于启动和运行嵌入式项目。

 

GNU Arm工具链是一个用于ARM Cortex-M处理器的交叉编译工具链。它包括GCC编译器和其他必要的工具,为基于ARM的微控制器编译代码。如果是嵌入式开发人员,可能已经对这些很熟悉了。

 

用于交叉编译的Rust目标指的是特定的编译配置,其允许Rust代码被编译用于不同的架构和平台,而不是代码被编译的平台。例如,如果我想针对Cortex-M33处理器进行编译,我可以使用以下命令将目标添加到工具链中:

 

rustup target add thumbv8m.main-none-eabihf

 

有了这些工具,你就能像使用CC++一样开发嵌入式Rust代码。

 

结论

Rust工具链和生态系统是独一无二的,因为它们将开发Rust应用程序所需的一切打包在一起。社区开发包和工具,而在C/C++中,你依赖供应商或公司为你提供工具。例如,如果想要测试的代码,必须找到一个测试工具。每个嵌入式团队都有自己的偏好,使用不同的。对于Rust可以使用Rust内置的货物测试工具。


免费预约试听课