当前位置: 首页 > 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.jsqmd.com/news/952616/

相关文章:

  • 抖音视频下载架构深度解析:douyin-downloader的技术实现与高级应用
  • BLE蓝牙开发避坑指南:从0x08到0x3E,手把手教你排查20+种连接断开原因
  • 面试(4)| 3.5 小时群面复盘第四弹:求职动机 + 未转正避坑全解析
  • 半监督对比学习与分布匹配技术在图像分类中的应用
  • 别再只懂format了!Moment.js/ Day.js 时间处理的7个高级场景与易错点复盘
  • 2026年当下,企业如何联系专业的deepseek关键词优化服务商实现精准获客? - 2026年企业资讯
  • 基于深度学习的人体姿态(人体动作)识别系统
  • AI报税不是“上传发票就完事”:财税专家紧急提醒的4个数据主权陷阱与3项国密算法合规要求
  • 告别卡顿!手把手教你将16位遥感TIF转为8位,并搞定ArcMap中的shp文件创建与标注
  • YOLO模型训练GPU训练环境配置方法
  • SWaRL框架:基于强化学习的代码水印技术解析
  • Prometheus子查询避坑指南:从‘一小时平均响应时间’案例看avg_over_time的正确用法
  • macOS Tahoe 系统 Spotlight 搜索工具大升级,大幅提升工作效率!
  • 避开Simulink仿真雷区:直流电机调速系统中算法选择与PI参数整定的那些坑
  • 全球仅17家持牌机构掌握的“动态合规路由”技术:AI驱动的智能汇款路径决策引擎揭秘
  • 深度学习目标检测中yolov5单目相机测速测距,,pyqt
  • DoIP网关实战:如何用Python模拟一个简易的DoIP网关(支持CAN转以太网)
  • 在Ubuntu 22.04上跑通你的第一个SDR LTE基站:基于srsRAN与USRP B210的完整配置流程
  • 中关村科金 AICC 智能联络中心:170 + 分院 2000 坐席无感切换,破解体检呼叫中心运维难题
  • 2026年6月市面上靠谱的冷冻库供应商推荐,防爆冷库/冷库/土建冷库/大型冷库/气调库/双温冷库,冷冻库公司哪家好 - 品牌推荐师
  • 三菱PLC通信避坑指南:从GX Works2设置到C#代码,一步步排查MX Component连接失败
  • ai辅助开发:让智能体设计并实现基于rabbitmq的日志分析系统
  • PyBullet仿真进阶:如何为你的UR5机器人模型自定义关节限位与颜色材质
  • Maya到Web 3D转换神器:5步掌握glTF插件使用技巧
  • Flutter Icons 图标库保姆级使用指南:从基础调用到自定义图标实战
  • 保姆级教程:在Windows 10上用PyBullet加载UR5机器人URDF模型(附完整文件下载)
  • 2026年天津二手车地址在哪?本地化服务与信任构建成竞争关键分水岭 - 2026年企业资讯
  • 从《哈利·波特》到代码:用Java词频统计带你发现文本中的秘密(附完整源码)
  • 避坑指南:Xilinx SelectIO IP核仿真中的异步复位与bitslip机制详解
  • 保姆级教程:用Omnic和Origin搞定FTIR光谱图,从CSV数据到发表级图表