【OpenBMC 系列】5.实战指南:利用QEMU快速搭建ast2600-evb开发环境
1. 环境准备搭建开发环境的基础工作在开始使用QEMU模拟ast2600-evb开发环境之前我们需要先准备好基础环境。这个环节看似简单但却是整个流程中最容易出问题的部分。我自己在搭建过程中就遇到过不少坑比如依赖库版本冲突、权限问题等等。首先我们需要一个干净的Linux环境。推荐使用Ubuntu 20.04 LTS或更新版本因为这个发行版对开发者友好社区支持完善。如果你使用的是Windows系统可以考虑安装WSL2Windows 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/labeldocker-builder,targetromulus/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 TEMPLATECONFmeta-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,formatraw,ifmtd \ -net nic \ -net user,hostfwd:127.0.0.1:2222-:22,hostfwd:127.0.0.1:2443-:443,hostfwdudp:127.0.0.1:2623-:623,hostnameqemu而对于自行编译的ast2600-evb镜像启动命令稍有不同./qemu-system-arm -m 1024 -M ast2600-evb -nographic \ -drive file./obmc-phosphor-image-evb-ast2600.static.mtd,formatraw,ifmtd \ -net nic \ -net user,hostfwd:127.0.0.1:2222-:22,hostfwd:127.0.0.1:2443-:443,hostfwdudp:127.0.0.1:2623-:623,hostnameqemu这里有几个关键参数需要注意-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,hostfwdudp:127.0.0.1:623-:623根据我的经验使用非标准端口映射时某些工具如IPMI客户端可能需要额外配置才能正常工作。而使用标准端口则可能因为端口已被占用而启动失败。4. 系统初始化与基本操作QEMU启动后你会看到大量的系统日志输出。这个过程可能需要几分钟时间具体取决于你的系统性能。4.1 登录系统当系统启动完成后你会看到登录提示。OpenBMC的默认凭据是用户名root密码0penBmc注意第一个字符是数字0登录后你可以使用obmcutil工具检查系统状态rootopenbmc:~# 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环境中有一些常用的管理命令重启BMCobmcutil 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.bbappendOBMC_IMAGE_EXTRA_INSTALL_${MACHINE} webui-vue~/openbmc/meta-phosphor/recipes-phosphor/packagegroups/packagegroup-obmc-apps.bbappendRDEPENDS_${PN}-inventory_${MACHINE} webui-vue修改完成后需要重新编译镜像bitbake obmc-phosphor-image -c clean bitbake obmc-phosphor-image5.2 使用SSH连接SSH是管理OpenBMC系统最灵活的方式。使用之前设置的端口映射可以通过以下命令连接ssh -p 2222 root127.0.0.1如果使用的是标准端口映射则可以直接使用ssh root127.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 filepersistent.qcow2,formatqcow2,ifvirtio7.3 多实例运行有时候你可能需要同时运行多个OpenBMC实例进行测试。这时需要确保每个实例使用不同的镜像文件端口映射MAC地址通过-net nic,macaddrxx:xx:xx:xx:xx:xx指定这样可以避免网络冲突和资源争用问题。