使用bingo qemu命令拉起qemu虚拟机

背景

之前拉起qemu虚拟机的过程太复杂,社区bingo增加了qemu子命令用于快速部署仿真工具、下载仿真镜像,快速体验openubmc功能。

拉取Docker镜像

docker pull docker.1ms.run/library/ubuntu:24.04
# 如果拉取的不是arm64版本镜像,可以执行下面的命令指定架构
docker pull --platform=linux/arm64 docker.1ms.run/library/ubuntu:24.04

运行镜像

# 注意`/home/xuhj/workspace/`替换成你宿主机上用于映射到容器中的目录;开启特权模式`--privileged=true`;端口映射按需修改。
docker run -itd --name xuhj -v /home/xuhj/workspace/:/home/workspace  -p 10022:10022 -p 10023:10023 -p 10443:10443 -p 10623:10623/udp -p 20161:10161/udp  docker.1ms.run/library/ubuntu:24.04 /bin/bash
# 如果在kunpeng处理器上运行,检查 /dev/kvm存在的,可以使用--device命令映射,实现kvm加速
# 映射 kvm `--device /dev/kvm:/dev/kvm`,
docker run -itd --name xuhj --privileged=true --device /dev/kvm:/dev/kvm -v /home/xuhj/workspace/:/home/workspace  -p 10022:10022 -p 10023:10023 -p 10443:10443 -p 10623:10623/udp -p 20161:10161/udp docker.1ms.run/library/ubuntu:24.04 /bin/bash

安装依赖软件

# 更新apt软件源
sed -i 's/ports.ubuntu.com/mirrors.aliyun.com/g' /etc/apt/sources.list.d/ubuntu.sources
# 更新apt缓存 
apt update
# 安装必要的软件
apt install python3 vim git python3-pip python3-jsonschema unzip cpio libfdt1 libpixman-1-0 libglib2.0-0 libslirp0 wget curl telnet 

安装最新的bingo

最新的bingo 0.8.14版本引入了bingo qemu命令,该命令实现了自动下载工具和镜像,自适应kvm加速,用户可以快速体验openubmc的仿真功能。

# 已安装bingo的用户可以执行bingo up升级工具
bingo up
# 未安装bingo的用户可以执行pip3 install openubmc-bingo
pip3 install openubmc-bingo --break-system-packages

# 执行bingo qemu命令
bingo qemu

启动过程日志截取:

root@e22c67f16c99:/tmp/xx# bingo qemu
>> whoami
root
当前skill自动更新状态已开启,如需关闭请执行`bingo config skill.sync=false`
未检测到/opt/RTOS目录,可能未安装构建工具,请正确安装构建工具(可以manifest仓执行init.py或bingo build)
conan版本: 2.31.2
创建工作目录: temp
>> conan remote list --format=json
>> conan remote auth conancenter --force
Connecting to remote 'conancenter' anonymously
conancenter:
    error: 404 Not found. [Remote: conancenter]
下载qemu工具: https://repo.openubmc.cn/latest/tools/openUBMC-qemu-arm64.zip
/tmp/xx/temp/bin/openUBMC-qemu-arm64.zip.downloading: 100%|██████████████████████████████████████████████████████████████████████████████████| 5.83M/5.83M [00:00<00:00, 27.0MB/s]
下载镜像: https://dailybuild.openubmc.cn/qemu/latest/openUBMC_qemu_default.data.gz
/tmp/xx/temp/openUBMC_qemu_default.data.gz.downloading: 105MB [00:03, 32.1MB/s] 
解压镜像到: /tmp/xx/temp/image
解压cpio镜像准备共享目录: /tmp/xx/temp/image/openUBMC_qemu_default.cpio.gz
>> zcat /tmp/xx/temp/image/openUBMC_qemu_default.cpio.gz | cpio -id --no-absolute-filenames -D /tmp/xx/temp/image/cpio
610715 blocks
检测到arm64环境支持kvm, 使能kvm加速
qemu启动命令: /tmp/xx/temp/bin/qemu-system-aarch64-release -machine hi1711,accel=kvm -nographic -smp 8 -m 4G -kernel /tmp/xx/temp/image/zImage_openUBMC -dtb /tmp/xx/temp/image/hi1711_9p8c.dtb -append root=/dev/ram0 ip=dhcp console=ttyS0 rdinit=/init memmap=1886M@0x87200000 ramdisk_size=30720 earlycon=serial-mm,0x08710000 printk.time=y ignore_loglevel ekbox=0x1f000$0x84be0000 kbox_mem=2432k@0x84900000 -initrd /tmp/xx/temp/image/openUBMC_qemu_default.cpio.gz -netdev user,id=eth0,hostfwd=tcp:127.0.0.1:10443-:443,hostfwd=tcp:127.0.0.1:10022-:22,hostfwd=tcp:127.0.0.1:10023-:23,hostfwd=udp:127.0.0.1:10623-:623,hostfwd=udp:127.0.0.1:10161-:161 -fsdev local,security_model=passthrough,id=fsdev1,path=/tmp/xx/temp/image/pram -device virtio-9p-device,id=fs1,fsdev=fsdev1,mount_tag=pramshare -fsdev local,security_model=passthrough,id=fsdev0,path=/tmp/xx/temp/image/data -device virtio-9p-device,id=fs0,fsdev=fsdev0,mount_tag=hostshare -fsdev local,security_model=passthrough,id=fsdev2,path=/tmp/xx/temp/image/mockdata -device virtio-9p-device,id=fs2,fsdev=fsdev2,mount_tag=mockshare -monitor telnet:127.0.0.1:14444,server,nowait
拉起qemu, 端口映射: tcp:10443->:443, tcp:10022->:22, tcp:10023->:23, udp:10623->:623, udp:10161->:161, monitor: telnet:127.0.0.1:14444
qemu前台运行, 退出请使用Ctrl+A X
Error opening file for reading: No such file or directory
Error opening file for reading: No such file or directory
Error opening file for reading: No such file or directory
qemu-system-aarch64-release: Get timestamp from ./output/data/mockdata/i2c/8/0x90_lm75.json failed;
....

测试和验证qemu:

拉起qemu镜像后可以使用telnet/ssh/curl等工具测试服务端口状态

# telnet 连接10023端口
telnet 127.0.0.1 10023
# ssh 连接10022端口
ssh Administrator@127.0.0.1 -p 10022
# curl测试https服务
curl --inseucre https://127.0.0.1:10443

manifest仓构建qemu镜像

可以在manifest仓中构建出完整的qemu镜像,执行以下命令将在output目录下生成名为openUBMC_qemu_default.data.gz的带dtb、zImage、cpio镜像压缩包。

# 克隆manifest仓
git clone https://gitcode.com/openubmc/manifest.git 
cd manifest
# 构建镜像
bingo publish -sc qemu -bt debug 
# 启动镜像,qemu子命令会自动搜索output、temp、.temp目录下以t.data.gz结束的镜像包并解包启动
bingo qemu

其它说明

bingo qemu在运行时会首先检查系统是否已经存在qemu-system-aarch64-release工具,如果存在则不会下载,不存在时会从repo.openubmc.cn网站下载工具。
因此,需要使用自己编译的qemu工具时,需要将qemu-system-aarch64-release所在目录设置到PATH环境变量。