如何新增仿真数据和仿真驱动

对于很多朋友而言,构建自己的仿真数据和仿真驱动是很重要。在这里,我将会分享各位如何新增仿真数据和仿真驱动。目前,Qemu的仿真数据和驱动都存放在qemu_mockup这个组件仓

构建出包

和其他BMC组件仓一样,添加自己的修改,重新构建出包:

bingo build

将构建好的qemu_mockup组件版本号添加到manifest

在manifest中构建整包:

bingo build -sc qemu

仿真数据

目前Qemu的仿真数据是以板卡为粒度存放的

在这里,我们以14140130_19e50222_19e500a1.sr这张网卡和14100513_00000001020302024339.sr这张BCU卡为例,新增仿真数据

值得注意的是:

  1. ncsi over mctp over pcie的仿真文件命名是messagetype_BDF_mctp.json,BDF号是会变化的,要根据实际情况来填写。
  2. 在运行态的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

1 个赞