4 个版本
0.2.5 | 2023年1月2日 |
---|---|
0.2.4 | 2023年1月2日 |
0.2.2 | 2023年1月1日 |
0.2.1 | 2023年1月1日 |
#138 in 模拟器
660KB
16K SLoC
rvvm [WIP]
RVVM 公共 API 的安全 Rust 绑定。
提供对 RVVM 公共 API 的 Rust 风格接口。
示例
use rvvm::prelude::*;
#[type_handler(ty = "()")]
fn on_reset(dev: &Device<()>) {
println!("Reset");
}
#[type_handler(ty = "()")]
fn on_update(dev: &Device<()>) {
println!("Update");
}
#[on_remove(ty = "()")]
fn on_remove(dev: &mut Device<()>) {
println!("I'm being removed");
}
fn main() {
// Creates the RVVM instance with the 4KB of memory and 1
// hart, see `rvvm::builders::instance::InstanceBuilder`
// documentation for more detailed information or use the
// `rvvm::instance::Instance::new` for direct creation
let mut instance = Instance::builder().build();
let test_type =
DeviceType::custom("Test", on_remove, on_update, on_reset);
let test_dev = Device::builder()
.address(0x1024)
.size(1024)
.device_type(test_type)
.op_size(1..=1) // inclusive range [from; to]
.data(()) // Data for ZST types will not be allocated, but dropped
.build();
let handle: DeviceHandle<()> = instance
.try_attach_device(test_dev)
.expect("Failed to attach MMIO device");
dbg!(handle);
}
实现
-
虚拟机创建
-
RAM 读写
-
声音(在安全性方面)和设备类型安全的 API
- 完整的 API(需要重新检查)
-
扁平化的设备树库绑定
-
访问虚拟机的 FDT
-
pause
/start
/powered_on
API -
加载内核/引导程序/dtb
-
运行虚拟机的事件循环
-
PLIC/i2c
-
用户空间 API
-
DMA
-
测试
UART
设备 -
rvvm-sys 功能(如 fdt,jit 或其他)
可能遗漏了一些内容,因此列表将补充/更新。
依赖项
~0.7–3MB
~60K SLoC