在 openbmc 中动态生成服务文件

Dynamically generate a service file in openbmc

提问人:林姿均 提问时间:11/15/2023 更新时间:11/20/2023 访问量:15

问:

我需要在 openbmc 的 phosphor-software-manager 中实现 BIOS 更新功能。在以下代码片段中,versionId 是一个可以动态更改的变量。如何动态生成服务文件?或者在哪里生成服务文件?

void Activation::flashWriteHost()
{
    auto method = bus.new_method_call(SYSTEMD_BUSNAME, SYSTEMD_PATH,
                                      SYSTEMD_INTERFACE, "StartUnit");
    auto biosServiceFile = "obmc-flash-host-bios@" + versionId + ".service";
    method.append(biosServiceFile, "replace");
    try
    {
        auto reply = bus.call(method);
    }
    catch (const sdbusplus::exception_t& e)
    {
        error("Error in trying to upgrade Host Bios: {ERROR}", "ERROR", e);
        report<InternalFailure>();
    }
}
服务 嵌入式-linux systemd openbmc

评论

0赞 skandigraun 11/18/2023
这应该是一个常规的 systemd 服务文件 - 它是一个文本文件,在 systemd 的手册页中有相当详细的记录。服务文件通常位于文件夹中,但理论上可以跨系统更改/lib/systemd/system

答:

0赞 user1686 11/20/2023 #1

Systemd 本身从模板单元生成内存中的单元。在 之后指定的值(在 systemd 中称为“实例名称”)将在单元具有 或 扩展的任何地方自动替换。[email protected]@%i%I

与 进行比较,后者是自动生成的。[email protected][email protected]