qemu code

qemu init 


主代码流程


main -- G:\code\qemu-1.6.1\vl.c
    module_call_init(MODULE_INIT_QOM); -- 设备驱动初始化和注册
		#define type_init(function) module_init(function, MODULE_INIT_QOM)
			type_init(x86_cpu_register_types) -- cpu 创建
			
	module_call_init(MODULE_INIT_MACHINE); -- 机器类型注册初始化
		pc_machine_init
		
    bdrv_init_with_whitelist(); -- 磁盘类型初始化
		bdrv_init
	
	qemu_init_main_loop
		init_clocks
		init_timer_alarm
		qemu_signal_init
	
	cpudef_init -- not very important

	socket_init -- not very important	
	
	configure_accelerator -- tcg类型的初始化,也就是翻译机的种类的初始化
		kvm_init
			s->fd = qemu_open("/dev/kvm", O_RDWR);
			s->vmfd = kvm_ioctl(s, KVM_CREATE_VM, 0);
			kvm_arch_init(s);
			kvm_irqchip_create(s);	
		
	qemu_init_cpu_loop

	cpu_exec_init_all
		memory_map_init
			memory_region_init
			address_space_init
		io_mem_init
			memory_region_init_io
	
	blk_mig_init
	
	qdev_machine_init -- qemu 本身设备初始化 ?
	
	machine->init(&args); -- 机器类型初始化
		qemu_register_machine(&pc_i440fx_machine_v1_6);
		qemu_register_machine(&pc_i440fx_machine_v1_5);
		qemu_register_machine(&pc_i440fx_machine_v1_4);
		qemu_register_machine(&pc_machine_v1_3);
		qemu_register_machine(&pc_machine_v1_2);
		qemu_register_machine(&pc_machine_v1_1);
		qemu_register_machine(&pc_machine_v1_0);
		qemu_register_machine(&pc_machine_v0_15);
		qemu_register_machine(&pc_machine_v0_14);
		qemu_register_machine(&pc_machine_v0_13);
		qemu_register_machine(&pc_machine_v0_12);
		qemu_register_machine(&pc_machine_v0_11);
		qemu_register_machine(&pc_machine_v0_10);
		qemu_register_machine(&isapc_machine);

	init_displaystate -- qemu 本身的display init	
	


cpu设备注册创建

cpu设备类型创建
type_init(x86_cpu_register_types)
	x86_cpu_type_info
		x86_cpu_common_class_init
			x86_cpu_realizefn
				qemu_init_vcpu
					qemu_kvm_start_vcpu -- kvm_enabled
						qemu_thread_create
							qemu_kvm_cpu_thread_fn
								kvm_init_vcpu
								kvm_cpu_exec
									kvm_vcpu_ioctl(cpu, KVM_RUN, 0);
									switch (run->exit_reason) {
									#define KVM_EXIT_UNKNOWN          0
									#define KVM_EXIT_EXCEPTION        1
									#define KVM_EXIT_IO               2
									#define KVM_EXIT_HYPERCALL        3
									#define KVM_EXIT_DEBUG            4
									#define KVM_EXIT_HLT              5
									#define KVM_EXIT_MMIO             6
									...
									...
									}
									
								qemu_kvm_wait_io_event
					
					qemu_tcg_init_vcpu -- tcg_enabled
						qemu_thread_create -- G:\code\qemu-1.6.1\cpus.c
							qemu_tcg_cpu_thread_fn
							tcg_exec_all
								tcg_cpu_exec
									cpu_exec -- G:\code\qemu-1.6.1\cpu-exec.c
		
	

机器类型注册创建

		
main.c -- G:\code\qemu-1.6.1\vl.c
    module_call_init(MODULE_INIT_MACHINE);
		machine_init(pc_machine_init); -- G:\code\qemu-1.6.1\hw\i386\pc_piix.c
			qemu_register_machine(&pc_machine_v1_0);
				pc_init_pci
					pc_init1
						pc_cpus_init
							pc_new_cpu
								cpu_x86_create
									X86_CPU
									cpu_x86_register
						kvm_pc_setup_irq_routing -- if kvm_irqchip_in_kernel()
						kvm_i8259_init
						pc_vga_init
						pc_nic_init
						pci_piix3_ide_init
						pc_cmos_init
						pc_pci_device_init 
						...
						...


磁盘类型创建 and qemu-img

	
main -- G:\code\qemu-1.6.1\qemu-img.c
	qemu_init_main_loop
	bdrv_init
		module_call_init(MODULE_INIT_BLOCK);
			#define block_init(function) module_init(function, MODULE_INIT_BLOCK)
		img_cmds
			#include "qemu-img-cmds.hx"




pc_piix.c (G:\code\qemu-1.6.1\hw\i386):machine_init(pc_machine_init);

machine_init(pc_machine_init);
	pc_machine_init
		pc_i440fx_machine_v1_6
			pc_init_pci_1_6
				pc_init_pci	
					pc_init1
						pc_cpus_init
							pc_new_cpu
								cpu_x86_create
									


G:\code\qemu-1.6.1\target-i386\cpu.c
type_init(x86_cpu_register_types)
	x86_cpu_type_info
		x86_cpu_common_class_init
			x86_cpu_realizefn
				qemu_init_vcpu
					kvm_enabled --> qemu_kvm_start_vcpu
						    qemu_thread_create(cpu->thread, qemu_kvm_cpu_thread_fn, cpu,  QEMU_THREAD_JOINABLE);
								kvm_init_vcpu
								kvm_cpu_exec(cpu)
									kvm_vcpu_ioctl(cpu, KVM_RUN, 0);


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值