【QEMU系统分析之实例篇(八)】

系列文章目录

第八章 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 反应了目标机器的整个执行状态。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/5646.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

WCH RISC CH32V303RCT6 单片机的SDI Printf 虚拟串口功能 类似SEGGER RTT打印功能 简单分析

参考: 有关于 SDI printf 更多的信息和资料吗? 关于 CH32 系列 MCU SDI 虚拟串口功能的使用 【CH32X035 评估板测评】 教你使用 SDI 接口重定向 printf SDI (Serial Data Interface) 是沁恒微电子 RISC-V 内核的私有外设接口,CH32 RISC-V 系列目前提供了…

掌握技巧:Linux下通过命令查看系统时间

在Linux系统中,系统时间是至关重要的。程序员经常需要查看系统时间来进行调试、日志记录以及任务调度等操作。 虽然大多数Linux发行版都提供了图形化界面来查看系统时间,但是使用命令行来获取系统时间更加高效和便捷。 本文将介绍几种在Linux下通过命令…

redis 高可用 Sentinel 详解

写在前面 redis 在我们日常的业务开发中是十分常见的,而redis的可用性就必须要有很高的要求,那么 redis集群的高可用由有一个或者多个 Sentinel(哨兵) 实例组成的 哨兵系统来保证的。 哨兵 由一个或者多个 Sentinel 实例组成的 Sentinel 系统可以监控任…

CRC32 循环冗余校验

实现的CRC-32算法,Java编写,使用二进制异或相除法实现。 public static int CRC322(final byte[] _bytes) {// 补充32位0byte[] bytes new byte[_bytes.length 4];System.arraycopy(_bytes, 0, bytes, 0, _bytes.length);// CRC初始值Bits crc Bits.v…

53.HarmonyOS鸿蒙系统 App(ArkTS) socket套接字连接失败无效参数--invalid argument

ark ts socket套接字连接失败无效参数--invalid argument 绑定本机真实连接的WIFI的IP,不要绑定127.0.0.1

MySQL:DQL语句和多表设计

DQL Data Query Language(数据查询语言) 用来查询数据库中表的记录 查询关键字:SELECT 在业务系统中,查询频次是远高于增删改的. 语法 SELECT #字段列表(基本查询) From #表名列表 WHERE #条件列表(条件查询) GROUP BY #分组字段列表(分组查询) HAVING #分组后条件列表 O…

C# 程序启动另外一个exe的时候传参数

C# 程序启动另外一个exe的时候传参数 一、传递一个参数 using System.Diagnostics;public void StartAnotherProcessWithArguments() {// 创建ProcessStartInfo实例ProcessStartInfo startInfo new ProcessStartInfo();// 设置要执行的程序路径startInfo.FileName "C:…

VS code 同步odata服务

在做UI5得开发过程中,经常会出现odata需要更新 那么已经加载过得项目如何去跟新odata服务呢 可以通过如下步骤 1.右键打开应用信息 2.找到manage service models 3.点击编辑 4.选中 刷新并保存

《STM32 HAL库》中断相关函数详尽解析——NVIC

观前提醒:本文以外部中断点灯为例,分析了HAL库中中断服务相关函数的使用及相互关联、底层原理 一、实例实现 实例简介:主函数控制LED2进行闪烁,中断控制LED0开关 我们先使用CubeMX创建项目文件: 1、在System Core中配…

逃逸分析学习

逃逸分析:一种确定指针动态范围的静态分析,它可以分析程序在哪些地方访问到指针。 场景一: ​ 对象被复制给成员变量或静态变量,可能被外部使用,此时变量就发生了逃逸。 场景二: ​ 对象通过return语句…

XY_RE复现(五)

一&#xff0c;给阿姨倒一杯卡布奇诺 是一道魔改TEA加密 给出了一些初始化&#xff0c;然后输入的flag拆分&#xff0c;两两一组&#xff0c;通过for循环放入encrypt加密函数 #include <stdio.h> #define uint32_t unsigned intvoid decrypt(uint32_t *v, uint32_t *ke…

【STM32F407+CUBEMX+FreeRTOS+lwIP netconn UDP TCP记录】

STM32F407CUBEMXFreeRTOSlwIP netconn UDP TCP记录 注意UDPUDP1UDP2 TCPTCP clientTCP server图片 注意 1、超时 #include “lwipopts.h” #define LWIP_SO_RCVTIMEO 12、先保证能ping通 3、关于工程创建可参考 【STM32F407CUBEMXFreeRTOSlwIP之UDP记录】 4、…

数据仓库Data Warehouse

数据仓库Data Warehouse 数仓是一种思想,数仓是一种规范,数仓是一种解决方案 1. 数据处理方式 数据处理大致可以分成两大类: 联机事务处理OLTP(on-line transaction processing)联机分析处理OLAP(On-Line Analytical Processing)1.1. OLTP OLTP的全称是On-line Transa…

【C++】详解string类

目录 简介 框架 构造 全缺省构造函数 ​编辑 传对象构造函数 拷贝构造 析构函数 容量 size() capacity&#xff08;&#xff09; empty() clear() reserve() ​编辑 resize() 遍历 检引用符号"[ ]"的重载 迭代器 begin() end() rbegin() rend(…

使用Mybatis映射时间 DateTime ==> LocalDateTime

首先查看&#xff0c;数据库字段&#xff1a; 书写映射实体类对象VO&#xff1a; Data public class OrderListVO implements Serializable {private Integer orderId;private String memberName;private String orderNumber;private BigDecimal orderPrice;private String l…

在单细胞分辨率下预测细胞对新型药物扰动的反应

scRNA-seq能够在单个细胞分辨率下研究细胞异质性对扰动的响应。然而&#xff0c;由于技术限制&#xff0c;扩大高通量筛选&#xff08;HTSs&#xff0c;highthroughput screens&#xff09;来测量许多药物的细胞反应仍然是一个挑战。因此&#xff0c;目前依然需要借助常规的bul…

excel表格在筛选状态下,怎样从指定数字开始填充序列?

分两种情况分开来说吧&#xff1a; 一、表格根据需要做数据筛选&#xff0c;指定列的序号始终保持0012开始的连续序号。 B2TEXT(AGGREGATE(3,5,B$1:B1)11,"0000") 然后向下填充公式。 当C列数据做了筛选以后&#xff0c;B列仍旧保持连续的序号&#xff0c;改变筛选…

MySQL连表查询

MySQL简介&#xff0c;我们为什么要学习各种join MySQL是SQL的一种&#xff0c;SQL意为结构化查询语言(Structure Query Language)&#xff0c;MySQL可以应用于现实世界的各种结构化数据。 SQL&#xff08;结构化查询语言&#xff09;&#xff0c;处理结构化数据的查询语言&a…

房产中介小程序高效开发攻略:从模板到上线一站式服务

对于房产中介而言&#xff0c;拥有一个高效且用户友好的小程序是提升业务、增强客户黏性的关键。而采用直接复制模板的开发方式&#xff0c;无疑是实现这一目标的最佳途径&#xff0c;不仅简单快捷&#xff0c;而且性价比极高。 在众多小程序模板开发平台中&#xff0c;乔拓云网…

Mysql MVVC

Mysql MVVC MVVC就是用管理快照实现多版本并发控制吗&#xff0c;保证了数据库的隔离性。 读已提交 如何保证数据的隔离型 当我们开始一个事物的时候我们就会创建一个快照&#xff0c; 每一个快照都有一个时间戳作为标记&#xff0c;如果我们已经修改了数据但是还没有提交那…