linwanmin
(Linwanmin)
1
使用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),并不是从芯片寄存器层面去做完整仿真。
我想请教几个问题:
-
如果要系统学习 QEMU 在 openUBMC 中的使用和开发,应从哪些基础开始?(例如 QEMU 设备模型、BMC 启动流程、镜像加载机制等)
-
目前在运行时,QEMU 启动速度和性能都不太理想,有哪些可行的优化方向?(比如缓存策略、设备裁剪、KVM 加速等)
-
如果我想贡献代码或优化方案到 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~