kvm启动虚拟机流程(7)

来源:互联网 发布:一淘和淘宝联盟同时返 编辑:程序博客网 时间:2024/06/16 20:08

cpu执行初始化(内存映射初始化、io内存初始化)
    cpu_exec_init_all();
    块设备初始化
    bdrv_init_with_whitelist();

blk_mig_init();

打开虚拟块设备
    /* open the virtual block devices */
    if (snapshot)
        qemu_opts_foreach(qemu_find_opts("drive"), drive_enable_snapshot, NULL, 0);
    if (qemu_opts_foreach(qemu_find_opts("drive"), drive_init_func, &machine->use_scsi, 1) != 0)
        exit(1);

    default_drive(default_cdrom, snapshot, machine->use_scsi,
                  IF_DEFAULT, 2, CDROM_OPTS);
    default_drive(default_floppy, snapshot, machine->use_scsi,
                  IF_FLOPPY, 0, FD_OPTS);
    default_drive(default_sdcard, snapshot, machine->use_scsi,
                  IF_SD, 0, SD_OPTS);

    register_savevm_live(NULL, "ram", 0, 4, NULL, ram_save_live, NULL,
                         ram_load, NULL);

    模块调用初始化(wdt_ib700_register_devices/ vmport_dev_register/ testdev_register_devices/ sga_register/ i440fx_register/ port92_register/ isa_qdev_register/ kvmclock_register_device/ kvm_tpr_opt_setup/ ivshmem_register_devices/ ioapic_register_devices/ pic_register/ pit_register/ pci_qdev_register/ debugcon_register_devices……
module_call_init(MODULE_INIT_DEVICE);


机器初始化(pc_init_pci-> pc_init1 PC硬件初始化)
    machine->init(ram_size, boot_devices,
                  kernel_filename, kernel_cmdline, initrd_filename, cpu_model);

pc的cpu初始化
    pc_cpus_init(cpu_model);
if (kvmclock_enabled) {
kvm时钟创建
        kvmclock_create();
}
pci内存初始化
    if (pci_enabled) {
        pci_memory = g_new(MemoryRegion, 1);
        memory_region_init(pci_memory, "pci", INT64_MAX);
        rom_memory = pci_memory;
    } else {
        pci_memory = NULL;
        rom_memory = system_memory;
}

原创粉丝点击