×

在ARM处理器上运行Rust

消耗积分:2 | 格式:zip | 大小:0.00 MB | 2023-06-13

h1654155275.3239

分享资料个

描述

在 Fibocom NL668-LA 模块上运行的 Rust 程序的简单“Hello World”示例。涵盖 Rust 语言交叉编译的基本概念。

一、简介

本文所述,可以将您的应用程序嵌入到 Fibocom 的 NL668 CAT4 模块中,该模块运行基于 Linux 的操作系统,称为 OpenLinux。正如您现在可能看到的那样,Rust 正在成为最流行的语言之一,并有望成为 C 和 C++ 语言的继任者。

2.依赖关系

  • NL668-LA模块(或任何其他广和通模块)
  • 海湾合作委员会
  • Linux操作系统(可以是虚拟机或WSL)
  • VS代码
  • ADB(安卓调试桥)

3.安装软件依赖

让我们说明安装所有软件要求......

3.1 铁锈

- 首先必须安装 Rust 和 Cargo,如果没有,如rust 官方页面中所述,可以运行以下命令来完成:

$ curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh

然后运行完成后:

$ rustc --version && cargo --version

如果 Rust 安装成功,结果将类似于:

pYYBAGPXI_SAU0PoAAAfoEIWLTs996.png
打印 rustc 和 cargo 版本
 

Rustc是官方的 Rust 编译器,而Cargo是官方的 Rust 构建工具和包管理器。

3.2 Armv7l 的目标

Rust 有许多目标架构的平台支持,其中之一是 armv7-unknown-linux-gnueabi,NL668 的平台。

要安装目标包运行:

$ rustup target add armv7-unknown-linux-gnueabi

注意:要查看所有可用的架构类型:

$ rustc --print target-list

3.3 安装链接器

Rust 中用于 mdm9607 处理器的链接器与用于的链接器相同,gcc-arm-linux-gnueabi所以让我们安装它!对于基于 Debian 的发行版运行:

$ sudo apt install gcc-arm-linux-gnueabi

如果运行时安装成功:

$ arm-linux-gnueabi-gcc --version

结果将类似于:

pYYBAGPXI_aAZyDgAABHCegw3Es934.png
arm-gcc 的输出
 

3.4 ADB(安卓设备桥)

ADB(Android Debug Interface)是一个用于与模块通信的工具。在大多数情况下,ADB 用于 Android 开发。

该工具能够向设备发送命令、上传文件并提供对 Linux shell 的访问。

3.4.1 对于 Linux

要在基于 Debian 的Linux 发行版中安装 ADB,请运行:

$ sudo apt-get update
$ sudo apt-get install adb

要启用驱动程序权限,请遵循Victor 文章的第 3.4.3 节

3.4.2 对于(Windows WSL)

对于 Windows WSL,可以按照Victor 文章的这一部分中的说明安装以下内容

3.4.3 在 Windows 上从 WSL 使用 ADB

如果你不喜欢在 Powershell 和 Bash 之间切换,可以直接从你的 bash 终端使用 WSL 创建一个符号链接到你在 windows 目录中的可执行文件,如果你将 ADB 安装在C:/platform-tools文件夹上,命令将是:

$ sudo ln -s /mnt/c/platform-tools/adb.exe /usr/bin/adb

WARN:使用此技术,不建议使用microcom访问/dev/smd7ADB内部的AT-Commands终端(),因为AT命令中的移动网络可能无法正常工作。(我是根据经验说的)。

4. 项目

4.1 创建项目

要开始一个新项目运行:

$ cargo new cross-arm

此命令将创建一个新文件夹,其中包含一个 cargo 项目。让我们来看看。

$ cd cross-arm
$ ls -a
poYBAGPXI_iAQiO2AAAaLEuhKPE075.png
 

默认情况下,该cargo new命令会创建一个文件结构,其中包含一些文件和文件夹,让我们了解它们:

  • .git - 默认情况下,cargo 会为你的项目初始化一个 git 仓库。如果你熟悉 git,你就会知道这个文件夹是你项目中 git 存储更改的地方。
  • .gitignore - 此文件夹包含应忽略哪些文件或目录的信息。默认情况下,它仅忽略目标文件夹。
  • Cargo.toml - 在此文件中,您指定您的依赖项和您以后可能在项目中使用的包(包就像 C/C++ 中的库)。
  • Cargo.lock - 你不应该编辑这个文件,它是一个自动生成的货物文件,使用映射你的依赖关系的 cargo.toml 上的信息。
  • src - 这是您的 main.rs 文件所在的位置,您可能创建的其他源文件也将保留。
  • target - 此文件夹是您编译的二进制文件所在的位置。

默认情况下,在src文件夹中,cargo 已经创建了一个带有“Hello World”示例的main.rs :

pYYBAGPXI_uAKGlKAAAe3R4fF94787.png
 

4.2 安装目标

要进行交叉编译,您必须安装所需的目标。在我们的例子中,我们将安装armv7-unknown-linux-gnueabi:

$ rustup target add armv7-unknown-linux-gnueabi

要验证目标是否已正确安装:

$ rustup target list --installed
poYBAGPXI_2Ae3F3AAAX7AMPbLw029.png
安装目标
 

4.3 指定链接器

现在是时候为 arm-gcc 目标指定链接器了。它可以仅针对该项目在本地完成,也可以进行全局配置。

要在本地指定,请在项目文件夹内创建一个.cargo 文件夹并在其中创建一个config.toml文件:

$ mkdir .cargo
$ cd .cargo
$ touch config.toml

编辑 config.toml 文件插入:

[target.armv7-unknown-linux-gnueabi]
linker = "arm-linux-gnueabi-gcc"

如果您希望对任何其他项目进行全局更改,请在 ~/.cargo/config.toml文件中插入这些相同的两行。OBS:如果它不存在,您可以创建它。

5.静态编译

另一件重要的事情是对您的项目进行静态编译,不要依赖任何其他共享库。可以在您的 .cargo/config.toml 中添加以下行:

rustflags = ["-C", "target-feature=+crt-static"]

6.跑步

现在,编译你的项目运行:

$ cargo build --target armv7-unknown-linux-gnueabi
pYYBAGPXJACAQJ6yAAAxZ8xEQBY691.png
建筑输出
 

您编译的二进制文件将在里面target/armv7-unknown-linux-gnueabi/debug/

Let's推送到 NL668 并运行:

$ cd target/armv7-unknown-linux-gnueabi/debug/
$ adb push cross-arm /data
$ adb shell
# cd /data
# chmod +x cross-arm
# ./cross-arm
pYYBAGPXJAKAUW7cAAAxLgd_QvE674.png
使用 ADB 推送到模块
 
poYBAGPXJASAR_79AAAQNa77ky4065.png
亚行外壳内部
 

完成了!恭喜,您已经在 NL668 Fibocom 模块上创建了第一个 Rust 应用程序。接下来的步骤是尝试一些 crate 来访问一些其他硬件资源,如串行端口等。

玩得开心,再见!


声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

评论(0)
发评论

下载排行榜

全部0条评论

快来发表一下你的评论吧 !