系列文章目录
第十九章 QEMU系统仿真的加速器上电后设置分析
文章目录
前言
本文以 QEMU 8.2.2 为例,分析其作为系统仿真工具的启动过程,并为读者展示各种 QEMU 系统仿真的启动配置实例。
本文读者需要具备一定的 QEMU 系统仿真使用经验,并对 C 语言编程有一定了解。
一、QEMU是什么?
QEMU 是一个通用且开源的机器模拟器和虚拟机。
其官方主页是:https://www.qemu.org/
二、QEMU系统仿真的启动分析
1.系统仿真的初始化代码
QEMU 作为系统仿真工具,其入口代码在 system/main.c 文件中,初始化函数 qemu_init() 的实现在 system/vl.c 文件中,在完成 QEMU 虚拟机导出信息的设置,接下来将处理设置的后续工作,本篇文章将完成以下代码部分的分析。
2.主循环数据初始化
这部分代码在 system/vl.c 文件中,实现如下:
void qemu_init(int argc, char **argv)
{
...
os_setup_post();
...
}
3. os_setup_post()
函数 os_setup_post() 根据宿主机系统不同而不同,
Windows 系统 os_setup_post()
在 Windows 系统上此函数在 /include/sysemu/os-win32.h 文件中,定义如下:
static inline void os_setup_post(void) {
}
这是一个空语句,表示在 Windows 平台上不需要做额外操作。
POSIX 系统 os_setup_post()
在 POSIX 系统上此函数在 /os-posix.c 文件中,定义如下:
void os_setup_post(void)
{
int fd = 0;
if (daemonize) {
if (chdir("/")) {
error_report("not able to chdir to /: %s", strerror(errno));
exit(1);
}