1. 虚拟串口模块的初始化注册
在QEMU中与虚拟串口(virtio-serial)通信相关的文件主要有以下几个:
Virtio-pci.c
virtio-serial-bus.c(h) //从名字上看也像
virtio-console.c
vl.c //qemu的main函数在这里
|
Virtio-pci.c的最后一行是这样的:
type_init(virtio_pci_register_types)
|
virtio-serial-bus.c最后一行是这样的:
type_init(virtio_serial_register_types)
|
Type_init是一个宏定义,它的定义在module.h里面,它调了module_init这个宏
Module_init的定义如下:
#define module_init(function, type) \
static void __attribute__((constructor)) do_qemu_init_ ## function(void) { \
register_module_init(function, type); \
}
|
因为__attribute__((constructor))类似全局变量类的构造函数,会在qemu的main()之前被执行。因此可以看成是virtio-serial-bus这个模块会在qemu进程运行的最初就被初始化注册(实际是将真正的模块初始化函数virtio_serial_register_types设置好,并将该模块加入到全局模块链表中)。同理,virtio-pci和virtio-console和其他设备模块都是这样的。
2. 虚拟串口模块的初始化
真正的模块构造是在vl.cmain()函数中调用到:module_call_init(MODULE_INIT_QOM);开始的,该函数遍历全局模块链表逐一做初始化。就virtio-serial-bus和
virtio-serial port的初始化流程如下:
上图只是一些主要API的调用流程,大致介绍一下:
1)Virtio-pci模块注册的时候注册了virtio-serial-bus这个虚拟串口设备,因此在模块初始化的过程中virtio-serial-bus的virtio_serial_init初始化函数会被调用;
2)virtio-serial-bus的virtio_serial_init里面除了做了最common的初始化之外,主要做了两件事:
a)建立了与虚拟机vdagent通信的数据输入输出队列;
b)建立了与虚拟机vdagent通信的控制消息的输入输出队列;
3)在控制接收队列中有vdagent发送过来的消息的时候,handle_control_message被触发;
4)Virtio-console.c里面也在模块初始化中已经注册了virtio-serial-port这个设备模块,并注册了VirtIOSerialPortClass类的回调函数guest_open;
5)因此当virtio-serial-bus的handle_control_message里判断是VIRTIO_CONSOLE_PORT_OPEN消息的时候,virtio-console.c的guest_open消息被调用;
6)Guest_open的下一步处理在Spice-qemu-char.c的spice_chr_guest_open函数中,接下来qemu将这个事件传递给了spice
server去处理了。
分享到:
相关推荐
qemu-kvm-ev-2.12.0-18.el7_6.3.1.src.rpm是CentOS7的qemu-kvm源码文件
`qemu-kvm-1.1`是QEMU与KVM集成的一个版本,发布于2012年,包含了针对KVM优化的QEMU组件。 QEMU-KVM 1.1 的主要特点和改进包括: 1. **性能提升**:此版本对虚拟化性能进行了优化,提高了CPU和I/O设备的模拟速度,...
官方离线安装包,亲测可用。使用rpm -ivh [rpm完整包名] 进行安装
官方离线安装包,测试可用。使用rpm -ivh [rpm完整包名] 进行安装
官方离线安装包,亲测可用。使用rpm -ivh [rpm完整包名] 进行安装
离线安装包,亲测可用
官方离线安装包,测试可用。使用rpm -ivh [rpm完整包名] 进行安装
官方离线安装包,亲测可用
【压缩包子文件的文件名称列表】"go-qemu-master"可能是项目的主分支,通常在GitHub等版本控制系统中,"master"分支代表了项目的主线代码。这个文件可能包含项目的源代码、文档、示例、测试用例以及其他相关资源。 ...
官方离线安装包,测试可用。使用rpm -ivh [rpm完整包名] 进行安装
官方离线安装包,亲测可用。使用rpm -ivh [rpm完整包名] 进行安装
官方离线安装包,亲测可用。使用rpm -ivh [rpm完整包名] 进行安装
QEMU-kvm是QEMU与KVM的结合,利用了Linux内核的虚拟化扩展,从而提供高性能的全虚拟化能力。 QEMU是一个通用的、基于CPU模拟的系统模拟器,它能够模拟多种处理器架构,如x86、ARM、MIPS等。通过QEMU,用户可以在一...
官方离线安装包,测试可用。使用rpm -ivh [rpm完整包名] 进行安装
这个模拟器允许用户在非 ARM 硬件上运行 ARM 指令集,比如在个人电脑上通过 QEMU(Quick Emulator)来实现。QEMU 是一款强大的通用全系统模拟器,它能够模拟多种处理器架构,并支持虚拟化技术。 S3C2440 是 Samsung...
7. **虚拟网络**:QEMU-KVM支持多种网络模式,如用户模式网络堆栈(User-Mode Networking)、桥接(Bridge)、NAT等,实现虚拟机与外部网络的连接。 8. **图形化界面**:QEMU可以与VNC(Virtual Network Computing...
官方离线安装包,亲测可用
官方离线安装包,亲测可用。使用rpm -ivh [rpm完整包名] 进行安装
而KVM版的QEMU(qemu-kvm)是经过优化的,专为KVM设计,用于虚拟机的上层管理和用户界面。KVM并不直接依赖QEMU进行虚拟化处理,而是利用QEMU提供用户交互和管理功能。因此,用户应正确理解KVM与QEMU的关系,避免混淆...
总的来说,"OSX-KVM-master"提供了一套工具和资源,使得在KVM和QEMU环境下安装和运行OSX成为可能,尽管这是一个相对复杂且需要技术知识的过程。通过这个资源包,用户可以尝试在自己的Linux主机上体验和使用苹果的...