在 QEMU 中运行 OpenBMC¶
背景¶
最近想给某台机器配一个 BMC,于是调研 OpenBMC 发行版,但是还没有找到可以买到的合适的 BMC,因此先在虚拟机中进行尝试。
过程¶
运行过程参考官方的 OpenBMC Development Environment 文档进行,首先安装依赖和克隆仓库:
sudo apt install git python3-distutils gcc g++ make file wget \
gawk diffstat bzip2 cpio chrpath zstd lz4 bzip2
git clone git@github.com:openbmc/openbmc.git
cd openbmc
romulus¶
接着,编译针对 romulus BMC 的系统镜像:
等待一段时间,就可以得到编译好的 32MB 的系统镜像:
整个构建完用了 27 GB 的磁盘空间。
接着,不需要按照文档里的方法去用 qemu fork,而是直接可以用系统自带的上游版 qemu 启动虚拟机:
qemu-system-arm -m 256 -M romulus-bmc -nographic -drive file=./obmc-phosphor-image-romulus.static.mtd,format=raw,if=mtd -net nic -net user,hostfwd=:127.0.0.1:2222-:22,hostfwd=:127.0.0.1:2443-:443,hostfwd=udp:127.0.0.1:2623-:623,hostname=qemu
这样就把 SSH,HTTPS 和 IPMI 转发到本机上了,可以访问,默认用户是 root,默认密码是 0penBmc。
这也是用 OpenBMC 的一大好处:有真正的 SSH 可以用,可以看到内部的情况。通过 uname 可以看到,模拟的处理器架构是 armv6l,还是比较旧的。根据 QEMU 文档,romulus 是基于 AST2500 的 OpenPOWER Romulus POWER9 BMC。AST2500 采用的是 800MHz ARM11 核心,确实是比较老了。
AST2600¶
接下来试试基于 Cortex-A7 的 AST2600,构建 evb-ast2600 target:
这次也编译出了一个 64MB 的系统镜像:
在 qemu 中运行:
qemu-system-arm -m 1024 -M ast2600-evb -nographic -drive file=./obmc-phosphor-image-evb-ast2600.static.mtd,format=raw,if=mtd -net nic -net user,hostfwd=:127.0.0.1:2222-:22,hostfwd=:127.0.0.1:2443-:443,hostfwd=udp:127.0.0.1:2623-:623,hostname=qemu
和之前一样,可以通过 SSH,HTTPS 和 IPMI 访问,但是没有 WebUI,只有 redfish。进系统以后可以看到 uname 的架构变成了 armv7l。
此时按照 【OpenBMC 系列】4.启动流程 使用 qume 模拟 ast2600-evb 的文档,给 ast2600-evb target 加上 webui:
进入 openbmc 目录,编辑 build/evb-ast2600/conf/local.conf
,添加一行:
编辑 meta-phosphor/recipes-phosphor/images/obmc-phosphor-image.bbapend
,添加一行:
注:CSDN 文章里路径打错了,image 应该为 images。
编辑 meta-phosphor/recipes-phosphor/packagegroups/packagegroup-obmc-apps.bbappend
,添加一行:
注:romulus 可以工作是因为在 meta-ibm/meta-romulus/recipes-phosphor/packagegroups/packagegroup-obmc-apps.bbappend
里面有 RDEPENDS:${PN}-extras:append:romulus = " webui-vue phosphor-image-signing"
。
重新构建系统镜像:
此时就会把 webui-vue 也构建进去,再次启动 QEMU 的时候就有 WebUI 了。