Qemu使用指南
本贴用于指导社区开发者使用Qemu进行openUBMC仿真。
Qemu启动指南
Qemu的启动分为两种方式:
- WSL/Linux 本地启动: 已完成openUBMC环境准备的用户,想使用更高性能openUBMC
- Docker镜像启动 : 未完成openUBMC环境准备的用户或想要一次拉起多个Qemu镜像完成自动化部署的用户
Qemu 启动配置
Qemu的启动可以通过[manifest仓库](项目首页 - manifest:manifest - GitCode)一键启动。下载最新 的manifest之后,可以在build/works/packet/qemu_shells/config.json 中完成你对Qemu的一些配置。当然,对于体验者来说你可以直接使用config.json 中的默认配置,因为它可以一键式的帮你下载Qemu启动的依赖文件。
{
"mapports": {
"ssh": 10022,
"https": 10443,
"ipmi": 10623,
"snmp": 10161,
"telnet": 10023
},
"start_dependencies" : {
"qemu_setup_dir" : "temp/qemu_temp/qemu_start_temp" ,
"inner_path" : "output/packet/inner",
"cpio_path" : "output/packet/inner/openUBMC_25.00.00.01_qemu.cpio.gz" ,
"zImage_path" : "output/packet/inner/zImage_openUBMC" ,
"dtb" : "hi1711_9p8c.dtb",
"qemu": "qemu-system-aarch64-release",
"remote_qemu": false,
"remote_cpio": false,
"download_qemu" : "https://repo.openubmc.cn/25.03/tools/openUBMC-qemu.zip",
"download_cpio" : "https://repo.openubmc.cn/25.03/firmware/openUBMC_25.00.00.01_qemu.cpio.gz"
},
"container_cfg":{
"container": "hi1711",
"wsl_enabled": true,
"docker_enabled": false,
"docker_num" : 2,
"docker_operator" : "create",
"docker_image": "swr.cn-north-4.myhuaweicloud.com/openubmc/qemu:latest"
},
"qemu_cfg":{
"core_num" : 4 ,
"memory" : 4
}
}
配置说明
mapports : Qemu启动时,内部环境与外部宿主机的端口映射关系。例如Qemu环境中ssh端口为22,映射到宿主机上为10022
start_dependencies:Qemu启动时依赖的文件及路径声明。
Qemu启动时依赖四个文件:
- cpio:openUBMC文件系统,内涵RTOS内核,openBMC应用APP等
- zImage:Linux内核映像文件
- qemu:qemu-system-aarch64, qemu启动二进制文件
- dtb : Linux设备树文件
start_dependencies 中有两个用于控制远端下载的字段 remote_qemu、 remote_cpio,当该字段为true时会根据download_xxx中的url下载对应文件。
container_cfg: Qemu启动模式配置,wsl_enabled为true时表示使用WSL/Linux 本地启动,docker_enabled为true且docker_operator为create时表示Docker镜像启动,同时根据docker_num决定同时启动数量。更多配置可查看build/works/packet/qemu_shells/schema.json中的描述。
qemu_cfg : Qemu启动时内存大小和使用的CPU核数。
Qemu启动命令
Qemu的启动命令已经被集成到了一个一键式启动的脚本中。
python3 build/works/packet/qemu_shells/vemake_1711.py
为了便于用户体验,哪怕没有手动下载依赖文件,没有配置remote参数为true,该脚本会自动从远端获取依赖文件,让初体验者一键式启动Qemu。
Qemu使用指南
WSL/Linux本地启动
本地启动的方式会在执行python脚本后,在终端开启串口打印
Docker启动
配置docker_enabled为true
执行python脚本后,会在终端打印出Docker实例启动后的编号,并结束脚本。
虽然脚本结束了,但并不意味着Qemu被停止了,而是Qemu在后台使用Docker在运行。
可以使用docker ps -a的方式查看Docker实例情况
然后通过docker attach <Container ID>的形式进入Qemu串口。
ssh登录
在登录ssh之前需要知晓宿主机的ip,在Linux中执行ifconfig查看ip。
找到eth0的ip,然后再宿主机中执行
ssh Administrator@<ip>:10022
输入密码后即可登录。默认密码为Admin@90000
Web登录
在浏览器中输入https://<ip>:100443 即可进入Web登录界面,通常该页面会在启动Qemu后6~10分钟左右完全显示,视宿主机配置而定。
redfish访问
请下载postman工具,并在postman中发送redfish命令。
ipmi访问
ipmi访问请下载ipmitool工具。
Qemu已支持的能力
- 北向接口:Rest、Redifsh、ipmi、CLI
- 南向硬件:EXU、BCU、SEU、CLU、NIC、门限传感器、离散传感器 等
- 安全特性:在线用户管理、用户权限管理 等
- 运维:告警收集、BMC日志收集、传感器事件记录 等
Qemu使用常见场景
本章节用于收纳社区开发者在使用Qemu过程中常使用的场景,并给出案例。
想更新openUBMC的hpm包怎么办?
目前Qemu openBMC并不支持固件升级,所以无法更新hpm包。但这并不意味着无法更新你想调试的组件。
解决方法:制作属于自己的cpio包,cpio包的文件系统和hpm包的文件系统是几乎一致的,除了我们根据仿真系统做了一些变动外,你可以将cpio包视为另一个hpm包。
制作方法:拉取manifest仓库,并执行bingo build -sc qemu,这会在output/packet/inner目录下生成一个openUBMC_25.00.00.01_qemu.cpio.gz,然后启动Qemu时可以使用该cpio包启动。
想更新CSR制作的hpm包怎么办?
更新CSR包可以通过在线替换CSR方法实现。例如替换一个BCU的CSR:
将Qemu中的1825sr替换为4339sr。通过scp将4339.sr上传至Qemu的/tmp目录中
# 进入telnet
/data/home/busybox1711 telnet localhost
# 替换文件
mv /tmp/14100513_00000001020302024339.sr /opt/bmc/sr/14100513_00000001020302024339.sr
# ctrl + D 退出telnet
# 修改Connector配置,将天池加载方式切换为非天池加载
mdbctl setprop set Connector_BCU_1_0101 bmc.kepler.Connector Bom "14100513"
mdbctl setprop set Connector_BCU_1_0101 bmc.kepler.Connector Id "00000001020302024339"
mdbctl setprop set Connector_BCU_1_0101 bmc.kepler.Connector IdentifyMode 2
#卸载板卡
mdbctl setprop set Connector_BCU_1_0101 bmc.kepler.Connector Presence 0
# 重载板卡
mdbctl setprop set Connector_BCU_1_0101 bmc.kepler.Connector Presence 1
# 加载后通过general_hardware查看cpuBorad情况
busctl --user introspect bmc.kepler.general_hardware /bmc/kepler/Systems/1/Boards/CpuBoard/CpuBoard_1_010101
替换成功!
Qemu社区贡献
你可以在 openUBMC Qemu中贡献Qemu代码,我们非常希望有丰富qemu开发经验的大佬参与到此项目~
当然如果你在使用Qemu过程中有使用或识别到的问题,请及时和我们联系,可以在此贴下留言。











