Qemu作为一款开源的虚拟机,我们可以很容易的获取源码,并且有时我们希望能修改源码添加一些特性。但是为了保证稳定和可靠性,我们可以添加新命令来封装自定义的这些特性。(指qemu monitor中命令)

查了一些资料,发现Qemu还有HMP和QMP命令之分,这些我都没有详细考证,我只是修改了添加了HMP命令。不同版本的qemu可能需要修改的文件不同,我进行过0.12.5和1.5.3这两个版本的修改,后面将针对这两个版本分别介绍。(NOTE:看资料还有在hmp.h添加命令要调用函数的声明,但是我在savevm.c这个文件里添加的新函数,并没有在hmp.c中添加声明,我发现在monitor.c文件中定义的函数可以不用另行声明,而其他文件中的命令直接调用函数很多都在.h文件中声明,并且monitor.c文件添加了这个.h文件的引用。所以我大胆假设,命令调用的函数要么在monitor.c文件中定义,要么就需要在某个.h文件中声明并将这个.h文件#include在monitor.c里面。没有验证这个假设是否正确,有时间可以验证一下。如果添加失败这里是一个注意点,本人参考资料链接如下:引用)。

Qemu 0.12.5:

1.修改qemu-monitor.hx文件

可以仿照原有的命令格式进行添加,比如我仿照savevm命令,原savevm命令格式如下:

ETEXI{.name       = "savevm",.args_type  = "name:s?",.params     = "[tag|id]",.help       = "save a VM snapshot. If no tag or id are provided, a new snapshot is created",.mhandler.cmd = do_savevm,},STEXI
@item savevm [@var{tag}|@var{id}]
Create a snapshot of the whole virtual machine. If @var{tag} is
provided, it is used as human readable identifier. If there is already
a snapshot with the same tag or ID, it is replaced. More info at
@ref{vm_snapshots}.

这其中,.name对应命令名称,.params对应参数,.help对应着该条命令的功能提示,.mhandle.cmd对应函数名,ETEXI与STEXI之外内容是命令的一些说明。

这时我自己添加一个打印“hello  world!”的命令,如下:

ETEXI{.name       = "hello",.args_type  = "",.params     = "",.help       = "print hello world",.mhandler.cmd = print_hello,},STEXI
@item hello
Print hello world 

2.在monitor.c中直接定义函数(或者先.h中声明再定义并在monitor.c中#include)

void print_hello(Monitor *mon, const QDict *qdict){  printf("hello world!\n");
} 

现在重新编译Qemu应该就可以了。

Qemu 1.5.3:
修改流程同0.12.5版本,唯一不同的地方就是修改的文件不是qemu-monitor.hx,而是hmp-commands.hx文件,其他的完全相同。

Qemu中添加自定义命令相关推荐

  1. 如何在U-Boot中添加自定义命令

    如何在U-Boot中添加自定义命令 1.U-boot命令机制 2.实现步骤 博主热门文章推荐: 1.U-boot命令机制 U-boot中每个命令都使用一个struct cmd_tbl_t定义,该定义在 ...

  2. u-boot中添加自定义命令

    1.u-boot命令机制 u-boot中,每个命令都使用一个struct cmd_tbl_s结构体定义,该定义在include/command.h中实现: struct cmd_tbl_s{ char ...

  3. 如何用vba在单元格右键快捷菜单中添加自定义的菜单命令

    如下图所示,当鼠标右键单击excel工作表中的单元格时,将会弹出单元格右键快捷菜单. 虽然从excel 2007开始 微软引进了ribbon 功能区来代替excel 常规菜单栏,但是像上图所示的鼠标右 ...

  4. 中的 隐藏鼠标菜单_如何在鼠标右键菜单中添加自定义菜单?工效率提升一倍...

    人都是"懒"的,在使用电脑时,对于常用的操作,步骤太多用久了难免会产生烦躁的情绪,虽然系统已经自带了很多快捷方式,但还是不够用,我们通常都会把常用的东西通过快捷方式来添加到桌面,但 ...

  5. Exynos4412 Uboot 移植(三)—— Uboot添加自定义命令

    Uboot添加自定义命令:uboot中的命令使用U_BOOT_CMD这个宏声明来注册进系统,链接脚本会把所有的cmd_tbl_t结构体放在相邻的地方. UBoot版本:u-boot-2013.01 一 ...

  6. 如何在鼠标右键菜单中添加自定义菜单?工效率提升一倍

    人都是"懒"的,在使用电脑时,对于常用的操作,步骤太多用久了难免会产生烦躁的情绪,虽然系统已经自带了很多快捷方式,但还是不够用,我们通常都会把常用的东西通过快捷方式来添加到桌面,但 ...

  7. 在 Visual Studio Code 中添加自定义的代码片段

    无论是那个编辑器,如果能够添加一些自定义代码片段,能够大大提升代码的输入效率. 本文介绍如何在 Visual Studio Code 中添加自定义代码片段. 本文内容 Visual Studio Co ...

  8. Monaco Editor教程(八): 实现添加自定义命令,添加自定义菜单action功能

    背景 在monaco编辑器中已经有了很多指令,这些指令极大地方便了我们的编辑工作,比如用于查询的Ctrl+F 有时为了满足业务的需要我们需要自己添加一些指令,比如在按下End键,弹出提示编辑器的一些统 ...

  9. 在qemu中添加swap分区

    背景:想了解一下hibernate的机制的,但使用的时候报错 PM: Cannot find swap device, try swapon -a PM: Cannot get swap writer ...

最新文章

  1. 想详细了解风头正劲的联邦学习吗?这篇最强综述论文满足你
  2. python 报错 AttributeError: type object ‘datetime.datetime‘ has no attribute ‘datetime‘
  3. 最大矩阵(简单DP)
  4. 悬镜 linux防黑加固平台,悬镜答疑丨悬镜服务器防护CC效果如何?
  5. python 只能将最后一行写入excel_Python 应用 办公自动化之 Excel(上)
  6. 一份北大信科内部流传的 “CS 自救指南”
  7. Anaconda下如何创建python2等虚拟环境
  8. 贝叶斯思维 统计建模的python_贝叶斯思维统计建模的Python学习法
  9. 基于JAVA+SpringMVC+Mybatis+MYSQL的粮店粮食库存管理系统
  10. VUE使用Stylus插件
  11. POJ 2955 Brackets(区间DP)
  12. html的经典语法大全,HTML语法大全
  13. 安卓使用Root权限实现后台模拟全局按键、触屏事件方法(类似按键精灵)
  14. 宿舍管理系统(简单版)
  15. windows中家庭网络、工作网络、公用网络的作用及区别
  16. 六西格玛黑带考试试题|优思学院
  17. 计算机应用与基础教学计划,计算机应用基础教学计划完整版.docx
  18. 《读书是一辈子的事》中篇 了解未来
  19. 特性(Attributes)
  20. 点到超平面的距离公式

热门文章

  1. mac电脑安装python_mac电脑怎么安装python
  2. ​你需要知道的5个Python技巧
  3. 分布式系统之Raft算法
  4. 数据库里账号的密码,怎样存放更加安全?
  5. 1361:对角线的数量
  6. 金蝶云星空与奇门WMS-A对接集成盘亏单查询打通出库单创建
  7. Vue实现计算商品总价简单案例
  8. 常见数据库中文拼音排序及排序对空值的处理
  9. 弘辽科技:淘宝与京东相比,谁是大学生的“心尖宠” ?原因是?
  10. Java中的匿名类和匿名对象