【QEMU系统分析之启动篇(二十一)】

本文详细解读了QEMU8.2.2系统仿真的启动流程,重点介绍了初始化、主循环、关键函数如qemu_main_loop、状态检查等,并提供了相关C语言代码实例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

系列文章目录

第二十一章 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 文件中,实现如下:

int (*qemu_main)(void) = qemu_default_main;

int main(int argc, char **argv)
{
   
   
    qemu_init(argc, argv);
    return qemu_main();
}

3. qemu_default_main()

函数 qemu_default_main() 在 /system/vl.c 文件中,定义如下:

int qemu_default_main(void)
{
   
   
    int status;

    status = qemu_main_loop();
    qemu_cleanup(status);

    return status;
}


4. qemu_main_loop()

函数 qemu_main_loop() 在 /system/runstate.c 文件中,定义如下:

int qemu_main_loop(void)
{
   
   
    int status = EXIT_SUCCESS;

    while (!main_loop_should_exit(&status)) {
   
   
        main_loop_wait(false);
    }

    return status;
}


main_loop_should_exit()

函数 main_loop_should_exit() 在 /system/runstate.c 文件中,定义如下:

static bool main_loop_should_exit(int *status)
{
   
   
    RunState r;
    ShutdownCause request;

    if (qemu_debug_requested()) {
   
   
        vm_stop(RUN_STATE_DEBUG);
    }
    if (qemu_suspend_requested()) {
   
   
        qemu_system_suspend();
    }
    request = qemu_shutdown_requested();
    if (
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值