openbmc仓库phosphor-bmc-code-mgmt基本逻辑(持续更新)

张开发
2026/5/18 10:03:55 15 分钟阅读
openbmc仓库phosphor-bmc-code-mgmt基本逻辑(持续更新)
文章目录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 updatehttps://github.com/openbmc/phosphor-dbus-interfaces/blob/master/yaml/xyz/openbmc_project/Software/README.md2.分析代码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

更多文章