博客
分类
标签
归档
Gallery
关于
Dark Mode
博客
分类
标签
归档
Gallery
关于
Dark Mode
Mens et Manus
qemu monitor的工作模型
前言gdb调试程序会阻塞被调试程序运行,gdb走一步,程序才能走一步,形如: 1234gdbprocgdbproc 那qemu的monitor中使用HMP/QMP与虚拟机交互交互会不会导致qemu挂起呢?monitor和qemu交互是同步还是异步?如果是同步那qemu是如何挂起的 monitor等待命令输入时不会阻塞qemu进行,不像gdb那样等待命令时阻塞被调试程序运行。只是在输入命令敲...
2021-08-21
Read More
qemu磁盘文件打开过程
磁盘文件打开过程通过gdb追踪openat系统调用得知,raw格式文件会使用raw_open_common()函数打开,调用栈如下: 通过分析源码得到qemu打开磁盘文件的过程:QEMU使用一个BlockDriverState结构体来管理块设备驱动信息,其中就包括了操作和数据。块设备创建的关键就在于初始化BlockDriverState结构体。 1234567struct BlockDr...
2021-08-15
Read More
qemu如何由事件循环找到真正要操作的目标设备
从eventfd联系到fd的流程非阻塞事件循环中,通过修改eventfd来通知qemu有事情需要qemu处理,如调用读写回调函数等。已知eventfd仅做通知的作用,qemu事件循环能够监听到eventfd的改变然后做相应处理。但是qemu如何由eventfd找到真正要进行处理的对象呢(如由磁盘读写关联的eventfd找到磁盘的fd进行读写)?本文将以virtio的磁盘读写为例,介绍从eve...
2021-08-14
Read More
OpenRC和Runit
前言很多人讨厌systemd,说systemd违背了UNIX哲学的”do one thing and do it well”。这里不讨论systemd的功过,而是通过介绍OpenRC和Runit两个init程序来体会什么叫小而精, KISS。 OpenRC使用逻辑OpenRC在/etc/init.d维护每个service的控制脚本,可以通过/etc/init.d/<service>...
2021-07-31
Read More
Linux中分区扩容与磁盘数据迁移
分区扩容注意,这种方法只能用于最后一个分区的扩容 使用lsblk查看现有分区情况,如: 12345$ lsblkvda 253:0 0 12G 0 disk├─vda1 253:1 0 1K 0 part├─vda2 253:2 0 2G 0 part [SWAP]└─vda3 253:3 0 8G 0 part / 使...
2021-07-29
Read More
QEMU虚拟机开发与环境配置
QEMU虚拟机开发与环境配置QEMU虚拟机开发与环境配置大体分为以下三个步骤: qemu虚拟机开发 准备虚拟机运行所需环境 qemu运行参数配置 虚拟机开发虚拟机开发可以从最简单的图灵机模型开始,创建内存、创建CPU,再在此基础上添加需要的设备。需要注意的是图灵机模型不包括屏幕回显功能(毕竟有输出才方便debug嘛),所以含有CPU,内存,serial设备的机器才是人类能够交互的最小虚拟...
2021-07-29
Read More
PowerPC虚拟机模拟的开发方法
模拟方法概述创建虚拟机可以分为如下5个阶段,伪码描述如下: 1234567static void my_machine_init(MachineState *machine){ create_cpu create_mem create_dev load_kernel create_device_tree} create_cpu阶段主要负责cpu创建的内容,包括cpu对象...
2021-07-24
Read More
C中一些容易疏忽的问题
C中一些容易疏忽的问题 数组作为形参时退化为指针,即sizeof(arg) = 8,不再是原先数组的大小 可以使用引用(CPP中),f(int (&arg)[]) 字符串定义方式的问题char* a和char a[]类型不同,导致的结果不同: extern char *a认为存储单元是地址的值 extern char a[]认为存在单元是数组元素,但是用的时候a是地址 12...
2021-06-06
Read More
Imagic Magic Cheat sheet
查看图片信息 identify 格式转换:自动识别扩展名 convert in.<any> out.<any> 压缩-quality convert -quality 85 <src> <dst> 修改大小-resize <width>x<hight>[!] !表示不改变原比例 宽或高省略一个时,另一个根据...
2021-05-27
Read More
qemu架构中创建内存的方法
引言一种类型的虚拟机有其特定的初始化函数以完成虚拟机内存初始化等操作。调用哪个初始化函数在构建虚拟机类时指定: 12345678910static const TypeInfo my_machine_info = { ... .class_init = my_machine_class_init,};static void my_machine_regi...
2021-05-24
Read More
Previous
14 / 28
Next