GuJ
(Gu J)
1
问题描述
在component_drivers组件中新增了一个I2C传感器,参考里面的文档建立的,应该是创建成功了,有对应的.so文件。devmon组件创建芯片节点的时候报错,
是需要在devmon组件增加I2C传感器的相关信息吗?
环境信息
-
操作系统:Ubuntu 24.04
-
软件版本:OpenUBMC2512
-
- conan: “libmcpp/1.2.64@openubmc/stable”
- conan: "component_drivers/1.2.74@openubmc/stable"
- conan: "devmon/1.2.23@openubmc/stable"
重现步骤
-
[第一步]
-
[第二步]
-
[第三步]
期望结果
[您希望实现什么]
实际结果
[实际发生了什么,包含错误信息]
尝试过的解决方案
[列出您已经尝试过的解决方案及结果]
答案内容由AI生成,仅供参考:
结论:是否需要在 devmon 中增加信息?
是的,必须增加!
仅仅在 component_drivers 添加驱动是不够的。
您还需要:
- 在系统配置中声明该芯片(CSR / ManagementTopology)
- 确保
devmon 能解析该配置并生成设备节点
- 必要时为
devmon 添加插件支持自定义芯片类型
devmon 不是全自动发现所有 .so 驱动的加载器,而是基于配置驱动的设备抽象框架。
点击此处查看详细分析解答
I2C传感器芯片在devmon中无法识别问题分析与解决方案
根据您提供的日志、环境信息及上下文数据,以下是针对“在component_drivers中新增I2C传感器后,devmon组件无法创建芯片节点”的系统性分析与解决方案。
问题描述
您已在 component_drivers 组件中成功添加了一个新的 I2C 传感器驱动 libTpt29511a.so,并确认 .so 文件已正确生成和部署。但在系统启动时,devmon 报错:
devmon WARNING: device_topo.cpp(454): failed to create or get chip node: Tpt29511a_Sensor_0101
这表明 devmon 在尝试创建该传感器对应的设备节点时失败,核心问题是 devmon 未能识别或支持该新定义的芯片类型。
根本原因分析
1. devmon 需要明确的芯片类型定义
从知识图谱可知:
devmon 是负责设备树构建、硬件拓扑管理的核心服务,通过扫描驱动信息动态生成设备对象。
devmon 依赖 component_drivers 提供的元数据来创建 D-Bus 设备路径和芯片节点。
- 若芯片类型未在
devmon 可识别的类型列表中(如 Chip_Tpt29511a_Sensor 未注册),即使 .so 加载成功,也无法创建节点。
关键点:仅在 component_drivers 中添加驱动并生成 .so 文件是不够的;devmon 必须能解析并处理该芯片类型的定义。
2. 缺少芯片类型配置或元数据传递
devmon 通过以下方式获取设备信息:
- 解析来自
component_drivers 的驱动元数据(例如通过 JSON 描述符或 CSR 配置)。
- 根据配置自动映射到
bmc.kepler.devmon D-Bus 接口下的设备模型。
如果新芯片未在以下任一机制中声明,则 devmon 将视为“未知芯片类型”而拒绝创建节点。
3. 潜在依赖缺失或版本不匹配
尽管您使用了较新的版本:
- component_drivers/1.2.74@openubmc/stable
- devmon/1.2.23@openubmc/stable
但可能存在:
devmon 未更新以支持新的芯片类型 Tpt29511a_Sensor_*
component_drivers 输出的元数据格式与 devmon 的期望不符
- 缺少必要的插件注册或 D-Bus 接口绑定
解决方案
方案一:确保芯片类型在 devmon 支持列表中
步骤:
-
检查是否存在芯片类型的定义文件(CSR 或 JSON 配置)
在 SR(System Resource)配置或 CSR 文件中,必须包含如下结构:
"Tpt29511a_Sensor_0101": {
"Type": "Chip",
"Driver": "libTpt29511a.so",
"Bus": "I2c_8",
"Address": 0x48,
"Compatible": "tpt,29511a"
}
-
确认该配置被正确加载到 ManagementTopology
- 检查
ManagementTopology 配置是否包含该传感器节点。
- 确保其父总线(如
I2c_8)已正确初始化。
-
验证 devmon 是否加载了该信息
busctl tree bmc.kepler.devmon
查看是否有 /bmc/kepler/Chips/Tpt29511a_Sensor_0101 节点。
方案二:更新 devmon 插件或注册机制
若 devmon 不支持自定义芯片类型:
-
实现芯片适配器插件
在 devmon 中增加对 Tpt29511a 的适配支持:
- 创建
Tpt29511aDriverAdapter.cpp
- 实现
IDeviceDriverAdapter 接口
- 在 CMakeLists.txt 中注册为 plugin
-
确保构建系统将其打包进 devmon
add_subdirectory(drivers/tpt29511a)
target_link_libraries(devmon PRIVATE Tpt29511aAdapter)
-
重启 devmon 并观察日志
systemctl restart bmc.kepler.devmon
journalctl -u bmc.kepler.devmon | grep Tpt29511a
方案三:检查并修复设备树与配置一致性
1. 验证 I2C 总线是否可用
使用 i2cdetect 检查物理通信是否正常(尽管您关注的是拓扑问题,但底层通信是前提):
i2cdetect -y -r 8
应看到设备地址 0x48(假设为 TPT29511A 默认地址)出现。
若未检测到,请检查:
2. 确保 devmon 读取了正确的 ManagementTopology
- 确认配置已部署至
/etc/bmc/management_topology.json
- 重启
devmon 后查看是否重新解析配置
已尝试方案评估(根据您提供内容推断)
| 尝试方案 |
是否合理 |
建议补充 |
编译生成 libTpt29511a.so |
正确第一步 |
但需配合配置 |
| 查看 log 中关键字 |
合理诊断 |
可结合 busctl introspect 查 D-Bus 接口 |
| 假设 devmon 自动识别 |
不成立 |
devmon 需明确配置或插件支持 |
参考资料支持
-
OpenUBMC 传感器开发文档
说明了如何定义传感器、配置 CSR、注册驱动。
-
devmon 架构设计文档(来自 knowledge base)
明确指出 devmon 收集 component_drivers 提供的驱动元数据,动态生成 D-Bus 路径。
-
BMC Studio 板卡适配指南
展示了如何通过拖拽方式将 LM75 传感器连接到 I2c_8,实际等价于手动编写 CSR 配置。
期望结果(修复后应达成)
devmon 成功创建 Tpt29511a_Sensor_0101 节点
- D-Bus 上可见设备路径
/bmc/kepler/Chips/Tpt29511a_Sensor_0101
app.log 不再出现 failed to create or get chip node 警告
- 传感器数据可通过
bmc.kepler.sensor 服务读取
i2cdetect 可探测到设备地址
- Redfish API 可查询对应温度/状态
推荐操作流程总结
| 步骤 |
操作 |
| 1 |
确认在 ManagementTopology 或 CSR 中添加了 Tpt29511a_Sensor_0101 定义 |
| 2 |
检查 libTpt29511a.so 是否被 devmon 加载(`lsof |
| 3 |
使用 busctl tree bmc.kepler.devmon 验证 D-Bus 对象是否存在 |
| 4 |
如仍失败,在 devmon 中增加适配器插件支持 |
| 5 |
重启 devmon 并检查日志输出 |
| 6 |
使用 i2cdetect 验证底层 I2C 通信 |
结论:是否需要在 devmon 中增加信息?
是的,必须增加!
仅仅在 component_drivers 添加驱动是不够的。
您还需要:
- 在系统配置中声明该芯片(CSR / ManagementTopology)
- 确保
devmon 能解析该配置并生成设备节点
- 必要时为
devmon 添加插件支持自定义芯片类型
devmon 不是全自动发现所有 .so 驱动的加载器,而是基于配置驱动的设备抽象框架。
建议下一步
请提供:
Tpt29511a_Sensor_0101 的 CSR 或 JSON 配置片段
ManagementTopology 中的相关节点
devmon 的完整日志(含启动阶段)
以便进一步判断是配置缺失还是代码不支持问题。
可以参考这个文档的 第六节 6. 新增Chip驱动开发规范和步骤,看看是不是少了哪步没配置的。
GuJ
(Gu J)
5
我是参考这个文档弄的,检查了几遍没有发现问题。我在devmon组件中的create_node_info打印信息,将objects输出,发现objects中没有我配置的传感器信息。传感器的配置信息我放到 了这个文件中vpd/vendor/Huawei/Server/Kunpeng/openUBMC/root.sr,这个文件中我还配置了Pca9555传感器是可以正常识别的。是解析CSR文件的时候把我配置的传感器信息删除了吗?
root.sr不是devmon直接加载的,那个是hwdiscovery加载,devmon同步的。hwdiscovery加载时候识别不到component_drivers配置的新驱动,认为对象没有对应的组件配置,会把对象剔除。目前都是在FormatVersion为5.00的csr配置component_drivers新增的对象。
GuJ
(Gu J)
7
如果需要hwdiscovery加载时候识别component_drivers配置的新驱动,那么我是需要在component_drivers组件FormatVersion为5.00的csr中配置新增传感器的信息吗?
GuJ
(Gu J)
9
component_drivers组件的的drivers目录下有很多sr文件,我将芯片的信息加到那个sr文件中才能让hwdiscovery识别,还是在root.sr中添加Connecter,去加载添加芯片信息后的.sr文件。
GuJ
(Gu J)
11
如果加载不上FormatVersion为5.00的csr与hwdiscovery的版本有关系吗?我记得好像有的hwdiscovery支持CSR的最高版本FormatVersion为4.0。
目前hwdiscovery仅支持加载格式版本4.00以下的csr
guoxin
(昆仑太科_郭馨)
13
请问新增Chip驱动,无法正确加载这个问题您后来解决了么?
GuJ
(Gu J)
16