如何快速启动Qemu


title: ‘如何快速启动Qemu’
date: ‘2025/04/17’
tags:

  • Sample
  • ABC
  • cccc
    sig: sig-CICD
    archives: ‘2020-03’
    author:
  • name: ‘《fanxinxin》’
    title: ‘How to quick start your openUBMC in Qemu’
    description: ‘How to quick start your openUBMC in Qemu’’
    avatar: ‘avatar’
    description: “How to quick start your openUBMC in Qemu’.”

:happy:现在可以在Qemu中启动你的openUBMC,你不需要准备任何服务器设备,只需要准备一个linux环境。

在开始Qemu之旅之前,请确保你已经完成了openUBMC的《环境准备》章节,这里会帮助你完成linux环境的基本搭建。

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
    }
}

该配置中有两个地方可以供体验者进行修改,一个是"wsl_enabled"和"docker_enabled",一个是支持从本地linux拉起Qemu环境,另一个是使用openUBMC提供的docker镜像拉起Qemu。

配置参数 推荐使用对象
wsl_enabled 已完成openUBMC环境准备的用户,想使用更高性能openUBMC
docker_enabled 未完成openUBMC环境准备的用户或想要一次拉起多个Qemu镜像完成自动化部署的用户

启动命令

启动命令非常的简单,只需要在manifest的目录下执行:

python3 build/works/packet/qemu_shells/vemake_1711.py

此时基于Qemu的openUBMC就完成了启动。

如何连接Qemu

ssh连接

在启动config中有对端口进行配置,你可以通过连接ssh

ssh Administrator@<ip> -p 10022

其中ip为你的宿主机的ip地址

web登录

你可以通过访问 https://<ip>:10443访问web界面

ipmi访问

ipmi的访问可以通过 10623访问,默认的ipmi端口是623端口

snmp访问

snmp端口为10161,默认的snmp端口为161端口

调整config.json中的wsl_enabled": false, “docker_enabled”: true。然后在wsl(ubuntu20.04)中执行python3 build/works/packet/qemu_shells/vemake_1711.py后,拉起了两个docker镜像,这是否正常?多次尝试发现确实有两个,这是后续运行输出打印/home/qium/manifest# python3 build/works/packet/qemu_shells/vemake_1711.py
421137 blocks
24ce26ee8f070113290d47d765d3331dbe422189d4297b4d7ec43a849ee9aa0e
40db71a3aaa27c83cc70a2f5a4e3ac45a741f770409f2e0da6a2590e3b9eac07

这是正常的,你可以通过docker ps -a查看已启动的docker容器。并且通过 docker attach <容器ID>进入到Qemu的串口界面


web登录一直提示“登录失败”,用Administrator/Admin@9000 和 Administrator/OpenUBMC@2025 试过都不行。

账户密码分别为:
Administrator / Admin@90000

收到,用此账号密码可以成功登录。但是我们发现用户体验不是很好,从输完账户密码到首页完全加载出来,响应差不多在一分钟以上。页面跳转后一直在转圈圈没反应。

我们也识别到了这个问题,已在昨天完成了修复,你可以在配置中指定remote_cpio为true,获取最新的cpio包。

好的,谢谢

qemu的固件升级功能是不是不可用啊?

qemu当前不支持升级,用qemu做固件升级是为了测试什么场景?

想验证一下自己编写的CSR文件升级后能不能使用

目前最新的cpio仿真镜像包已支持ssh登录,你可以通过ssh连接10022端口后,上传csr文件至/tmp中。

然后ssh登录Qemu环境

ssh Administrator@<your ip> -p 10022

然后执行进入telnet的命令

/data/home/busybox_x telnet localhost

再执行替换CSR的动作

mv /tmp/<your CSR name> /opt/bmc/sr/<replace CSR name>

然后执行CSR卸载和重载的命令,可以使用mdbctl设置对应Connector的Presence属性先为0(表示卸载),再为1(表示重载),例如:

mdbctl setprop set Connector_BCU_1_0101 bmc.kepler.Connector Presence 0
mdbctl setprop set Connector_BCU_1_0101 bmc.kepler.Connector Presence 1
2 个赞

如何查看有哪些Cpnnector?我现在想替换SEU与CLU模块的sr文件,但是找不到对应的Connector

mdbctl里面 lsobj Connector

Qemu当前支持哪些特性,如何使用在文档中没有介绍。能否尽快出个文档介绍QEMU当前支持的特性和用法。

CSR的话可以直接替换+ killall skynet就可以加载了

想问一下,这里qemu拉起的是默认的bmc环境吗?我们自己出的openUBMC的hpm包可以用qemu拉起吗?

按照上面操作替换了,也使用kill all skynet操作了。过一会后使用ipmcget -d v与mdbctl lsprop Connector_SEU_1_0101命令查看,发现信息没有变更。

使用最新manifest,wsl环境下执行python3 build/works/packet/qemu_shells/vemake_1711.py,qemu串口起初打印正常,但在之后无法正常登录串口。显示Bail out!


config.json配置如下:

这个问题看起来是Qemu存在互锁了。你运行该Qemu环境有多长时间了,我们之前没有遇到过该问题,想在本地复现一下。