当前位置: 首页 > news >正文

【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.mtd

3. 配置与启动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"

然后创建或修改以下文件:

  1. ~/openbmc/meta-phosphor/recipes-phosphor/image/obmc-phosphor-image.bbappend
OBMC_IMAGE_EXTRA_INSTALL_${MACHINE} += "webui-vue"
  1. ~/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-image

5.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=virtio

7.3 多实例运行

有时候你可能需要同时运行多个OpenBMC实例进行测试。这时需要确保每个实例使用不同的:

  • 镜像文件
  • 端口映射
  • MAC地址(通过-net nic,macaddr=xx:xx:xx:xx:xx:xx指定)

这样可以避免网络冲突和资源争用问题。

http://www.cnnetsun.cn/news/1596845.html

相关文章:

  • 突破语言壁垒:Unity游戏翻译破局工具如何重构跨文化体验
  • Labwindows/CVI实战指南:文本框控件的动态交互实现
  • 【Blender】从零开始打造逼真蘑菇:建模全流程解析
  • Pixel Dream Workshop 生成超分辨率图像:4K高清细节放大技术详解
  • CosyVoice多说话人混合生成实验:创造新颖虚拟角色音色
  • 告别B站缓存播放难题:m4s-converter的高效视频转换解决方案
  • Zotero Duplicates Merger:学术文献库智能去重解决方案
  • 大气层系统完全指南:从零开始的Switch自定义固件终极教程
  • ORA-01502错误解析:如何快速恢复不可用索引的分区状态
  • NCM解密工具完全指南:3大场景+5个技巧+2套方案实现音频自由
  • DASD-4B-Thinking在Linux系统管理中的自动化运维实践
  • Win11Debloat终极指南:4步轻松优化Windows系统性能
  • 半导体制造中的ProcessJob与Control Job:从定义到实战避坑指南
  • iMetaOmics 3卷1期封面:地球之肠
  • 吸尘机EMC整改案例分享
  • 5分钟搞定:Mac用户制作Windows启动盘的终极指南
  • 颠覆中文字体困境:思源宋体CN 7字重开源方案深度解析
  • 仙侠H5手游【九州封魔劫代金券内购版】服务端图文搭建教程(含资源下载+部署过程)
  • CFPushButton:Arduino轻量级按键去抖与事件驱动库
  • DownKyi:开源工具高效管理视频资源的全流程指南
  • VSCode右键菜单失效了?别慌,教你三步排查与修复(附清理旧注册表项技巧)
  • 程序员必知的磁盘冷知识:为什么内圈磁道比外圈存储密度更高?
  • GPT-5.4 API 完全指南:性能实测、成本测算与接入方案(2026)
  • 从零到一:ACM算法学习路线、清单
  • TegraRcmGUI完全指南:如何在Windows上轻松完成Switch破解注入
  • FLUX.小红书极致真实V2色彩科学:P3广色域适配与小红书显示优化
  • MelonLoader零门槛掌握:从问题诊断到深度优化的Unity Mod加载解决方案
  • Stable Yogi Leather-Dress-Collection 创意作品展:从概念草图到高清渲染的AI之旅
  • Phi-4-mini-reasoning一文详解:专为多步推理设计的开源大模型实战
  • 怎样避免网站因 SEO 优化而被搜索引擎惩罚