【Qemu开发】如何构建Qemu二进制工具

使用Qemu启动BMC的四大要素

目前使用Qemu启动BMC需要以下四个元素:

  • 仿真镜像包*.cpio.gz:存放BMC的业务代码,作用类似BMC构建的hpm
  • zImage: 压缩的Linux内核镜像文件, 是Linux系统启动过程中的核心组件,负责初始化硬件,建议关键数据结构,并最终启动用户空间的第一个进程(通常是init)
  • dtb:Device Tree Blob(设备树二进制块),DTB文件是一个描述计算机硬件组件和数据结构的地图,详细地描述了系统里有哪些硬件设备、它们的地址、中断号、以及其他配置信息
  • qemu-system-aarch64:qemu二进制,仿真底层设备

如何编译自己的qemu二进制工具: qemu-system-aarch64

  • 下载qemu组件仓
  • 根据自己需求来修改对应的代码,如hw/misc/i2c-hi182x-slave.c添加一行调试日志

  • 终端输入:sh ./build_qemu.sh,等待编译完成

  • 将编译好的qemu-system-aarch64二进制迁移到manifest仓的temp/qemu_temp/qemu_start_temp,如果一开始找不到temp目录,那就执行python3 build/works/packet/qemu_shells/vemake_1711.py,等待temp目录构建出来,使用ctrl + C停止进程

由于后续调试添加的日志越来越多,防止信息被刷掉,建议采用这个命令来启动qemu:python3 build/works/packet/qemu_shells/vemake_1711.py >qemu_stdout.log 2>qemu_stderr.log

我目前是刚接触 openUBMC QEMU 模拟的新手,想了解整个学习和开发的方向。
目前看起来 openBMC / openUBMC 的 QEMU 环境更偏向功能级模拟(functional simulation),并不是从芯片寄存器层面去做完整仿真。

我想请教几个问题:

  1. 如果要系统学习 QEMU 在 openUBMC 中的使用和开发,应从哪些基础开始?(例如 QEMU 设备模型、BMC 启动流程、镜像加载机制等)

  2. 目前在运行时,QEMU 启动速度和性能都不太理想,有哪些可行的优化方向?(比如缓存策略、设备裁剪、KVM 加速等)

  3. 如果我想贡献代码或优化方案到 openUBMC QEMU 模拟环境,应遵循怎样的开发和提交流程

openUBMC的Qemu其中一个主要作用用于解决BMC物料紧缺问题,更多的是能够验证BMC的功能

然后openUBMC的Qemu的仿真层面:底层芯片或器件仿真 + 驱动仿真

Qemu的设备模型可以看查看这个pr, 这里面包含了hi1711芯片,i2c总线及其设备等等

BMC的启动流程可以查看manifest代码仓的启动脚本:build/works/packet/qemu_shells/vemake_1711.py,这里面你可以查看启动qemu的流程和镜像加载机制

目前Qemu的启动性能的确令人头疼,我们这边后期想采取快照、kvm加速或者优化BMC性能、qemu适配多操作系统或者架构等方法,欢迎一起讨论~

很欢迎您这边为openUBMC的qemu做贡献,您这边直接提交代码 + 在pr提交验证信息即可,可以直接社区论坛跟我们留言以及我们每日都会定期检查的提交pr~