#嵌入式设备 #RISC-V #模拟器 #日志文件 #无标准库

无标准库 rv64emu

用Rust编写的riscv64模拟器,可在Linux、Windows和MacOS上运行。即使在支持嵌入式Rust的嵌入式设备上,如ESP32STM32上也能运行。

2个版本

0.1.1 2023年8月31日
0.1.0 2023年8月30日

1730 in 嵌入式开发

MIT许可证

315KB
8K SLoC

简介

run_linux

RV64emu是用Rust编写的riscv64模拟器,现在可以运行CoreMarkRT-threadLinux。并且它很容易添加新的设备和支持新的指令。RV64emu现在作为一个crate,你可以在你的项目中使用它。由于RUST的跨平台特性,它可以在Linux、Windows和MacOS上运行。即使在支持嵌入式Rust的嵌入式设备上,如ESP32STM32上也能运行。

特性

指令集规范

  • 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_sdl2rv_debug_trace

  • device_sdl2:因为嵌入式设备不支持 sdl2,并且一些设备(如 vga 和键盘)基于 sdl2。

  • rv_debug_trace:因为它使用了 crossbeam-channel 包,该包不支持 no_std。此外,嵌入式设备不支持文件系统,日志文件太大,无法存储。

  • caches:因为嵌入式设备没有足够的内存

无标准示例

  • nostd_esp32s3:关于如何在 esp32s3 中使用 rv64emu 的无标准示例。

参考

依赖项

~2–11MB
~263K SLoC