openbmc仓库phosphor-bmc-code-mgmt基本逻辑(持续更新)
2026/4/21 14:36:44 网站建设 项目流程

文章目录

    • 1.说明
    • 2.分析代码
      • 2.1 `phosphor-bmc-code-mgmt-master/bmc/image_manager_main.cpp`
      • 2.2 `phosphor-bmc-code-mgmt-master/bmc/download_manager_main.cpp`
      • 2.3 `phosphor-bmc-code-mgmt-master/bmc/sync_manager_main.cpp`
      • 2.4 `phosphor-bmc-code-mgmt-master/bmc/software_manager.cpp`
      • 2.5 `phosphor-bmc-code-mgmt-master/bmc/item_updater_main.cpp`
      • 2.6 `web`--> 底层链路过程
        • 2.6.1 `redfish`端(版本信息获取)
    • 3.升级`bmc`固件
      • 3.1 `bmc`固件升级操作
        • 3.1.1 遵循`systemd`框架的升级方法
        • 3.1.2 执行原理
      • 3.2 遵循`redfish`规范操作方法
      • 3.3 使用`tftp`方法
    • 4. 固件打包步骤原理

1.说明

本节是分析介绍phosphor-bmc-code-mgmt仓库的代码的一些基本的流程逻辑。(持续更新)

参考资源:

  • docs/designs/code-update文档
  • code update
  • https://github.com/openbmc/phosphor-dbus-interfaces/blob/master/yaml/xyz/openbmc_project/Software/README.md

2.分析代码

2.1phosphor-bmc-code-mgmt-master/bmc/image_manager_main.cpp

代码流程如下:

intmain()--->sdbusplus::server::manager_tobjManager(bus,SOFTWARE_OBJPATH);--->bus.request_name(VERSION_BUSNAME);--->phosphor::software::manager::ManagerimageManager(bus);--->phosphor::software::manager::Watchwatch(loop,std::bind(std::mem_fn(&Manager::processImage),&imageManager,std::placeholders::_1));

其中,定义了:

conf.set_quoted('SOFTWARE_OBJPATH','/xyz/openbmc_project/software')conf.set_quoted('VERSION_BUSNAME','xyz.openbmc_project.Software.Version')conf.set_quoted('IMG_UPLOAD_DIR',get_option('img-upload-dir'))///tmp/imagesconf.set_quoted('MANIFEST_FILE_NAME',get_option('manifest-file-name'))//MANIFEST

实际dbus如下:

~# busctl introspect xyz.openbmc_project.Software.Version/xyz/openbmc_project/software NAME TYPE SIGNATURE RESULT/VALUE FLAGS org.freedesktop.DBus.Introspectable interface---.Introspect method-s-org.freedesktop.DBus.ObjectManager interface---.GetManagedObjects method-a{oa{sa{sv}}}-.InterfacesAdded signal oa{sa{sv}}--.InterfacesRemoved signal oas--org.freedesktop.DBus.Peer interface---.GetMachineId method-s-.Ping method---org.freedesktop.DBus.Properties interface---.Get method ss v-.GetAll method s a{sv}-.Set method ssv--.PropertiesChanged signal sa{sv}as--

采取tar命令解压压缩包文件。

2.2phosphor-bmc-code-mgmt-master/bmc/download_manager_main.cpp

代码流程如下:

intmain()--->sdbusplus::server::manager_tobjManager(bus,SOFTWARE_OBJPATH);///xyz/openbmc_project/software--->phosphor::software::manager::Downloadmanager(bus,SOFTWARE_OBJPATH);--->bus.request_name(DOWNLOAD_BUSNAME);//xyz.openbmc_project.Software.Download

实际dbus如下图:

~# busctl introspect xyz.openbmc_project.Software.Download/xyz/openbmc_project/software NAME TYPE SIGNATURE RESULT/VALUE FLAGS org.freedesktop.DBus.Introspectable interface---.Introspect method-s-org.freedesktop.DBus.ObjectManager interface---.GetManagedObjects method-a{oa{sa{sv}}}-.InterfacesAdded signal oa{sa{sv}}--.InterfacesRemoved signal oas

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询