qemu初始化
tools\ioemu-qemu-xen\vl.c int main(int argc, char **argv, char **envp) { register_machines(); |
tools\ioemu-qemu-xen\i386-dm\machine.c
void register_machines(void) { qemu_register_machine(&xenfv_machine); qemu_register_machine(&xenpv_machine); } |
tools\ioemu-qemu-xen\hw\xen_machine_fv.c QEMUMachine xenfv_machine = { "xenfv", "Xen Fully-virtualized PC", xen_init_fv, BIOS_SIZE | RAMSIZE_FIXED, .max_cpus = 1, .nodisk_ok = 1, }; |
tools\ioemu-qemu-xen\hw\xen_machine_fv.c static void xen_init_fv(ram_addr_t ram_size, int vga_ram_size, const char *boot_device, const char *kernel_filename,const char *kernel_cmdline, const char *initrd_filename, const char *cpu_model, const char *direct_pci) { pc_machine.init(ram_size, vga_ram_size, boot_device, kernel_filename, kernel_cmdline, initrd_filename, cpu_model, direct_pci); |
tools\ioemu-qemu-xen\target-i386\machine.c void register_machines(void) { qemu_register_machine(&pc_machine); qemu_register_machine(&isapc_machine); } |
tools\ioemu-qemu-xen\hw\pc.c QEMUMachine pc_machine = { .name = "pc", .desc = "Standard PC", .init = pc_init_pci, .ram_require = PC_MAX_BIOS_SIZE, .max_cpus = 255, }; |
tools\ioemu-qemu-xen\hw\pc.c static void pc_init_pci(ram_addr_t ram_size, int vga_ram_size, const char *boot_device, const char *kernel_filename, const char *kernel_cmdline, const char *initrd_filename, const char *cpu_model, const char *direct_pci) { pc_init1(ram_size, vga_ram_size, boot_device, kernel_filename, kernel_cmdline, initrd_filename, 1, cpu_model); } |
tools\ioemu-qemu-xen\hw\pc.c /* PC hardware initialisation */ static void pc_init1(ram_addr_t ram_size, int vga_ram_size, const char *boot_device, const char *kernel_filename, const char *kernel_cmdline, const char *initrd_filename, int pci_enabled, const char *cpu_model) { rtc_state = rtc_init(0x70, i8259[8], 2000); |
tools\ioemu-qemu-xen\hw\Mc146818rtc.c RTCState *rtc_init(int base, qemu_irq irq, int base_year) { |
tools\ioemu-qemu-xen\i386-dm\Helper2.c
CPUX86State *cpu_x86_init(const char *cpu_model)
{
tools\ioemu-qemu-xen\target-i386\cpu.h
#define cpu_init cpu_x86_init
tools\ioemu-qemu-xen\hw\pc.c
/* PC hardware initialisation */
static void pc_init1(ram_addr_t ram_size, int vga_ram_size,
const char *boot_device,
const char *kernel_filename, const char *kernel_cmdline,
const char *initrd_filename,
int pci_enabled, const char *cpu_model)
{
for(i = 0; i < smp_cpus; i++) {
env = cpu_init(cpu_model);
if (!env) {
fprintf(stderr, "Unable to find x86 CPU definition\n");
exit(1);
}
结论:tools\ioemu-qemu-xen\hw\pc.c中的pc_init1负责对硬件设备进行初始化。
2013年5月22日上传