使用新兴编程语言Rust开发RISCV裸机编程
目录
Rust语言的运行效率高、开发效率好、适用范围广。作为一门编译型语言,它直接编译输出到汇编代码,通常公认裸机的Rust语言性能在C语言级别,拥有较高的运行效率。Rust语言的开发效率很高,文档完善、编译器提示有帮助,能节省软件开发所需的时间。它能应用在多个平台和指令集中,这包括裸机平台;处理核、操作系统厂家还可以提供自己的编译目标,无需厂家自己重新开发、提供工具链。
本着学习至上的精神,开始学习,并在开发板上编写并运行了最简单的Rust程序代码;
按照rust官网安装指南,使用rustup方式安装即可。网上有详细的步骤过程,我在三套系统环境里都实现rust开发环境的搭建,分别是windows原生、windows-msys2、WSL2(Windows下的linux子系统);
从rust官网安装太慢的话,可以用中科大或者清华大学的rustup源,网上也有很多参考信息,不再赘叙。
按照如下命令添加riscv64-unknown-none-elf的target,
rustup target list
rustup target add riscv64gc-unknown-none-elf
Set PATH=%PATH%;%PATH_TO_RISCV64-UNKNOWN-ELF-GCC%
cargo install cargo-binutils
rustup component add llvm-tools-preview
cargo install cargo-generate
其中PATH_TO_RISCV64-UNKNOWN-ELF-GCC是系统安装的编译riscv64-unknown-elf-gcc的目录路径,在linux或者msys2系统中,则改为export PATH=$PATH:$PATH_TO_RISCV64-UNKNOWN-ELF-GCC
从模板中下载构建最简单的rust程序,
cargo generate --git https://github.com/riscv-rust/riscv-rust-quickstart
然后修改如下文件:
src/main.rs
#![no_std]
#![no_main]
extern crate panic_halt;
// use hifive1::hal::prelude::*;
// use hifive1::hal::DeviceResources;
use riscv_rt::entry;
#[entry]
fn main() -> ! {
loop {}
}
cargo/config
[target.riscv64gc-unknown-none-elf]
runner = "riscv64-unknown-elf-gdb -q -x gdb_init"
rustflags = [
"-C", "link-arg=-Tmemory.x",
"-C", "link-arg=-Tlink.x",
]
[build]
target = "riscv64gc-unknown-none-elf"
memory.x
MEMORY
{
/* NOTE 1 K = 1 KiBi = 1024 bytes */
/* TODO Adjust these memory regions to match your device memory layout */
/* These values correspond to the LM3S6965, one of the few devices QEMU can emulate */
FLASH : ORIGIN = 0x00020000, LENGTH = 32K
RAM : ORIGIN = 0x00028000, LENGTH = 64K
}
REGION_ALIAS("REGION_TEXT", FLASH);
REGION_ALIAS("REGION_RODATA", FLASH);
REGION_ALIAS("REGION_DATA", RAM);
REGION_ALIAS("REGION_BSS", RAM);
REGION_ALIAS("REGION_HEAP", RAM);
REGION_ALIAS("REGION_STACK", RAM);
gdb_init
set history save on
set confirm off
set remotetimeout 240
# 修改为T-Head DebugServer的gdb端口号:
target extended-remote :1025
set print asm-demangle on
monitor reset halt
load
continue
# quit
输入以下命令,即可完成编译、调试、下载和运行;
cargo build
cargo run
下面三个图分别是在windows、msys2、WSL2-Ubuntu-20.04三个系统上的手动调试的过程截图:
不过貌似学习路径应该是先在电脑上学习Rust语法和程序结构,熟悉之后再慢慢渗透到嵌入式编程领域,我这样贸然直接在RISCV芯片上动手写Rust裸机代码,步子跨得有点大,连LED-Blinky点灯程序或者UART输出“HelloWorld”都有点困难;
全志的这颗RISCV64芯片,是这段时间最便宜实惠的RISCV64架构能运行Linux系统的SoC,然后网上有很多利用D1芯片做教学,如“挪威科技大学使用全志D1哪吒开发板开设操作系统课程”,公开课件——Porting the xv6 OS to the Nezha D1 RISC-V Board.pdf;
奋勇而上,得慢慢来,一步一个脚印学习,实现最终目的——将清华大学计算机系本科操作系统课程的rCore移植到D1上;
本帖最后由 mars4zhu 于 2022-4-20 16:29 编辑
引用: soso 发表于 2022-4-20 10:38 图文啥时补充呀:)
补充好了,帮我审核一下啊。
引用: freebsder 发表于 2022-4-20 18:44 这个要支持,现在rust风头好像挺猛。
我也是最近才发现的。