0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

Rust构建QEMU插件的框架

jf_wN0SrCdH 来源:Rust语言中文社区 2023-07-21 16:57 次阅读

Cannonball Rust 构建的 QEMU 插件的框架


Cannonball 是一个用 Rust 构建 QEMU 插件的框架!您可以在 C 语言的 QEMU TCG 插件中执行的任何操作,都可以使用cannonball。编写以最小的开销和尽可能多的功能运行的插件!


例子


这里提供了几个例子!

  • jaivana

一个简单的跟踪器,将一组可配置的事件记录到文件或标准输出中。

  • mons meg


一个跟踪器,记录与 Jaivana 相同的事件,但使用 Tokio 在异步环境中运行跟踪,通过 UNIX 套接字而不是匿名管道与主机进行通信。 看看它们,它们是学习如何使用这个框架的最佳方式。


安装


安装 只需将其添加到您的 Cargo.toml:


	

cannonball = "0.2.4"

J
aivana 的演示例子:https://github.com/novafacing/cannonball/tree/main/examples/jaivana

kiddb 基于 Rust 的嵌入式存储引擎


整体设计参考LevelDB,旨在作为NewSQL数据库的存储引擎

  • 支持嵌入式/单机存储/远程调用等多应用场景

  • 以Kiss作为开发理念,设计以简单而高效为主导

  • 实现MVCC以支持ACID

  • 性能,BenchMark 读取吞吐量约为 Sled 的两倍,且大数据量下的读取顺序平均延迟为 1μs 左右

  • 远程连接使用ProtoBuf实现,支持多语言通信

  • 极小内存占用(占用/大量冷数据)

  • 安全读取

组件引入


	

kip_db = "0.1.1-alpha.0"

代码

代码编译


	

cargo build

代码编译(正式环境)


	

cargo build --release

单元测试


	

cargo test

性能基准测试


	

cargo bench

Docker镜像编译

编译镜像


	

docker build -t kould/kip-db:v1 .

运行镜像


	

docker run kould/kip-db:v1


直接调用(基本使用)


	

/// 指定文件夹以开启一个KvStore let kip_db = LsmStore::open("/welcome/kip_db").await?; // 插入数据 kip_db.set(&b"https://github.com/KKould/KipDB", Bytes::from(&b"your star plz"[..])).await?; // 获取数据 let six_pence = kip_db.get(&b"my deposit").await?; // 已占有硬盘大小 let just_lot = kip_db.size_of_disk().await? // 已有数据数量 let how_many_times_you_inserted = kip_db.len().await?; // 删除数据 kip_db.remove(&b"ex girlfriend").await?; // 创建事务 let mut transaction = kip_db.new_transaction().await?; // 插入数据至事务中 transaction.set(&b"this moment", Bytes::from(&b"hope u like it"[..])); // 删除该事务中key对应的value transaction.remove(&b"trouble")?; // 获取此事务中key对应的value let ping_cap = transaction.get(&b"dream job")?; // 提交事务 transaction.commit().await?; // 创建持久化数据迭代器 let guard = kip_db.iter().await?; let mut iterator = guard.iter()?; // 获取下一个元素 let hello = iterator.next_err()?; // 移动至第一个元素 let world = iterator.seek(Seek::Last)?; // 强制数据刷入硬盘 kip_db.flush().await?;


审核编辑:汤梓红

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 插件
    +关注

    关注

    0

    文章

    323

    浏览量

    22415
  • Docker
    +关注

    关注

    0

    文章

    456

    浏览量

    11825
  • qemu
    +关注

    关注

    0

    文章

    57

    浏览量

    5339
  • Rust
    +关注

    关注

    1

    文章

    228

    浏览量

    6581

原文标题:【Rust日报】2023-07-19 Cannonball -- Rust 构建的 QEMU 插件的框架

文章出处:【微信号:Rust语言中文社区,微信公众号:Rust语言中文社区】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    Rust GUI实践之Rust-Qt模块

    Rust-Qt 是 Rust 语言的一个 Qt 绑定库,它允许 Rust 开发者使用 Qt 框架来创建跨平台的图形界面应用程序。Qt 是一个跨平台的应用程序
    的头像 发表于 09-30 16:43 1555次阅读

    框架插件结构

    这里说的框架插件结构是指程序启动时或运行中,去查看硬盘某个路径下,有哪些插件模块,然后把它们调用起来的这样一种程序结构。LabVIEW中实现这样的程序机构有两种方法,一是利用LabVIEW Scripting中动的态调用VI,二
    发表于 11-14 15:43

    只会用Python?教你在树莓派上开始使用Rust

    构建所有脚本,但是您还需要代码编辑器。在这个项目中,我将使用Code-OSS,这是VS Code的社区版本,您可以在Pi上安装它,但这不是必需的。任何代码编辑器都可以。创建Rust项目要创建Rust
    发表于 05-20 08:00

    QEMU简介

    目录2.1 QEMU2.1.1 创建非标准的Rust程序2.1.2 代码简介2.1.3 交叉编译2.1.4 二进制文件分析工具2.1.5 运行2.1.6调试在本节中,我们将引导您完成编写,构建,刷新
    发表于 12-16 07:18

    RUST在嵌入式开发中的应用是什么

    Rust是一种编程语言,它使用户能够构建可靠、高效的软件,尤其是用于嵌入式开发的软件。它的特点是:高性能:Rust具有惊人的速度和高内存利用率。可靠性:在编译过程中可以消除内存错误。生产效率:优秀
    发表于 12-24 08:34

    如何利用C语言去调用rust静态库呢

    qemu-vexpress-a9这个bsp做为我们的目标平台。这样不用开发板就可以测试了。先要安装目标环境,可以参考这个链接:Rust 嵌入式开发 STM32 和 RISC-Vrustup target
    发表于 06-21 10:27

    在Windows平台使用Eclipse调试RT-Thread qemu-vexpress-a9 BSP工程

    和 Python 等开发工具。Eclipse 的本身只是一个框架平台,但是众多插件的支持使得 Eclipse 拥有其他功能相对固定的 IDE 软件很难具有的灵活性。本文主要介绍在 Windows 平台
    发表于 10-26 15:31

    Dockerfile构建环境报错如何解决?

    版本,不是更高版本。作为参考,这里是构建配置输出。 谁能帮我理解为什么 rust-llvm 会出现这个错误?我是否需要手动更新 poky 存储库以使用更新版本的 rust-llvm?
    发表于 04-11 06:17

    Rust代码中加载静态库时,出现错误 ` rust-lld: error: undefined symbol: malloc `怎么解决?

    我正在 MCUXpresso IDE 中创建一个静态库。我正在使用 redlib 在我的代码中导入 ` [i]stdlib.h`。它成功地构建了一个静态库。但是,静态库中未定义一些标准库函数,例如
    发表于 06-09 08:44

    嵌入式编程中为什么使用qemuqemu的实际应用

    qemu实际好用的应用来进行详细的描述。 2.嵌入式的裸机或RTOS编程 qemu的是指令翻译进行的,所以可以根据实际的需求进行相应的裸机开发和学习,比如语言学习,嵌入式C语言,嵌入式RUST语言,等等
    发表于 08-16 06:44

    KICAD插件使用说明书

    KiCad 插件系统是⼀个使⽤共享库扩展 KiCad 功能的框架。 使⽤插件的⼀个主要优点是在开发插件时没有必要重建KiCad 套件; 事实上,可以借助 KiCad 源代码树中的⼀⼩组
    发表于 02-25 11:58 8次下载

    Rust重写的LSP:KCL IDE 插件的功能介绍与设计解析

    在这次更新中,我们发布了全新的 KCL VS Code 插件,并且用 Rust 重写了 LSP 的 Server 端。我们提供了 IDE 中常用的代码辅助功能,如高亮、跳转、补全、Outline、悬停、错误提示等。
    的头像 发表于 05-11 09:39 948次阅读
    <b class='flag-5'>Rust</b>重写的LSP:KCL IDE <b class='flag-5'>插件</b>的功能介绍与设计解析

    Rust UI框架:Slint UI简单入门

    Slint 曾经被称为 SixtyFPS,特点是既快又小,是一个 Rust 编写的综合性 UI 工具包,用于为桌面和嵌入式设备构建原生用户界面。其开发团队希望将 Slint 打造成下一代 GUI 工具包,因此从头开始构建项目时就
    的头像 发表于 05-12 16:03 1.5w次阅读
    <b class='flag-5'>Rust</b> UI<b class='flag-5'>框架</b>:Slint UI简单入门

    JetBrains发布独立Rust IDE:RustRover

    在推出 RustRover 之前,JetBrains 以插件形式在 IntelliJ IDEA 和 CLion 中支持 Rust 功能。现在他们开发多年的开源插件已成为 RustRover 的基础。此
    的头像 发表于 09-18 16:47 1031次阅读
    JetBrains发布独立<b class='flag-5'>Rust</b> IDE:RustRover

    [鸿蒙]OpenHarmony4.0的Rust开发

    背景 Rust 是一门静态强类型语言,具有更安全的内存管理、更好的运行性能、原生支持多线程开发等优势。Rust 官方也使用 Cargo 工具来专门为 Rust 代码创建工程和构建编译
    的头像 发表于 02-26 17:28 827次阅读
    [鸿蒙]OpenHarmony4.0的<b class='flag-5'>Rust</b>开发