在嵌入式 `Linux` 上运行 `RUST`
在嵌入式 Linux
上运行 RUST
最近在开发 zynq
相关的产品,想使用 rust
来开发应用程序;所以研究了一下如何在 pc
上进行 rust
的交叉编译。
本人用的是 zynq
的 7035 芯片,里面包含两个 cortex-A7
的处理器。
shell
$ cat /proc/cpuinfo
processor : 0
model name : ARMv7 Processor rev 0 (v7l)
BogoMIPS : 383.33
Features : half thumb fastmult vfp edsp neon vfpv3 tls vfpd32
CPU implementer : 0x41
CPU architecture: 7
CPU variant : 0x3
CPU part : 0xc09
CPU revision : 0
processor : 1
model name : ARMv7 Processor rev 0 (v7l)
BogoMIPS : 383.33
Features : half thumb fastmult vfp edsp neon vfpv3 tls vfpd32
CPU implementer : 0x41
CPU architecture: 7
CPU variant : 0x3
CPU part : 0xc09
CPU revision : 0
Hardware : Xilinx Zynq Platform
Revision : 0003
Serial : 0000000000000000
构造交叉编译的 RUST
环境
- 查看
rust
支持的target
shell
rustup target list
- 安装需要的
target
shell
rustup target add armv7-unknown-linux-gnueabihf
- 编写配置文件
在 ~/.cargo/config.toml
中添加配置信息
shell
[target.armv7-unknown-linux-gnueabihf]
linker = "arm-linux-gnueabihf-gcc"
可以在此设置使用哪个编译器。
我设置为
zynq
的arm-xilinx-linux-gnueabi-gcc
后提示连接失败,应该是还需要设置其他的,暂时没有研究。
- 安装编译器
shell
sudo apt-get install -y libc6-armhf-cross libc6-dev-armhf-cross gcc-arm-linux-gnueabihf
编译代码
shell
cargo build --target armv7-unknown-linux-gnueabihf
其他
rust
代码虽然是静态编译,但是会使用系统的 libc
动态库。
在我将代码复制到嵌入式系统上运行后,提示找不到 libgcc_s.so.1
动态库
shell
./hello: error while loading shared libraries: libgcc_s.so.1: cannot open shared object file: No such file or directory
将 zynq
提供的资料中,找到该动态库,并复制到嵌入式系统的 /lib
文件夹下,就可以正常运行了。