![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
qemu
tiantao2012
这个作者很懒,什么都没留下…
展开
-
qemu中建立spcr的acpi table
在qemu/hw/arm/virt-apci-build.c 中会创建传给guest的acpi table。这里我们以组建spcr为例virt_acpi_build->build_spcrstatic voidbuild_spcr(GArray *table_data, BIOSLinker *linker, VirtMachineState *vms){ AcpiSerialPortConsoleRedirection *spcr; const MemMapEntry *u.原创 2020-09-09 10:35:44 · 1087 阅读 · 0 评论 -
qemu对acpi的模拟
在qemu/hw/acpi 这个目录下是qemu对acpi的模拟,从其中的Makefile.objs 中可以看到x86支持两种类型的ACPI 硬件common-obj-$(CONFIG_ACPI_X86) += core.o piix4.o pcihp.ocommon-obj-$(CONFIG_ACPI_X86_ICH) += ich9.o tco.o这里我们piix4.c 为例,其设备初始化代码如下:static const TypeInfo piix4_pm_info = { .nam.原创 2020-09-09 09:34:12 · 1639 阅读 · 0 评论 -
qemu的linux-user mode
qemu是一个支持跨平台的虚拟机,其使用分两种方式,分别是system mode和user mode。在qemu的system mode的配置下可以模拟出来整个计算机。从源码的路径看user mode 根据架构的不同有分为bsd-user和linux-user,这里以linux-user为例看看user mode具体作用是啥?linux-user mode的的源码在linux-user中,从源码中可以看到linux-user mode支持的要模拟的架构,例如aarch64/alpha 等[root.原创 2020-08-13 16:00:18 · 1733 阅读 · 0 评论 -
查询qemu和libvirtd的版本
原创 2020-06-11 16:01:07 · 9309 阅读 · 0 评论 -
qemu对cpu的初始化
Qemu中对arm 架构支持的cpu 路径如下qemu-master\qemu-master\hw\arm\virt.cstatic const char *valid_cpus[] = { ARM_CPU_TYPE_NAME("cortex-a7"), ARM_CPU_TYPE_NAME("cortex-a15"), ARM_CPU_TYPE_NAME("cortex-a53"), ARM_CPU_TYPE_NAME("cortex-a57"), ARM_CP.原创 2020-05-12 09:16:03 · 1956 阅读 · 1 评论 -
cannot undefine domain with nvram
通过virsh删除虚拟机时报错,提示cannot undefine domain with nvram,解决方法是加上--nvram分析如下:报错的函数如下:原来是因为加了VIR_DOMAIN_UNDEFINE_KEEP_NVRAMqemuDomainUndefineFlags(virDomainPtr dom, unsigned i...原创 2020-04-10 19:54:57 · 7807 阅读 · 1 评论 -
vhe
vhe的全称是Virtualization Host Extension support。是armv8.1的新特性,其最终要就是支持type-2的hypervisors这种扩展让kernel直接跑在el2上,这样可以减少host和guest之间share的寄存器,并减少overhead of virtualization具体实现如下面的patch:https://lwn.net/Articl...原创 2018-09-11 08:42:30 · 3377 阅读 · 0 评论 -
vcpu和physical cpu 绑定
参考libvirt中xml的写法可以将vpu和物理cpu 绑定https://libvirt.org/formatdomain.html#elementsCPUTuning<domain> ... <cputune> <vcpupin vcpu="0" cpuset="1-4,^2"/> <vcpupin vcpu="1" cp原创 2018-06-05 08:41:18 · 1866 阅读 · 0 评论 -
通过qemu-system-aarch64 测试kernel
以ubuntu为例,首先安装qemu准备要测试的kernel和ramdisk,并通过命令启动虚拟机qemu-system-aarch64 -m 1024 -cpu host -M virt -nographic -initrd mini-rootfs.cpio.gz -kernel Image -enable-kvm成功后可以看到kernel启动的log最后进入小系原创 2017-12-27 16:15:29 · 3946 阅读 · 0 评论 -
qemu中模拟设备的注册是在main函数之前
qemu将要模拟的设备分成了5类typedef enum { MODULE_INIT_BLOCK, MODULE_INIT_OPTS, MODULE_INIT_QAPI, MODULE_INIT_QOM, MODULE_INIT_TRACE, MODULE_INIT_MAX} module_init_type;#define block_in原创 2017-09-30 16:38:20 · 763 阅读 · 0 评论 -
通过virt-install 创建虚拟机时qemu对vcpu和ram的限制
通过virt-install 命令创建虚拟机的时候会调用到qemu/hw/arm/virt.c 中的machvirt_machine_initstatic const TypeInfo virt_machine_info = { .name = TYPE_VIRT_MACHINE, .parent = TYPE_MACHINE, .abst原创 2017-09-29 15:12:28 · 2285 阅读 · 0 评论 -
qemu中的module
qemu采用了模块机制。总共有5中模块定义在include/qemu/module.h 中typedef enum { MODULE_INIT_BLOCK, MODULE_INIT_OPTS, MODULE_INIT_QAPI, MODULE_INIT_QOM, MODULE_INIT_TRACE, MODULE_INIT_MAX} module原创 2017-09-18 16:50:05 · 1119 阅读 · 0 评论 -
qemu-kvmde 磁盘cache参数
qemu-kvmde 磁盘cache的参数有一下五种,在建立虚拟机的过程中 通过下面的函数设定int bdrv_parse_cache_mode(const char *mode, int *flags, bool *writethrough){ *flags &= ~BDRV_O_CACHE_MASK; if (!strcmp(mode, "off") || !strcmp原创 2017-09-18 14:56:15 · 997 阅读 · 0 评论 -
vcpu和cpu的关系
请参考http://www.linux-kongress.org/2010/slides/KVM-Architecture-LK2010.pdf可见在qemu中用每个thread来代替一个cpu原创 2017-09-18 14:48:06 · 24094 阅读 · 1 评论 -
qemu中得到guest前端的通知处理后再发中断给前端
在qemu/hw/virtio/virtio-pci.c 中定义定义了对配置空间的操作static const MemoryRegionOps virtio_pci_config_ops = { .read = virtio_pci_config_read, .write = virtio_pci_config_write, .impl = {原创 2017-04-21 16:43:30 · 1100 阅读 · 0 评论 -
cpu 的simulation
arm_cpu_class_init中会调用arm_cpu_realizefn->qemu_init_vcpuvoid qemu_init_vcpu(CPUState *cpu){ cpu->nr_cores = smp_cores; cpu->nr_threads = smp_threads; cpu->stopped = true; if (原创 2016-12-23 19:18:55 · 1089 阅读 · 0 评论 -
虚拟机的创建
首先用type_init(kvm_type_init);来定义kvm_type_init,而type_init 定义如下:#define type_init(function) module_init(function, MODULE_INIT_QOM)#define module_init(function, type)原创 2016-12-23 16:59:22 · 696 阅读 · 0 评论