说明
现在很多项目都在从 C++/C 迁移到 Rust, 这是一种内存管理更安全的语言, 从根本上可以防止一些指针操作的问题
既然如此, 那我们也尝试一下如何在嵌入式开发当中使用Rust, 然后再慢慢迁移到更多代码
https://doc.rust-lang.org/reference/introduction.html
https://zhuanlan.zhihu.com/p/628575325
https://www.rust-lang.org/what/embedded
https://docs.rust-embedded.org/book/ => https://xxchang.github.io/book/
安装
- 安装rustup
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
PC X86编译
-
fn main() {
println!("Hello, world!");
} -
编译代码
rustc main.rs
-
执行代码
./main
Hello, world!
这个过程与gcc一致
嵌入式裸编译
-
在设备上验证
source build/envsetup.sh
rustc --target arm-unknown-linux-gnueabihf main.rs -C linker=arm-ca53-linux-gnueabihf-gccroot@NVTEVM:/bin$ ./main
Hello, world! -
在RV1106上面
uclibc 不支持的原因, 暂时未知如何处理
Cargo脚本编译
https://doc.rust-lang.org/cargo/reference/config.html
创建工程
cargo new cargoprj
cd cargoprj
配置文件
Cargo.toml
[package]
name = "cargoprj"
version = "0.1.0"
edition = "2021"
[dependencies]
生成X86
cargo build
target/debug/cargoprj
修改配置支持嵌入式编译
增加配置文件.cargo/config.toml指定target和linker
$ cat .cargo/config.toml
[build]
target = "arm-unknown-linux-gnueabihf"
[target.arm-unknown-linux-gnueabihf]
linker = "arm-ca53-linux-gnueabihf-gcc"
$cargo build
生成
target/arm-unknown-linux-gnueabihf/debug/cargoprj
嵌入式cmake集成
TODO:
常用命令
当前安装的rust版本, 支持的target
rustup show
列出所有支持的target
rustup target list
安装需要的平台
rustup target add arm-unknown-linux-gnueabihf
问题
-
RV1106的uclibc不支持
$ rustup target add armv7-unknown-linux-uclibceabi
error: toolchain 'stable-x86_64-unknown-linux-gnu' does not support target 'armv7-unknown-linux-uclibceabi'
note: you can see a list of supported targets withrustc --print=target-list
note: if you are adding support for a new target to rustc itself, see https://rustc-dev-guide.rust-lang.org/building/new-target.html