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

这篇具有很好参考价值的文章主要介绍了【QEMU系统分析之启动篇(二十)】。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

系列文章目录

第二十章 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)
{
...
    resume_mux_open();
...
}

3. resume_mux_open()

函数 resume_mux_open() 在 /chardev/mux.c 文件中,定义如下:

void resume_mux_open(void)
{
    muxes_opened = true;
    object_child_foreach(get_chardevs_root(),
                         chardev_options_parsed_cb, NULL);
}

get_chardevs_root()

函数 get_chardevs_root() 定义如下:

Object *get_chardevs_root(void)
{
    return container_get(object_get_root(), "/chardevs");
}

chardev_options_parsed_cb()

函数 chardev_options_parsed_cb() 定义如下:

static int chardev_options_parsed_cb(Object *child, void *opaque)
{
    Chardev *chr = (Chardev *)child;

    if (!chr->be_open && CHARDEV_IS_MUX(chr)) {
        open_muxes(chr);
    }

    return 0;
}
open_muxes()

函数 open_muxes() 在 /chardev/char-mux.c 文件中,定义如下:

/**
 * Called after processing of default and command-line-specified
 * chardevs to deliver CHR_EVENT_OPENED events to any FEs attached
 * to a mux chardev. This is done here to ensure that
 * output/prompts/banners are only displayed for the FE that has
 * focus when initial command-line processing/machine init is
 * completed.
 *
 * After this point, any new FE attached to any new or existing
 * mux will receive CHR_EVENT_OPENED notifications for the BE
 * immediately.
 */
static void open_muxes(Chardev *chr)
{
    /* send OPENED to all already-attached FEs */
    mux_chr_send_all_event(chr, CHR_EVENT_OPENED);

    /*
     * mark mux as OPENED so any new FEs will immediately receive
     * OPENED event
     */
    chr->be_open = 1;
}

函数 mux_chr_send_all_event() 定义如下:

void mux_chr_send_all_event(Chardev *chr, QEMUChrEvent event)
{
    MuxChardev *d = MUX_CHARDEV(chr);
    int i;

    if (!muxes_opened) {
        return;
    }

    /* Send the event to all registered listeners */
    for (i = 0; i < d->mux_cnt; i++) {
        mux_chr_send_event(d, i, event);
    }
}

函数 mux_chr_send_event() 定义如下:

static void mux_chr_send_event(MuxChardev *d, int mux_nr, QEMUChrEvent event)
{
    CharBackend *be = d->backends[mux_nr];

    if (be && be->chr_event) {
        be->chr_event(be->opaque, event);
    }
}

总结

以上分析了 QEMU 系统仿真在启动过程中,QEMU系统仿真通知字符设备后端驱动开始工作的代码部分。

在完成此动作后,QEMU 程序回到主循环,并开始等待轮询的事件处理。文章来源地址https://www.toymoban.com/news/detail-859548.html

到了这里,关于【QEMU系统分析之启动篇(二十)】的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • HarmonyOS4.0系统性深入开发24启动DataAbility

    DataAbility,即\\\"使用Data模板的Ability\\\",主要用于对外部提供统一的数据访问抽象,不提供用户交互界面。DataAbility可由PageAbility、ServiceAbility或其他应用启动,即使用户切换到其他应用,DataAbility仍将在后台继续运行。 使用DataAbility有助于应用管理其自身和其他应用存储数据的访

    2024年01月25日
    浏览(43)
  • 应急响应 - Windows启动项分析,Windows计划任务分析,Windows服务分析

    「作者简介」: CSDN top100、阿里云博客专家、华为云享专家、网络安全领域优质创作者 「推荐专栏」: 对网络安全感兴趣的小伙伴可以关注专栏《网络安全入门到精通》 很多恶意程序会把自己添加到系统启动项中,在开机时自动运行。 msconfig是Windows自带的系统配置实用程序

    2023年04月17日
    浏览(57)
  • QEMU模拟ATF启动

    通过qemu模拟ATF的启动,即启动流程为: 其中bl33为uboot。 apt方式下载 源码安装 去官网下载最新的版本,这里下载qemu-7.1.0,并解压 相关库安装 问题解决 virtio-9p (virtfs) on Linux requires libcap-ng-devel and libattr-devel 编译安装 下载uboot 编译uboot uboot位置 下载kernel 进入官网,下载稳定版

    2024年02月05日
    浏览(41)
  • 使用QEMU模拟启动uboot

    uboot的相关知识,可以参考:uboot基本概念。 WSL: ubutu20.04 模拟开发板:vexpress-a9 uboot版本:u-boot-2023.10 2.1、安装 2.2、查看支持哪些开发板 结果如下: 注:此步非必须,也可自己从Arm GNU Toolchain下载,解压后添加到环境变量即可。 4.1、解压 4.2、编译 4.3、生成的u-boot.bin文件

    2024年02月06日
    浏览(46)
  • 车载基础软件——嵌入式系统时间特性分析

    我是穿拖鞋的汉子,魔都中坚持长期主义的工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 人们会在生活中不断攻击你。他们的主要武器是向你灌输对自己的怀疑:你的价值、你的能力、你的潜力。他们往往会将此伪装成客观意见,但无一例

    2024年02月05日
    浏览(63)
  • 嵌入式系统入门基础知识分析(一)

      目录 ​编辑 一、什么是嵌入式 二、嵌入式系统的组成 三、实时系统 四、实时系统的调度 五、嵌入式微处理器体系结构 六、逻辑电路基础 七、总线电路及信号驱动 八、电平转换电路 九、嵌入式系统中信息表示与运算基础 十、差错控制编码 十一、嵌入式系统的度量项目

    2024年02月05日
    浏览(65)
  • 嵌入式系统中C++ 类的设计和实现分析

    C++ 代码提供了足够的灵活性,因此对于大部分工程师来说都很难把握。 本文介绍了写好C++代码需要遵循的10个最佳实践,并在最后提供了一个工具可以帮助我们分析C++代码的健壮度。 原文:10 Best practices to design and implement a C++ class。 1. 尽可能尝试使用新的C++标准 到2022年,

    2024年02月06日
    浏览(37)
  • kvm qemu虚拟机的创建和启动

    qemu-img create -f qcow2 win1021H1.qcow2 10G sudo qemu-system-x86_64 -enable-kvm -m 8G -smp 4 -boot once=d -cdrom ./iso/cn_windows_7_enterprise_with_sp1_x64_dvd_u_677685.iso -hda ./win7_x64.qcow2 -vnc :1 -usb -usbdevice tablet 如果没有指定-hda ./win7.qcow2,则在安装系统的时候没有磁盘,如下图片是增加了之后才有的磁盘 默认不

    2024年02月12日
    浏览(52)
  • 【信号与系统】(二十二)拉普拉斯变换与复频域分析——s域分析

    问题:如何用拉普拉斯变换求如下n阶系统的微分方程? 系统的初始状态为 y ( 0 − ) , y ( 1 ) ( 0 − ) , … , y ( n − 1 ) ( 0 − ) y(0-), y^{(1)}(0-), ldots, y^{(mathrm{n}-1)}(0-) y ( 0 − ) , y ( 1 ) ( 0 − ) , … , y ( n − 1 ) ( 0 − ) 方法是利用拉普拉斯变换微分特性: 微分方程两边进行拉氏变换

    2024年02月11日
    浏览(56)
  • ARM Linux 调试 -QEMU启动 Uboot/Kernel/Rootfs

    懒人方式: 直接去方锐/qemu克隆项目,执行script目录的脚本即可 1. build_env.sh安装环境 2. build_rootfs.sh 生成rootfs 3. build_kernel.sh编译kernel 4. qemu_run.sh开始调试 2.1busybox代码的下载编译 Busybox下载地址:https://busybox.net/downloads/ Download 1.36.0 Busybox 默认会安装到 ./_install 目录下 制作ro

    2024年02月02日
    浏览(61)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包