kvm启动虚拟机流程(8)

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

分配内存、加载rom/bios
    /* allocate ram and load rom/bios */
    if (!xen_enabled()) {
        pc_memory_init(system_memory,
                       kernel_filename, kernel_cmdline, initrd_filename,
                       below_4g_mem_size, above_4g_mem_size,
                       pci_enabled ? rom_memory : system_memory, &ram_memory);
    }

gsi_state = g_malloc0(sizeof(*gsi_state));
qemu为gsi状态分配中断
gsi = qemu_allocate_irqs(gsi_handler, gsi_state, GSI_NUM_PINS);

为cpu中断分配内存
    if (!xen_enabled()) {
        cpu_irq = pc_allocate_cpu_irq();
        i8259 = i8259_init(cpu_irq[0]);
    } else {
        i8259 = xen_interrupt_controller_init();
}
ioapic初始化
    if (pci_enabled) {
        ioapic_init(gsi_state);
}
vga初始化
pc_vga_init(pci_enabled? pci_bus: NULL);

虚拟机基本设备初始化
    /* init basic PC hardware */
pc_basic_device_init(gsi, &rtc_state, &floppy, xen_enabled());
    for(i = 0; i < nb_nics; i++) {
        NICInfo *nd = &nd_table[i];

        if (!pci_enabled || (nd->model && strcmp(nd->model, "ne2k_isa") == 0))
            pc_init_ne2k_isa(nd);
        else
           网卡初始化
            pci_nic_init_nofail(nd, "rtl8139", NULL);
}
    if (pci_enabled) {
        PCIDevice *dev;
        if (xen_enabled()) {
            dev = pci_piix3_xen_ide_init(pci_bus, hd, piix3_devfn + 1);
        } else {
            磁盘初始化
            dev = pci_piix3_ide_init(pci_bus, hd, piix3_devfn + 1);
        }
    声卡初始化
audio_init(gsi, pci_enabled ? pci_bus : NULL);

原创粉丝点击