系列文章目录
第八章 QEMU系统仿真的机器创建分析实例
文章目录
- 系列文章目录
- 第八章 QEMU系统仿真的机器创建分析实例
- 前言
- 一、QEMU是什么?
- 二、QEMU系统仿真的机器创建分析实例
- 1.系统仿真的命令行参数
- 2.目标机器创建过程
- 3.输出分析
- 总结
前言
本文以 QEMU 8.2.2 为例,分析其作为系统仿真工具的工作过程,并为读者展示各种 QEMU 系统仿真的启动配置实例。
本文读者需要具备一定的 QEMU 系统仿真使用经验,并对 C 语言编程有一定了解。
一、QEMU是什么?
QEMU 是一个通用且开源的机器模拟器和虚拟机。
其官方主页是:https://www.qemu.org/
二、QEMU系统仿真的机器创建分析实例
1.系统仿真的命令行参数
QEMU 作为系统仿真工具,其入口代码在 system/main.c 文件中,初始化函数 qemu_init() 的实现在 system/vl.c 文件中。
本文将分析以下命令创建目标系统机器的运行过程,读者需要对 QEMU 系统启动过程的程序代码有所了解,相关内容可以参考《QEMU系统分析之启动篇》系列文章。
..\qemu\8.2.2-qkd\qemu-system-x86_64.exe -cpu "Penryn" -M "q35,accel=whpx" -m "6G" -nodefaults
2.目标机器创建过程
这部分代码在 system/vl.c 文件中,实现如下:
int qemu_init(int argc, char **argv)
{
...qemu_create_machine(machine_opts_dict);
...
}
进入 qemu_create_machine() 获取目标机器类型并完成执行环境的初始化,最后为目标机器添加默认属性设置,代码如下:
static void qemu_create_machine(QDict *qdict)
{
...cpu_exec_init_all();page_size_init();if (machine_class->hw_version) {qemu_set_hw_version(machine_class->hw_version);}/** Get the default machine options from the machine if it is not already* specified either by the configuration file or by the command line.*/if (machine_class->default_machine_opts) {QDict *default_opts =keyval_parse(machine_class->default_machine_opts, NULL, NULL,&error_abort);qemu_apply_legacy_machine_options(default_opts);object_set_properties_from_keyval(OBJECT(current_machine), default_opts,false, &error_abort);qobject_unref(default_opts);}
}
本章我们在创建完成目标机器后来查看一下此刻的机器状态,添加跟踪调试代码,修改后代码如下:
static void qemu_create_machine(QDict *qdict)
{
.../** Get the default machine options from the machine if it is not already* specified either by the configuration file or by the command line.*/
#ifdef HUEDBG_ENABLEhuedbg_flag = 1;huedbg_dump_MachineClass(machine_class, 1);huedbg_flag = 0;
#endifif (machine_class->default_machine_opts) {QDict *default_opts =keyval_parse(machine_class->default_machine_opts, NULL, NULL,&error_abort);HUEDBG("\n");qemu_apply_legacy_machine_options(default_opts);HUEDBG("\n");object_set_properties_from_keyval(OBJECT(current_machine), default_opts,false, &error_abort);huedbg_flag = 1;HUEDBG("\n");huedbg_dump_QDict(default_opts, 1);HUEDBG("\n");huedbg_flag = 0;qobject_unref(default_opts);}huedbg_flag = 1;HUEDBG("\n");huedbg_dump_MachineState(current_machine, 5);HUEDBG("\n");huedbg_flag = 0;
}
我们分别导出 MachineClass 和 MachineState 的内容。
3.输出分析
代码执行后,输出结果如下:
[20520]../system/vl.c/qemu_create_machine(2128):
[20520]../util/huedbg-machine.c/huedbg_dump_MachineClass(170):family=[pc_q35]
[20520]../util/huedbg-machine.c/huedbg_dump_MachineClass(171):name=[pc-q35-8.2]
[20520]../util/huedbg-machine.c/huedbg_dump_MachineClass(172):alias=[q35]
[20520]../util/huedbg-machine.c/huedbg_dump_MachineClass(173):desc=[Standard PC (Q35 + ICH9, 2009)]
[20520]../util/huedbg-machine.c/huedbg_dump_MachineClass(174):deprecation_reason=[(null)]
[20520]../util/huedbg-machine.c/huedbg_dump_MachineClass(175):init=[00007ff61dbe57b0]
[20520]../util/huedbg-machine.c/huedbg_dump_MachineClass(176):reset=[00007ff61dbf3240]
[20520]../util/huedbg-machine.c/huedbg_dump_MachineClass(177):wakeup=[00007ff61dbf32b0]
[20520]../util/huedbg-machine.c/huedbg_dump_MachineClass(178):kvm_type=[00007ff61dbf63f0]
[20520]../util/huedbg-machine.c/huedbg_dump_MachineClass(179):block_default_type=[1]
[20520]../util/huedbg-machine.c/huedbg_dump_MachineClass(180):units_per_default_bus=[1]
[20520]../util/huedbg-machine.c/huedbg_dump_MachineClass(181):max_cpus=[1024]
[20520]../util/huedbg-machine.c/huedbg_dump_MachineClass(182):min_cpus=[1]
[20520]../util/huedbg-machine.c/huedbg_dump_MachineClass(183):default_cpus=[1]
[20520]../util/huedbg-machine.c/huedbg_dump_MachineClass(184):no_serial=[0]
[20520]../util/huedbg-machine.c/huedbg_dump_MachineClass(185):no_parallel=[0]
[20520]../util/huedbg-machine.c/huedbg_dump_MachineClass(186):no_floppy=[1]
[20520]../util/huedbg-machine.c/huedbg_dump_MachineClass(187):no_cdrom=[0]
[20520]../util/huedbg-machine.c/huedbg_dump_MachineClass(188):no_sdcard=[0]
[20520]../util/huedbg-machine.c/huedbg_dump_MachineClass(189):pci_allow_0_address=[0]
[20520]../util/huedbg-machine.c/huedbg_dump_MachineClass(190):legacy_fw_cfg_order=[0]
[20520]../util/huedbg-machine.c/huedbg_dump_MachineClass(191):is_default=[0]
[20520]../util/huedbg-machine.c/huedbg_dump_MachineClass(192):default_machine_opts=[firmware=bios-256k.bin]
[20520]../util/huedbg-machine.c/huedbg_dump_MachineClass(193):default_boot_order=[cad]
[20520]../util/huedbg-machine.c/huedbg_dump_MachineClass(194):default_display=[std]
[20520]../util/huedbg-machine.c/huedbg_dump_MachineClass(195):default_nic=[e1000e]
[20520]../util/huedbg-machine.c/huedbg_dump_MachineClass(197):hw_version=[(null)]
[20520]../util/huedbg-machine.c/huedbg_dump_MachineClass(198):default_ram_size=[134217728]
[20520]../util/huedbg-machine.c/huedbg_dump_MachineClass(199):default_cpu_type=[qemu64-x86_64-cpu]
[20520]../util/huedbg-machine.c/huedbg_dump_MachineClass(200):default_kernel_irqchip_split=[0]
[20520]../util/huedbg-machine.c/huedbg_dump_MachineClass(201):option_rom_has_mr=[0]
[20520]../util/huedbg-machine.c/huedbg_dump_MachineClass(202):rom_file_has_mr=[1]
[20520]../util/huedbg-machine.c/huedbg_dump_MachineClass(203):minimum_page_bits=[0]
[20520]../util/huedbg-machine.c/huedbg_dump_MachineClass(204):has_hotpluggable_cpus=[1]
[20520]../util/huedbg-machine.c/huedbg_dump_MachineClass(205):ignore_memory_transaction_failures=[0]
[20520]../util/huedbg-machine.c/huedbg_dump_MachineClass(206):numa_mem_align_shift=[23]
[20520]../util/huedbg-machine.c/huedbg_dump_MachineClass(207):valid_cpu_types=[0000000000000000]
[20520]../util/huedbg-machine.c/huedbg_dump_MachineClass(218):allowed_dynamic_sysbus_devices[0]=[vmbus-bridge]
[20520]../util/huedbg-machine.c/huedbg_dump_MachineClass(218):allowed_dynamic_sysbus_devices[1]=[ramfb]
[20520]../util/huedbg-machine.c/huedbg_dump_MachineClass(218):allowed_dynamic_sysbus_devices[2]=[intel-iommu]
[20520]../util/huedbg-machine.c/huedbg_dump_MachineClass(218):allowed_dynamic_sysbus_devices[3]=[amd-iommu]
[20520]../util/huedbg-machine.c/huedbg_dump_MachineClass(222):auto_enable_numa_with_memhp=[1]
[20520]../util/huedbg-machine.c/huedbg_dump_MachineClass(223):auto_enable_numa_with_memdev=[1]
[20520]../util/huedbg-machine.c/huedbg_dump_MachineClass(224):ignore_boot_device_suffixes=[0]
[20520]../util/huedbg-machine.c/huedbg_dump_MachineClass(225):smbus_no_migration_support=[0]
[20520]../util/huedbg-machine.c/huedbg_dump_MachineClass(226):nvdimm_supported=[1]
[20520]../util/huedbg-machine.c/huedbg_dump_MachineClass(227):numa_mem_supported=[0]
[20520]../util/huedbg-machine.c/huedbg_dump_MachineClass(228):auto_enable_numa=[0]
[20520]../util/huedbg-machine.c/huedbg_dump_MachineClass(229):cpu_cluster_has_numa_boundary=[0]
[20520]../util/huedbg-machine.c/huedbg_dump_MachineClass(231):default_ram_id=[pc.ram]
[20520]../util/huedbg-machine.c/huedbg_dump_MachineClass(232):get_hotplug_handler=[00007ff61dbf26b0]
[20520]../util/huedbg-machine.c/huedbg_dump_MachineClass(233):hotplug_allowed=[00007ff61dbf3070]
[20520]../util/huedbg-machine.c/huedbg_dump_MachineClass(234):cpu_index_to_instance_props=[00007ff61dbddf60]
[20520]../util/huedbg-machine.c/huedbg_dump_MachineClass(235):possible_cpu_arch_ids=[00007ff61dbded00]
[20520]../util/huedbg-machine.c/huedbg_dump_MachineClass(236):get_default_cpu_node_id=[00007ff61dbdeb20]
[20520]../util/huedbg-machine.c/huedbg_dump_MachineClass(237):fixup_ram_size=[0000000000000000]
[20520]../util/huedbg-machine.c/huedbg_dump_MachineClass(241):props->len=[0]
[20520]../system/vl.c/qemu_create_machine(2156):
[20520]../util/huedbg-qdict.c/huedbg_dump_QDict(38):base.type=[4]
[20520]../util/huedbg-qdict.c/huedbg_dump_QDict(39):base.refcnt=[1]
[20520]../util/huedbg-qdict.c/huedbg_dump_QDict(40):size=[1]
[20520]../util/huedbg-qdict.c/huedbg_dump_QDict(41):table=[000001c1a34395c8]
[20520]../util/huedbg-qdict.c/huedbg_dump_QDict(48):[1] e->value->base.type=[3]
[20520]../util/huedbg-qdict.c/huedbg_dump_QDict(69):[1] key=[firmware] value=[bios-256k.bin]
[20520]../system/vl.c/qemu_create_machine(2158):
[20520]../system/vl.c/qemu_create_machine(2163):
[20520]../util/huedbg-machine.c/huedbg_dump_MachineState(479):fdt=[0000000000000000]
[20520]../util/huedbg-machine.c/huedbg_dump_MachineState(480):dtb=[0000000000000000]
[20520]../util/huedbg-machine.c/huedbg_dump_MachineState(481):dumpdtb=[(null)]
[20520]../util/huedbg-machine.c/huedbg_dump_MachineState(482):phandle_start=[0]
[20520]../util/huedbg-machine.c/huedbg_dump_MachineState(483):dt_compatible=[(null)]
[20520]../util/huedbg-machine.c/huedbg_dump_MachineState(484):dump_guest_core=[1]
[20520]../util/huedbg-machine.c/huedbg_dump_MachineState(485):mem_merge=[1]
[20520]../util/huedbg-machine.c/huedbg_dump_MachineState(486):usb=[0]
[20520]../util/huedbg-machine.c/huedbg_dump_MachineState(487):usb_disabled=[0]
[20520]../util/huedbg-machine.c/huedbg_dump_MachineState(488):firmware=[bios-256k.bin]
[20520]../util/huedbg-machine.c/huedbg_dump_MachineState(489):iommu=[0]
[20520]../util/huedbg-machine.c/huedbg_dump_MachineState(490):suppress_vmdesc=[0]
[20520]../util/huedbg-machine.c/huedbg_dump_MachineState(491):enable_graphics=[1]
[20520]../util/huedbg-machine.c/huedbg_dump_MachineState(492):cgs=[0000000000000000]
[20520]../util/huedbg-machine.c/huedbg_dump_MachineState(493):memdev=[0000000000000000]
[20520]../util/huedbg-machine.c/huedbg_dump_MachineState(494):ram=[0000000000000000]
[20520]../util/huedbg-machine.c/huedbg_dump_MachineState(495):device_memory=[0000000000000000]
[20520]../util/huedbg-machine.c/huedbg_dump_MachineState(497):audiodev=[(null)]
[20520]../util/huedbg-machine.c/huedbg_dump_MachineState(499):ram_size=[0000000008000000]
[20520]../util/huedbg-machine.c/huedbg_dump_MachineState(500):maxram_size=[0000000008000000]
[20520]../util/huedbg-machine.c/huedbg_dump_MachineState(501):maxram_size=[0]
[20520]../util/huedbg-machine.c/huedbg_dump_MachineState(502):boot_config=[000001c1a34246f8]
[20520]../util/huedbg-machine.c/huedbg_dump_BootConfiguration(270):order=[cad]
[20520]../util/huedbg-machine.c/huedbg_dump_BootConfiguration(271):once=[(null)]
[20520]../util/huedbg-machine.c/huedbg_dump_BootConfiguration(272):has_menu=[0]
[20520]../util/huedbg-machine.c/huedbg_dump_BootConfiguration(273):menu=[0]
[20520]../util/huedbg-machine.c/huedbg_dump_BootConfiguration(274):splash=[(null)]
[20520]../util/huedbg-machine.c/huedbg_dump_BootConfiguration(275):has_splash_time=[0]
[20520]../util/huedbg-machine.c/huedbg_dump_BootConfiguration(276):splash_time=[0]
[20520]../util/huedbg-machine.c/huedbg_dump_BootConfiguration(277):has_reboot_timeout=[0]
[20520]../util/huedbg-machine.c/huedbg_dump_BootConfiguration(278):reboot_timeout=[0]
[20520]../util/huedbg-machine.c/huedbg_dump_BootConfiguration(279):has_strict=[0]
[20520]../util/huedbg-machine.c/huedbg_dump_BootConfiguration(280):strict=[0]
[20520]../util/huedbg-machine.c/huedbg_dump_MachineState(506):kernel_filename=[(null)]
[20520]../util/huedbg-machine.c/huedbg_dump_MachineState(507):kernel_cmdline=[]
[20520]../util/huedbg-machine.c/huedbg_dump_MachineState(508):initrd_filename=[(null)]
[20520]../util/huedbg-machine.c/huedbg_dump_MachineState(509):cpu_type=[(null)]
[20520]../util/huedbg-machine.c/huedbg_dump_MachineState(510):accelerator=[0000000000000000]
[20520]../util/huedbg-machine.c/huedbg_dump_MachineState(514):possible_cpus=[0000000000000000]
[20520]../util/huedbg-machine.c/huedbg_dump_MachineState(518):smp=[000001c1a3424770]
[20520]../util/huedbg-machine.c/huedbg_dump_CpuTopology(408):cpus=[1]
[20520]../util/huedbg-machine.c/huedbg_dump_CpuTopology(409):drawers=[1]
[20520]../util/huedbg-machine.c/huedbg_dump_CpuTopology(410):books=[1]
[20520]../util/huedbg-machine.c/huedbg_dump_CpuTopology(411):sockets=[1]
[20520]../util/huedbg-machine.c/huedbg_dump_CpuTopology(412):dies=[1]
[20520]../util/huedbg-machine.c/huedbg_dump_CpuTopology(413):clusters=[1]
[20520]../util/huedbg-machine.c/huedbg_dump_CpuTopology(414):cores=[1]
[20520]../util/huedbg-machine.c/huedbg_dump_CpuTopology(415):threads=[1]
[20520]../util/huedbg-machine.c/huedbg_dump_CpuTopology(416):max_cpus=[1]
[20520]../util/huedbg-machine.c/huedbg_dump_MachineState(522):nvdimms_state=[000001c1a3424b40]
[20520]../util/huedbg-nvdimm.c/huedbg_dump_NVDIMMState(38):is_enabled=[0]
[20520]../util/huedbg-nvdimm.c/huedbg_dump_NVDIMMState(39):dsm_mem=[0000000000000000]
[20520]../util/huedbg-nvdimm.c/huedbg_dump_NVDIMMState(40):fit_buf.fit=[0000000000000000]
[20520]../util/huedbg-nvdimm.c/huedbg_dump_NVDIMMState(41):fit_buf.dirty=[0]
[20520]../util/huedbg-nvdimm.c/huedbg_dump_NVDIMMState(42):io_mr=[000001c1a3424b60]
[20520]../util/huedbg-memory.c/huedbg_dump_MemoryRegion(70):romd_mode=[0]
[20520]../util/huedbg-memory.c/huedbg_dump_MemoryRegion(71):ram=[0]
[20520]../util/huedbg-memory.c/huedbg_dump_MemoryRegion(72):subpage=[0]
[20520]../util/huedbg-memory.c/huedbg_dump_MemoryRegion(73):readonly=[0]
[20520]../util/huedbg-memory.c/huedbg_dump_MemoryRegion(74):nonvolatile=[0]
[20520]../util/huedbg-memory.c/huedbg_dump_MemoryRegion(75):rom_device=[0]
[20520]../util/huedbg-memory.c/huedbg_dump_MemoryRegion(76):flush_coalesced_mmio=[0]
[20520]../util/huedbg-memory.c/huedbg_dump_MemoryRegion(77):unmergeable=[0]
[20520]../util/huedbg-memory.c/huedbg_dump_MemoryRegion(78):dirty_log_mask=[0]
[20520]../util/huedbg-memory.c/huedbg_dump_MemoryRegion(79):is_iommu=[0]
[20520]../util/huedbg-memory.c/huedbg_dump_MemoryRegion(80):ram_block=[0000000000000000]
[20520]../util/huedbg-memory.c/huedbg_dump_MemoryRegion(81):owner=[0000000000000000]
[20520]../util/huedbg-memory.c/huedbg_dump_MemoryRegion(82):dev=[0000000000000000]
[20520]../util/huedbg-memory.c/huedbg_dump_MemoryRegion(83):ops=[0000000000000000]
[20520]../util/huedbg-memory.c/huedbg_dump_MemoryRegion(84):opaque=[0000000000000000]
[20520]../util/huedbg-memory.c/huedbg_dump_MemoryRegion(85):container=[0000000000000000]
[20520]../util/huedbg-memory.c/huedbg_dump_MemoryRegion(86):mapped_via_alias=[0]
[20520]../util/huedbg-memory.c/huedbg_dump_MemoryRegion(87):size=[00000000000000000000000000000000]
[20520]../util/huedbg-memory.c/huedbg_dump_MemoryRegion(88):addr=[00000000000000000000000000000000]
[20520]../util/huedbg-memory.c/huedbg_dump_MemoryRegion(89):destructor=[0000000000000000]
[20520]../util/huedbg-memory.c/huedbg_dump_MemoryRegion(90):align=[0000000000000000]
[20520]../util/huedbg-memory.c/huedbg_dump_MemoryRegion(91):terminates=[0]
[20520]../util/huedbg-memory.c/huedbg_dump_MemoryRegion(92):ram_device=[0]
[20520]../util/huedbg-memory.c/huedbg_dump_MemoryRegion(93):enabled=[0]
[20520]../util/huedbg-memory.c/huedbg_dump_MemoryRegion(94):vga_logging_count=[0]
[20520]../util/huedbg-memory.c/huedbg_dump_MemoryRegion(95):alias=[0000000000000000]
[20520]../util/huedbg-memory.c/huedbg_dump_MemoryRegion(96):alias_offset=[0]
[20520]../util/huedbg-memory.c/huedbg_dump_MemoryRegion(97):priority=[0]
[20520]../util/huedbg-memory.c/huedbg_dump_MemoryRegion(98):subregions=[000001c1a3424c18]
[20520]../util/huedbg-memory.c/huedbg_dump_MemoryRegion(99):subregions_link=[000001c1a3424c28]
[20520]../util/huedbg-memory.c/huedbg_dump_MemoryRegion(100):coalesced=[000001c1a3424c38]
[20520]../util/huedbg-memory.c/huedbg_dump_MemoryRegion(101):name=[(null)]
[20520]../util/huedbg-memory.c/huedbg_dump_MemoryRegion(102):ioeventfd_nb=[0]
[20520]../util/huedbg-memory.c/huedbg_dump_MemoryRegion(103):ioeventfds=[0000000000000000]
[20520]../util/huedbg-memory.c/huedbg_dump_MemoryRegion(104):rdm=[0000000000000000]
[20520]../util/huedbg-memory.c/huedbg_dump_MemoryRegion(105):disable_reentrancy_guard=[0]
[20520]../util/huedbg-nvdimm.c/huedbg_dump_NVDIMMState(46):persistence=[00000000]
[20520]../util/huedbg-nvdimm.c/huedbg_dump_NVDIMMState(47):persistence_string=[(null)]
[20520]../util/huedbg-nvdimm.c/huedbg_dump_NVDIMMState(48):dsm_io=[000001c1a3424c80]
[20520]../util/huedbg-acpi.c/huedbg_dump_AcpiGenericAddress(28):space_id=[0]
[20520]../util/huedbg-acpi.c/huedbg_dump_AcpiGenericAddress(29):bit_width=[0]
[20520]../util/huedbg-acpi.c/huedbg_dump_AcpiGenericAddress(30):bit_offset=[0]
[20520]../util/huedbg-acpi.c/huedbg_dump_AcpiGenericAddress(31):access_width=[0]
[20520]../util/huedbg-acpi.c/huedbg_dump_AcpiGenericAddress(32):address=[0000000000000000]
[20520]../util/huedbg-machine.c/huedbg_dump_MachineState(526):numa_state=[000001c1a3424ca0]
[20520]../util/huedbg-numa.c/huedbg_dump_NumaState(65):num_nodes=[0]
[20520]../util/huedbg-numa.c/huedbg_dump_NumaState(66):have_numa_distance=[0]
[20520]../util/huedbg-numa.c/huedbg_dump_NumaState(67):hmat_enabled=[0]
[20520]../util/huedbg-numa.c/huedbg_dump_NumaState(68):nodes=[000001c1a3424ca8]
[20520]../util/huedbg-numa.c/huedbg_dump_NumaState(75):hmat_lb=[000001c1a34298a8]
[20520]../util/huedbg-numa.c/huedbg_dump_NumaState(76):hmat_cache=[000001c1a3429968]
[20520]../system/vl.c/qemu_create_machine(2165):
首先,系统仿真的机器家族时 pc-q35 系列的机器,信息如下:
[20520]../util/huedbg-machine.c/huedbg_dump_MachineClass(170):family=[pc_q35]
[20520]../util/huedbg-machine.c/huedbg_dump_MachineClass(171):name=[pc-q35-8.2]
[20520]../util/huedbg-machine.c/huedbg_dump_MachineClass(172):alias=[q35]
[20520]../util/huedbg-machine.c/huedbg_dump_MachineClass(173):desc=[Standard PC (Q35 + ICH9, 2009)]
然后,系统默认值信息如下:
[20520]../util/huedbg-machine.c/huedbg_dump_MachineClass(192):default_machine_opts=[firmware=bios-256k.bin]
[20520]../util/huedbg-machine.c/huedbg_dump_MachineClass(193):default_boot_order=[cad]
[20520]../util/huedbg-machine.c/huedbg_dump_MachineClass(194):default_display=[std]
[20520]../util/huedbg-machine.c/huedbg_dump_MachineClass(195):default_nic=[e1000e]
[20520]../util/huedbg-machine.c/huedbg_dump_MachineClass(197):hw_version=[(null)]
[20520]../util/huedbg-machine.c/huedbg_dump_MachineClass(198):default_ram_size=[134217728]
[20520]../util/huedbg-machine.c/huedbg_dump_MachineClass(199):default_cpu_type=[qemu64-x86_64-cpu]
[20520]../util/huedbg-machine.c/huedbg_dump_MachineClass(200):default_kernel_irqchip_split=[0]
BIOS 使用 bios-256k.bin 文件
启动顺序 “cad” ,即首先是硬盘(c),然后是软盘(a),最后是光盘(d)
监视器(monitor) 使用标准监视器(std)
网卡使用 “e1000e” 的网卡
内存大小 128M
CPU 类型使用 qemu64-x86_64-cpu
片上中断芯片不分割
最后多 CPU 支持的设置如下:
[20520]../util/huedbg-machine.c/huedbg_dump_CpuTopology(408):cpus=[1]
[20520]../util/huedbg-machine.c/huedbg_dump_CpuTopology(409):drawers=[1]
[20520]../util/huedbg-machine.c/huedbg_dump_CpuTopology(410):books=[1]
[20520]../util/huedbg-machine.c/huedbg_dump_CpuTopology(411):sockets=[1]
[20520]../util/huedbg-machine.c/huedbg_dump_CpuTopology(412):dies=[1]
[20520]../util/huedbg-machine.c/huedbg_dump_CpuTopology(413):clusters=[1]
[20520]../util/huedbg-machine.c/huedbg_dump_CpuTopology(414):cores=[1]
[20520]../util/huedbg-machine.c/huedbg_dump_CpuTopology(415):threads=[1]
[20520]../util/huedbg-machine.c/huedbg_dump_CpuTopology(416):max_cpus=[1]
因为启动参数项没有 -smp 相关参数,因此默认目标机器只有一个单核 CPU。
至此,函数 qemu_create_machine() 执行完毕,系统生成了 current_machine 并对其进行了初始化。
总结
以上分析了系统在执行创建目标机器的操作后,所得到的当前目标机器状态,后续随着启动项参数配置完成,相关设备初始化成功,目标机器状态也随之变化。
我们可以看到 MachineClass 和 MachineState 反应了目标机器的整个执行状态。