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

BMC开发修改代码流程

BMC 代码修改以及镜像构建到版本发布流程过程。主要对devtool的使用总结流程:

devtool modify --> 编辑代码 --> devtool build --> devtool build-image --> 部署测试 --> devtool finish

1.切换到项目目录

cd <project_name>/openbmc

2.初始化编译环境

. setup <machine_name>

3.将代码提取到专属工作区

需要将想要修改的软件包从 OpenBMC 庞大的源代码树中“提取”到你专属的工作区。devtool modify命令创建一个可编辑的工作副本在workspace/sources目录下

devtool modify <recipe_name>

执行此命令后,devtool 会做两件事:

  1. 将指定软件包的源代码克隆到 workspace/sources/<recipe-name> 目录下。
  2. 在这个源代码目录里自动创建一个名为 devtool 的新分支,方便你管理自己的修改。

4.编写个和修改代码

现在你可以进入源代码目录,像进行普通软件开发一样修改代码了。
这个目录下的代码是一个独立的 Git 仓库。你可以自由地创建分支、提交更改。所有修改都只存在于你的 workspace 中,不会影响原始的软件包

cd workspace/sources/<recipe_name> # 在此使用你喜欢的编辑器或IDE进行代码修改 # ... 编辑代码 ...

5.构建单个软件包快速验证

完成初步修改后,你可以先单独构建这个软件包,检查编译是否通过。

. setup <machine_name> devtool build <recipe_name>

这个命令会调用 BitBake 只编译你修改的这个包及其依赖,比构建完整镜像快得多,适合快速验证代码是否有语法错误。
它的编译产物在 workspace/sources/bmcweb/oe-workdir/package/usr/bin 下。

也可以将这个 bin 文件下载下来直接去替换运行 BMC 机器上 /usr/bin 目录下的同名文件,然后添加可执行权限chmod +x <filename>, 重启该 bin 文件对应的服务。用systemctl | grep <key_words>找到服务名,执行systemctl restart <serve_name>重启服务。

6.将修改集成到完整 BMC 镜像中

当你确认单个软件包编译通过后,就需要将它集成到完整的 BMC 固件镜像里进行整体测试

# 构建包含你所有工作区修改的完整镜像 # <image-name> 通常是 obmc-phosphor-image (执行 . setup <machine_name> 时会输出镜像名) devtool build-image <image_name> # 也可以用 -p 参数指定要构建哪些 workspace/source 下面的包 devtool build-image -p <package1,package2,...> <image-name>

这个命令在背后做了几件关键的事:

  1. 它会检测你 workspace 里所有修改过的软件包。
  2. 为目标镜像(如 obmc-phosphor-image)动态创建一个 .bbappend 文件,用于将你修改的软件包添加到镜像安装列表中。
  3. 最后调用 bitbake <image_name> 开始构建完整的 BMC 固件镜像。

构建成功后,你会在 tmp/deploy/images/<your_machine>/ 目录下找到生成的镜像文件(如 obmc-phosphor-image-<machine>.ubi.mtd)。

7.部署和测试

将新生成的镜像部署到你的 BMC 硬件或 QEMU 模拟器上进行测试。
有两种主要的测试方法:

  1. 完整镜像刷新 (适用于大版本测试):将步骤四生成的完整镜像文件(通常是 .ubi.mtd 或 .tar 文件)通过 flash-bmc 或 pflash 等工具刷新到 BMC 的 Flash 中。
  2. 快速更新单个软件包 (适用于小范围调试):如果只是为了验证一个服务的修改,可以只部署单个软件包。前提是你的 BMC 已经在运行且能通过网络访问。这个方法非常快,无需重启 BMC。
# <target> 是你的 BMC 的 IP 地址或主机名 devtool deploy-target <recipe_name> root@<bmc_ip>

8.清理和固化你的修改

当测试通过,你的修改达到预期效果后,需要将更改最终确定下来。

# 1. 生成一个包含你所有修改的补丁文件 devtool finish <recipe_name> <layer_path> # <layer-path> 是你想将修改保存到的目标层,例如 meta-my-company

这个 finish 命令会:

  1. 将你 workspace 中的修改(所有提交)生成一个或一系列补丁文件。
  2. 将这些补丁文件复制到指定的 Yocto 层(Layer)中,更新原始的 Recipe。
  3. 最后,它会将你的软件包从 devtool 的工作区中移除,完成整个开发循环。
http://www.gsyq.cn/news/1464233.html

相关文章:

  • 抖音视频下载架构深度解析:douyin-downloader的技术实现与高级应用
  • 2026年当下,企业如何联系专业的deepseek关键词优化服务商实现精准获客? - 2026年企业资讯
  • 告别卡顿!手把手教你将16位遥感TIF转为8位,并搞定ArcMap中的shp文件创建与标注
  • macOS Tahoe 系统 Spotlight 搜索工具大升级,大幅提升工作效率!
  • 全球仅17家持牌机构掌握的“动态合规路由”技术:AI驱动的智能汇款路径决策引擎揭秘
  • ai辅助开发:让智能体设计并实现基于rabbitmq的日志分析系统
  • Flutter Icons 图标库保姆级使用指南:从基础调用到自定义图标实战
  • Maya到Web 3D转换神器:5步掌握glTF插件使用技巧
  • 保姆级教程:在Windows 10上用PyBullet加载UR5机器人URDF模型(附完整文件下载)
  • 保姆级教程:用Omnic和Origin搞定FTIR光谱图,从CSV数据到发表级图表
  • 效率提升秘籍:用快马AI一键生成‘香香’宠物应用可扩展代码框架
  • 2026年海珠区黄金回收值得关注!这些专业广州黄金回收品牌你知道几个? - 极速版本
  • HP M126nw打印机实测:PS切片打印超长PDF的完整避坑指南(含Acrobat页眉页脚设置)
  • OpenCore Legacy Patcher终极指南:如何让旧Mac焕发新生
  • 衡水地区,橡胶减震垫块厂商哪家交货快? - mypinpai
  • 时序伪造定位技术:DDNet框架解析与应用
  • 从固话到5G承载网:PCM30/32(E1)技术是如何‘老树开新花’的?
  • Flutter上架AppStore,我踩过的permission_handler权限坑(附完整Podfile配置)
  • AEC-Q氦质谱检漏试验
  • 【2027最新】基于SpringBoot+Vue的网上服装商城管理系统源码+MyBatis+MySQL
  • 告别枯燥理论:用PyTorch+强化学习打造一个能陪你下五子棋的AI伙伴(实战教程)
  • 别再对着头皮信号发愁了!手把手教你用Brainstorm完成EEG源定位(从数据导入到结果可视化)
  • 2026年6月中山评价好的新中式高定服装加盟选哪家推荐,新中式高定服装加盟/国风源头,新中式高定服装加盟哪家好推荐 - 品牌推荐师
  • 微信小程序实战:幸运抽奖小程序
  • 免费Steam创意工坊下载器WorkshopDL:跨平台模组下载完整指南
  • 地铁客流实时预测系统源码(Vue+Django+LSTM,含热力图与断面分析)
  • 吴恩达深度学习笔记:手把手教你推导深层神经网络的前向与反向传播(附矩阵维度检查技巧)
  • 别再只盯着PS的GPIO了!手把手教你用Vivado配置AXI GPIO软核,点亮PL端第一个LED
  • 2026年5月正规的展馆设计维护推荐,主题展厅设计/文化馆设计/展馆设计/展厅设计/纪念馆设计,展馆设计制作推荐 - 品牌推荐师
  • Linux → QNX 程序移植:API 差异与适配指南