声明:本文使用的qemu源码版本为qemu-3.1.0-rc0
前言:qemu中采用事件驱动架构和并行架构相结合的方式来工作的。qemu中的线程主要有Vcpu线程,main_loop线程、I/O线程和workthread线程,其中main_loop属于主线程。
1. 翻译流程总体框架
2. 具体流程
1> 在vl.c的main函数中创建单板machine
current_machine = MACHINE(object_new(object_class_get_name(OBJECT_CLASS(machine_class))));
2> 在启动单板的过程中选择了单板的参数如:
./qemu-system-ppc -M mac99
此时会调用mac99单板对应的模型,其建模过程对应qemu源码中的hw\ppc\mac_newworld.c文件
3> 初始化CPU(mac_newworld.c中调用)
core99_machine_class_init->(mc->init=ppc_core99_init)
mac_newworld.c函数中ppc_core_init函数创建CPU具体过程如下:
for (i = 0; i < smp_cpus; i++) {
cpu = POWERPC_CPU(cpu_create(machine->cpu_type));
env = &cpu->env;
/* Set time-base frequency to 100 Mhz */
cpu_ppc_tb_init(env, TBFREQ);
qemu_register_reset(ppc_core99_reset, cpu);
}
其中其中 cpu = POWERPC_CPU(cpu_create(machine->cpu_type))实现对于CPU的创建,其函数调用具体如下:(该函数原型位于cpu.c文件中)
CPUState *cpu_create(const char *typename)
{
Error