【OpenBMC 系列】5.实战指南:利用QEMU快速搭建ast2600-evb开发环境
1. 环境准备:搭建开发环境的基础工作
在开始使用QEMU模拟ast2600-evb开发环境之前,我们需要先准备好基础环境。这个环节看似简单,但却是整个流程中最容易出问题的部分。我自己在搭建过程中就遇到过不少坑,比如依赖库版本冲突、权限问题等等。
首先,我们需要一个干净的Linux环境。推荐使用Ubuntu 20.04 LTS或更新版本,因为这个发行版对开发者友好,社区支持完善。如果你使用的是Windows系统,可以考虑安装WSL2(Windows Subsystem for Linux),实测下来性能表现相当不错。
接下来是安装必要的依赖包。打开终端,执行以下命令:
sudo apt update sudo apt install -y build-essential git diffstat gawk chrpath wget cpio \ python3 python3-pip python3-pexpect python3-git python3-jinja2 \ xz-utils debianutils iputils-ping libssl-dev libelf-dev bc这些依赖包包含了编译工具链、Python环境以及各种开发库。我建议在执行安装前先检查系统中是否已经安装了这些包,避免重复安装导致冲突。
对于QEMU的安装,我们有两个选择:使用系统自带的QEMU或者从源码编译。如果你只是想快速体验OpenBMC,可以直接使用系统自带的版本:
sudo apt install -y qemu-system-arm但如果你想获得更好的兼容性和性能,建议从OpenBMC维护的QEMU fork源码编译。这个版本针对OpenBMC做了专门的优化和适配,能更好地模拟ast2600-evb硬件环境。
2. 获取OpenBMC镜像:官方与自定义编译
有了基础环境后,下一步就是获取OpenBMC镜像。这里有两种主要方式:使用官方预编译镜像和自己从源码编译。两种方式各有优缺点,我会详细介绍每种方法的操作步骤和注意事项。
2.1 使用官方预编译镜像
对于初学者或者只是想快速体验OpenBMC的开发者来说,使用官方预编译镜像是最方便的选择。OpenBMC项目在Jenkins上提供了最新的成功构建镜像:
wget https://jenkins.openbmc.org/job/latest-master/label=docker-builder,target=romulus/lastSuccessfulBuild/artifact/openbmc/build/tmp/deploy/images/romulus/obmc-phosphor-image-romulus.static.mtd下载完成后,记得检查文件的完整性。我遇到过因为网络问题导致下载不完整的情况,可以通过检查文件大小或者MD5值来确认:
ls -lh obmc-phosphor-image-romulus.static.mtd md5sum obmc-phosphor-image-romulus.static.mtd官方镜像的优点是开箱即用,不需要漫长的编译等待。但缺点是可能不包含你需要的特定功能或定制化配置,而且版本可能不是最新的。
2.2 自行编译ast2600-evb镜像
如果你需要特定的功能或者想深入了解OpenBMC的构建系统,从源码编译是更好的选择。这个过程会比较耗时,但能让你对系统有更深入的理解。
首先,我们需要获取OpenBMC的源码:
git clone https://github.com/openbmc/openbmc.git cd openbmc然后初始化构建环境,这里我们以ast2600-evb为目标平台:
export TEMPLATECONF=meta-evb/meta-evb-ast2600/conf source setup evb-ast2600接下来就可以开始编译了。这个过程可能会花费几个小时,取决于你的机器性能:
bitbake obmc-phosphor-image编译过程中可能会遇到各种依赖问题。根据我的经验,最常见的问题是网络连接导致的下载失败。这种情况下,可以尝试多次执行bitbake命令,或者手动下载缺失的包放到对应的目录中。
编译完成后,生成的镜像文件位于:
openbmc/build/evb-ast2600/tmp/deploy/images/evb-ast2600/obmc-phosphor-image-evb-ast2600.static.mtd3. 配置与启动QEMU模拟器
有了镜像文件后,我们就可以启动QEMU模拟器了。这个环节需要特别注意端口映射和网络配置,否则后续的服务访问可能会遇到问题。
3.1 基本启动命令
对于官方预编译的romulus镜像,启动命令如下:
./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而对于自行编译的ast2600-evb镜像,启动命令稍有不同:
./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这里有几个关键参数需要注意:
-m指定内存大小,ast2600-evb需要更多内存-M指定机器类型,必须与镜像匹配hostfwd参数设置端口转发,这是后续访问服务的关键
3.2 端口映射详解
端口映射是QEMU网络配置中最容易出错的部分。在上述命令中,我们设置了三个端口转发:
- 2222 → 22 (SSH)
- 2443 → 443 (HTTPS)
- 2623 → 623 (IPMI)
这种映射方式的好处是可以避免与主机上的服务端口冲突。但如果你确定主机上没有使用这些端口,也可以直接映射到标准端口:
hostfwd=:127.0.0.1:22-:22,hostfwd=:127.0.0.1:443-:443,hostfwd=udp:127.0.0.1:623-:623根据我的经验,使用非标准端口映射时,某些工具(如IPMI客户端)可能需要额外配置才能正常工作。而使用标准端口则可能因为端口已被占用而启动失败。
4. 系统初始化与基本操作
QEMU启动后,你会看到大量的系统日志输出。这个过程可能需要几分钟时间,具体取决于你的系统性能。
4.1 登录系统
当系统启动完成后,你会看到登录提示。OpenBMC的默认凭据是:
- 用户名:root
- 密码:0penBmc(注意第一个字符是数字0)
登录后,你可以使用obmcutil工具检查系统状态:
root@openbmc:~# obmcutil state CurrentBMCState : xyz.openbmc_project.State.BMC.BMCState.Ready CurrentPowerState : xyz.openbmc_project.State.Chassis.PowerState.Off CurrentHostState : xyz.openbmc_project.State.Host.HostState.Off这个输出表示BMC已经准备就绪,但主机电源处于关闭状态。
4.2 基本系统管理
在OpenBMC环境中,有一些常用的管理命令:
- 重启BMC:
obmcutil poweron && obmcutil poweroff - 查看服务状态:
systemctl list-units - 查看日志:
journalctl -f
我建议在初次使用时,先熟悉这些基本命令,它们能帮助你快速诊断问题。
5. 访问Web界面与远程管理
OpenBMC提供了多种远程管理方式,包括Web界面、Redfish API和IPMI。根据你使用的镜像类型,可用的管理方式可能有所不同。
5.1 Web界面访问
对于romulus镜像,Web界面可以通过映射的HTTPS端口访问:
https://127.0.0.1:2443/如果是自行编译的ast2600-evb镜像,默认可能没有启用Web界面。这时需要按照以下步骤启用:
首先,确保在编译时包含了webui-vue组件。修改配置文件~/openbmc/build/evb-ast2600/conf/local.conf,添加:
CORE_IMAGE_EXTRA_INSTALL += "webui-vue"然后创建或修改以下文件:
~/openbmc/meta-phosphor/recipes-phosphor/image/obmc-phosphor-image.bbappend:
OBMC_IMAGE_EXTRA_INSTALL_${MACHINE} += "webui-vue"~/openbmc/meta-phosphor/recipes-phosphor/packagegroups/packagegroup-obmc-apps.bbappend:
RDEPENDS_${PN}-inventory_${MACHINE} += "webui-vue"修改完成后,需要重新编译镜像:
bitbake obmc-phosphor-image -c clean bitbake obmc-phosphor-image5.2 使用SSH连接
SSH是管理OpenBMC系统最灵活的方式。使用之前设置的端口映射,可以通过以下命令连接:
ssh -p 2222 root@127.0.0.1如果使用的是标准端口映射,则可以直接使用:
ssh root@127.0.0.1在SSH会话中,你可以执行各种管理命令,甚至可以直接修改系统配置。不过需要注意的是,某些关键配置的修改可能会导致系统无法正常启动,建议在修改前做好备份。
6. 常见问题排查
在实际使用过程中,你可能会遇到各种问题。这里我分享几个常见问题的解决方法,都是我踩过的坑。
6.1 QEMU启动失败
如果QEMU启动时直接崩溃或报错,首先检查:
- 镜像文件路径是否正确
- 镜像文件是否完整(检查MD5)
- 机器类型(-M参数)是否与镜像匹配
- 是否有足够的系统资源(特别是内存)
6.2 服务无法访问
如果Web界面或SSH无法连接,检查:
- QEMU启动时的端口映射是否正确
- 主机防火墙是否阻止了相关端口
- OpenBMC系统是否完全启动(通过控制台输出判断)
6.3 性能问题
QEMU模拟的性能可能不如真实硬件,特别是IO性能。如果感觉系统响应缓慢,可以尝试:
- 增加QEMU的内存分配(-m参数)
- 使用KVM加速(如果主机支持)
- 关闭不需要的模拟设备
7. 进阶配置与优化
当你熟悉了基本操作后,可能需要对环境进行一些优化和定制化配置。
7.1 使用KVM加速
如果你的主机支持KVM(检查/dev/kvm是否存在),可以在QEMU启动时添加加速参数:
-enable-kvm -cpu host这可以显著提高模拟性能,特别是在需要频繁IO操作时。
7.2 持久化存储配置
默认情况下,QEMU使用镜像文件作为存储介质,所有修改在退出后都会丢失。如果需要持久化存储,可以创建一个qcow2格式的磁盘镜像:
qemu-img create -f qcow2 persistent.qcow2 10G然后在启动QEMU时添加这个磁盘:
-drive file=persistent.qcow2,format=qcow2,if=virtio7.3 多实例运行
有时候你可能需要同时运行多个OpenBMC实例进行测试。这时需要确保每个实例使用不同的:
- 镜像文件
- 端口映射
- MAC地址(通过
-net nic,macaddr=xx:xx:xx:xx:xx:xx指定)
这样可以避免网络冲突和资源争用问题。
