对于很多朋友而言,构建自己的仿真数据和仿真驱动是很重要。在这里,我将会分享各位如何新增仿真数据和仿真驱动。目前,Qemu的仿真数据和驱动都存放在qemu_mockup这个组件仓
构建出包
和其他BMC组件仓一样,添加自己的修改,重新构建出包:
bingo build
将构建好的qemu_mockup组件版本号添加到manifest
在manifest中构建整包:
bingo build -sc qemu
仿真数据
目前Qemu的仿真数据是以板卡为粒度存放的
在这里,我们以14140130_19e50222_19e500a1.sr这张网卡和14100513_00000001020302024339.sr这张BCU卡为例,新增仿真数据
值得注意的是:
- ncsi over mctp over pcie的仿真文件命名是messagetype_BDF_mctp.json,BDF号是会变化的,要根据实际情况来填写。
- 在运行态的qemu中,走mctp协议的数据底层调用的是bin文件,因此在bingo build编译的时候会自动将0x02_0x9700_mctp.json文件编译为0x02_0x9700_mctp.bin文件
仿真驱动
为了更好地仿真和适配BMC,Qemu对部分的驱动进行仿真
在这里,我们在mctp.c文件中添加一行打印日志
如果将自己修改添加进去呢?
方式有两种:第一种是重新出整包,第二种是在线调试
方法一:在线调试
我们先基于远程的qemu启动bmc,可以直接在manifest代码的终端下运行:
python3 build/works/packet/qemu_shells/vemake_1711.py >qemu_stdout.log 2>qemu_stderr.log
1、Qemu支持在线pcie卡的热插拔功能 + 直接添加仿真数据
远程的Qemu默认会加载两个pcie卡
如果此时你想加载第三张pcie卡,只需做一个操作:
此时我们到资源树查看新增这张网卡数据,发现是空,因为我们没有存放仿真数据
busctl --user introspect bmc.kepler.network_adapter /bmc/kepler/Systems/1/NetworkAdapters/NetworkAdapter_1_0101011202/Ports/NetworkPort_0_0101011202
在这里,我们以ncsi over mctp over pcie为例添加仿真数据
这张网卡是走ncsi协议的,也就是它的仿真数据命名为0x02_0x9600_mctp.json,然后生成对应的bin文件
2、Qemu支持实时修改现有的仿真数据
对于所有为.json的仿真数据,我们都支持在线修改仿真数据,实时生效
3、对于bin格式的仿真文件,Qemu支持直接替换,实时生效(eeprom的bin文件除外,涉及到框架的自发现逻辑)
效果步骤和1、Qemu支持在线pcie卡的热插拔功能 + 直接添加仿真数据一致
方法二:重新出包+启动
如果不想在线调试,想重新出包验证的话,可以按照下面的流程来:
1、添加自己的修改
在这里,我想直接添加14140130_19e50222_19e500a1.sr这张网卡,并想一开始就加载上它
重新启动qemu:
python3 build/works/packet/qemu_shells/vemake_1711.py >qemu_stdout.log 2>qemu_stderr.log






















