答案内容由AI生成,仅供参考:
解决方案
方法一:检查并创建 systemd 服务软链接(推荐)
参考 OpenUBMC 社区已有案例 #3321 的解决方案:
“直接拉取同步 PR_235 分支即可自动加载,帖子中操作失败是因为
/root/workspace/manifest/build/product/BMC/openUBMC/rootfs/etc/systemd/system/multi-user.target.wants/下直接新建devmon.service,但实际这里新增的应该是/root/workspace/manifest/build/product/BMC/openUBMC/rootfs/etc/systemd/system/devmon.service的软链接。”
操作步骤如下:
# 1. 确认 devmon.service 是否存在
ls /etc/systemd/system/devmon.service
# 2. 若不存在,请确认源文件是否存在(通常由 Conan 或构建流程生成)
find /opt -name "devmon.service" 2>/dev/null
# 示例路径可能为:/opt/bmc/devmon/devmon.service
# 3. 如果找到源文件,则创建软链接到 multi-user.target.wants
sudo ln -s /opt/bmc/devmon/devmon.service /etc/systemd/system/multi-user.target.wants/devmon.service
# 4. 重新加载 systemd 配置并尝试启动服务
sudo systemctl daemon-reexec
sudo systemctl daemon-reload
sudo systemctl start devmon.service
# 5. 检查服务状态
systemctl status devmon.service
注意:路径可能因构建方式不同而异,请结合
openUBMC构建输出确定准确路径。
方法二:验证是否已将 devmon 添加到 manifest 构建配置
确保 devmon 已正确集成到产品构建系统中。检查以下文件:
-
manifest/build/subsys/rc/hardware.yml或其他 yml 文件- conan: "devmon/1.2.23@openUBMC.release/stable" -
manifest/build/product/BMC/openUBMC/manifest.ymldependencies: - devmon/1.2.23@openUBMC.release/stable
若未添加,请补充后使用 bingo build 重新构建固件。
方法三:确认 devmon 服务是否被 Conan 包管理器正确安装
运行以下命令检查 devmon 是否被 Conan 正常部署:
# 查询 Conan 是否安装了 devmon 包
conan list "devmon*" -r=openubmc_dev
# 查看安装路径
conan info devmon/1.2.23@openUBMC.release/stable --paths
确保相关二进制文件和服务描述文件已部署到目标路径。
点击此处查看详细分析解答
devmon 组件加载异常问题分析与解决方案
问题概述
devmon 组件在系统启动过程中未能正常加载,导致多个系统组件(如 chassis、firmware_mgmt、power_mgmt 等)无法获取其提供的设备监控服务。核心错误日志为:
fetch devmon objects failed, err=org.freedesktop.DBus.Error.ServiceUnknown: The name bmc.kepler.devmon was not provided by any .service files
该错误表明 D-Bus 系统无法找到 bmc.kepler.devmon 服务的 .service 配置文件,因此无法启动该服务。
根本原因分析
根据上下文信息和类似问题的社区讨论,devmon 组件未能加载的根本原因是其对应的 systemd 服务文件未被正确部署或注册。
具体表现为:
- 虽然已通过 Git 克隆获取了
devmon源码(git@gitcode.com:openUBMC/devmon.git),但缺少将其作为系统服务安装的步骤。 - 系统依赖
.service文件来声明如何启动 D-Bus 服务。若该文件缺失或未软链接至 systemd 加载目录,则即使程序存在也无法自动启动。 - 从日志可以看出,多个核心模块(如 chassis、bios、thermal_mgmt 等)都在尝试从
devmon获取设备信息,说明devmon是南向设备管理的关键组件。
解决方案
方法一:检查并创建 systemd 服务软链接(推荐)
参考 OpenUBMC 社区已有案例 #3321 的解决方案:
“直接拉取同步 PR_235 分支即可自动加载,帖子中操作失败是因为
/root/workspace/manifest/build/product/BMC/openUBMC/rootfs/etc/systemd/system/multi-user.target.wants/下直接新建devmon.service,但实际这里新增的应该是/root/workspace/manifest/build/product/BMC/openUBMC/rootfs/etc/systemd/system/devmon.service的软链接。”
操作步骤如下:
# 1. 确认 devmon.service 是否存在
ls /etc/systemd/system/devmon.service
# 2. 若不存在,请确认源文件是否存在(通常由 Conan 或构建流程生成)
find /opt -name "devmon.service" 2>/dev/null
# 示例路径可能为:/opt/bmc/devmon/devmon.service
# 3. 如果找到源文件,则创建软链接到 multi-user.target.wants
sudo ln -s /opt/bmc/devmon/devmon.service /etc/systemd/system/multi-user.target.wants/devmon.service
# 4. 重新加载 systemd 配置并尝试启动服务
sudo systemctl daemon-reexec
sudo systemctl daemon-reload
sudo systemctl start devmon.service
# 5. 检查服务状态
systemctl status devmon.service
注意:路径可能因构建方式不同而异,请结合
openUBMC构建输出确定准确路径。
方法二:验证是否已将 devmon 添加到 manifest 构建配置
确保 devmon 已正确集成到产品构建系统中。检查以下文件:
-
manifest/build/subsys/rc/hardware.yml或其他 yml 文件- conan: "devmon/1.2.23@openUBMC.release/stable" -
manifest/build/product/BMC/openUBMC/manifest.ymldependencies: - devmon/1.2.23@openUBMC.release/stable
若未添加,请补充后使用 bingo build 重新构建固件。
方法三:确认 devmon 服务是否被 Conan 包管理器正确安装
运行以下命令检查 devmon 是否被 Conan 正常部署:
# 查询 Conan 是否安装了 devmon 包
conan list "devmon*" -r=openubmc_dev
# 查看安装路径
conan info devmon/1.2.23@openUBMC.release/stable --paths
确保相关二进制文件和服务描述文件已部署到目标路径。
补充说明
devmon 组件的功能定位
根据搜索结果,devmon 是一个设备监控系统,主要功能包括:
- 监控和管理各种硬件设备(如 PCIe 设备、扩展卡)
- 提供 D-Bus 接口:
bmc.dev.devmon - 支持设备重新发现(
DiscoverDevices())和列表查询(GetDeviceList()) - 作为 component_drivers 驱动框架的基础服务,加载
.so驱动文件
为什么这么多组件都依赖 devmon?
日志显示 chassis、pcie_device、general_hardware 等数十个模块均试图从 devmon 获取对象,说明它是:
- 设备拓扑发现的核心代理
- D-Bus 资源协作机制的中枢
- 南向设备驱动注册与加载的统一入口
验证是否修复成功
执行以下命令验证 devmon 是否正常运行:
# 查看 D-Bus 服务是否可见
busctl --user list | grep bmc.kepler.devmon
# 查看 devmon 资源树(如果有提供此接口)
busctl --user tree bmc.kepler.devmon
# 再次查看 app.log 是否仍有 ServiceUnknown 报错
grep "devmon" /var/log/app.log | grep "ServiceUnknown"
若不再出现 ServiceUnknown 错误,并且 systemctl status devmon.service 显示 active (running),则表示问题已解决。
参考资料
- 社区帖 #3321:devmon 服务未加载问题
- openUBMC devmon 特性设计说明书
object_manage.lua(674)日志来自通用对象获取逻辑,所有模块共用此机制,进一步说明devmon是关键基础设施组件。