Qemu中添加自定义命令
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中添加自定义命令相关推荐
- 如何在U-Boot中添加自定义命令
如何在U-Boot中添加自定义命令 1.U-boot命令机制 2.实现步骤 博主热门文章推荐: 1.U-boot命令机制 U-boot中每个命令都使用一个struct cmd_tbl_t定义,该定义在 ...
- u-boot中添加自定义命令
1.u-boot命令机制 u-boot中,每个命令都使用一个struct cmd_tbl_s结构体定义,该定义在include/command.h中实现: struct cmd_tbl_s{ char ...
- 如何用vba在单元格右键快捷菜单中添加自定义的菜单命令
如下图所示,当鼠标右键单击excel工作表中的单元格时,将会弹出单元格右键快捷菜单. 虽然从excel 2007开始 微软引进了ribbon 功能区来代替excel 常规菜单栏,但是像上图所示的鼠标右 ...
- 中的 隐藏鼠标菜单_如何在鼠标右键菜单中添加自定义菜单?工效率提升一倍...
人都是"懒"的,在使用电脑时,对于常用的操作,步骤太多用久了难免会产生烦躁的情绪,虽然系统已经自带了很多快捷方式,但还是不够用,我们通常都会把常用的东西通过快捷方式来添加到桌面,但 ...
- Exynos4412 Uboot 移植(三)—— Uboot添加自定义命令
Uboot添加自定义命令:uboot中的命令使用U_BOOT_CMD这个宏声明来注册进系统,链接脚本会把所有的cmd_tbl_t结构体放在相邻的地方. UBoot版本:u-boot-2013.01 一 ...
- 如何在鼠标右键菜单中添加自定义菜单?工效率提升一倍
人都是"懒"的,在使用电脑时,对于常用的操作,步骤太多用久了难免会产生烦躁的情绪,虽然系统已经自带了很多快捷方式,但还是不够用,我们通常都会把常用的东西通过快捷方式来添加到桌面,但 ...
- 在 Visual Studio Code 中添加自定义的代码片段
无论是那个编辑器,如果能够添加一些自定义代码片段,能够大大提升代码的输入效率. 本文介绍如何在 Visual Studio Code 中添加自定义代码片段. 本文内容 Visual Studio Co ...
- Monaco Editor教程(八): 实现添加自定义命令,添加自定义菜单action功能
背景 在monaco编辑器中已经有了很多指令,这些指令极大地方便了我们的编辑工作,比如用于查询的Ctrl+F 有时为了满足业务的需要我们需要自己添加一些指令,比如在按下End键,弹出提示编辑器的一些统 ...
- 在qemu中添加swap分区
背景:想了解一下hibernate的机制的,但使用的时候报错 PM: Cannot find swap device, try swapon -a PM: Cannot get swap writer ...
最新文章
- 想详细了解风头正劲的联邦学习吗?这篇最强综述论文满足你
- python 报错 AttributeError: type object ‘datetime.datetime‘ has no attribute ‘datetime‘
- 最大矩阵(简单DP)
- 悬镜 linux防黑加固平台,悬镜答疑丨悬镜服务器防护CC效果如何?
- python 只能将最后一行写入excel_Python 应用 办公自动化之 Excel(上)
- 一份北大信科内部流传的 “CS 自救指南”
- Anaconda下如何创建python2等虚拟环境
- 贝叶斯思维 统计建模的python_贝叶斯思维统计建模的Python学习法
- 基于JAVA+SpringMVC+Mybatis+MYSQL的粮店粮食库存管理系统
- VUE使用Stylus插件
- POJ 2955 Brackets(区间DP)
- html的经典语法大全,HTML语法大全
- 安卓使用Root权限实现后台模拟全局按键、触屏事件方法(类似按键精灵)
- 宿舍管理系统(简单版)
- windows中家庭网络、工作网络、公用网络的作用及区别
- 六西格玛黑带考试试题|优思学院
- 计算机应用与基础教学计划,计算机应用基础教学计划完整版.docx
- 《读书是一辈子的事》中篇 了解未来
- 特性(Attributes)
- 点到超平面的距离公式