2个版本
0.1.1 | 2023年8月31日 |
---|---|
0.1.0 | 2023年8月30日 |
1730 in 嵌入式开发
315KB
8K SLoC
简介
RV64emu是用Rust编写的riscv64模拟器,现在可以运行CoreMark
、RT-thread
和Linux
。并且它很容易添加新的设备和支持新的指令。RV64emu现在作为一个crate,你可以在你的项目中使用它。由于RUST的跨平台特性,它可以在Linux、Windows和MacOS上运行。即使在支持嵌入式Rust的嵌入式设备上,如ESP32
和STM32
上也能运行。
特性
指令集规范
- RV64I
- RV64M
- RV64A
- RV64C
- RV64F
- RV64D
- 机器模式
- 监控器模式
- 用户模式
- Sv39
- Sv48
- Sv57
- 内存保护单元
缓存
- 指令缓存
- 解码缓存
- 数据缓存(没有性能优化)
- 转换后备缓冲区
设备
- SifiveUart(完全支持,包括中断)
- 16550AUart(基本支持,无中断)
- SifiveClint
- SifivePlic
示例
使用rv64emu作为crate的最简单示例。您可以在examples
目录中找到它。
- simple_system:最简单的示例,只有uart和dram
- ysyx_am_system:支持AM环境,使用ebread终止模拟
- linux_system:支持Linux,您可以直接运行Linux
特性
名称 | 功能 | 注释 |
---|---|---|
device_sdl2 | 支持sdl2设备, | 如vga和键盘 |
support_am | 支持AM环境,使用ebread终止模拟 | AM github AM pdf |
caches | 支持缓存,包括指令缓存和解码缓存 | |
rv_debug_trace | 支持调试跟踪,包括itrace和ftrace | 日志文件在/tmp中 |
运行
运行抽象机应用程序
以下命令将运行 hello.bin
,这是一个位于 ready_to_run
目录中的简单应用程序。有关 ysyx_am_system
示例的详细信息,请参阅 examples/ysyx_am_system.rs
。
cargo run --release --example=ysyx_am_system --features="std device_sdl2" -- --img ready_to_run/hello.bin
除了 hello.bin
之外,ready_to_run
目录中还有其他应用程序
- hello.bin
- coremark-riscv64-nemu.bin
- nanos-lite-riscv64-nemu.bin
- rtthread.bin
上述应用程序是为 AM
环境构建的。
运行 Linux
cargo run --release --example=linux_system -- --img ready_to_run/linux.elf
自行构建 Linux 内核
有关详细信息,请参阅 rv64emu-sdk。
测试
使用 riscv-tests
进行测试
cargo riscv-tests
使用 riscof
进行测试
待办事项!
无标准支持
Rust 的一个神奇特性!您可以在支持 嵌入式 Rust 的嵌入式设备上运行 rv64emu
,例如 ESP32 和 STM32。
但在构建您的嵌入式项目之前,您需要禁用一些功能,例如 device_sdl2,
rv_debug_trace
。
-
device_sdl2:因为嵌入式设备不支持 sdl2,并且一些设备(如 vga 和键盘)基于 sdl2。
-
rv_debug_trace:因为它使用了
crossbeam-channel
包,该包不支持no_std
。此外,嵌入式设备不支持文件系统,日志文件太大,无法存储。 -
caches:因为嵌入式设备没有足够的内存
无标准示例
- nostd_esp32s3:关于如何在 esp32s3 中使用 rv64emu 的无标准示例。
参考
依赖项
~2–11MB
~263K SLoC