新增I2C传感器芯片devmon组件无法识别

问题描述

在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"
  • 硬件配置:[如 CPU、内存等]

重现步骤

  1. [第一步]

  2. [第二步]

  3. [第三步]

期望结果

[您希望实现什么]

实际结果

[实际发生了什么,包含错误信息]

尝试过的解决方案

[列出您已经尝试过的解决方案及结果]

答案内容由AI生成,仅供参考:

:red_question_mark:结论:是否需要在 devmon 中增加信息?

:white_check_mark: 是的,必须增加!

仅仅在 component_drivers 添加驱动是不够的
您还需要:

  • 在系统配置中声明该芯片(CSR / ManagementTopology)
  • 确保 devmon 能解析该配置并生成设备节点
  • 必要时为 devmon 添加插件支持自定义芯片类型

:wrench: devmon 不是全自动发现所有 .so 驱动的加载器,而是基于配置驱动的设备抽象框架

点击此处查看详细分析解答

I2C传感器芯片在devmon中无法识别问题分析与解决方案

根据您提供的日志、环境信息及上下文数据,以下是针对“在component_drivers中新增I2C传感器后,devmon组件无法创建芯片节点”的系统性分析与解决方案。


:magnifying_glass_tilted_left: 问题描述

您已在 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 未能识别或支持该新定义的芯片类型


:puzzle_piece: 根本原因分析

1. devmon 需要明确的芯片类型定义

从知识图谱可知:

  • devmon 是负责设备树构建、硬件拓扑管理的核心服务,通过扫描驱动信息动态生成设备对象。
  • devmon 依赖 component_drivers 提供的元数据来创建 D-Bus 设备路径和芯片节点。
  • 若芯片类型未在 devmon 可识别的类型列表中(如 Chip_Tpt29511a_Sensor 未注册),即使 .so 加载成功,也无法创建节点。

:cross_mark: 关键点:仅在 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 接口绑定

:white_check_mark: 解决方案

:white_check_mark: 方案一:确保芯片类型在 devmon 支持列表中

步骤:

  1. 检查是否存在芯片类型的定义文件(CSR 或 JSON 配置)
    在 SR(System Resource)配置或 CSR 文件中,必须包含如下结构:

    "Tpt29511a_Sensor_0101": {
        "Type": "Chip",
        "Driver": "libTpt29511a.so",
        "Bus": "I2c_8",
        "Address": 0x48,
        "Compatible": "tpt,29511a"
    }
    
  2. 确认该配置被正确加载到 ManagementTopology

    • 检查 ManagementTopology 配置是否包含该传感器节点。
    • 确保其父总线(如 I2c_8)已正确初始化。
  3. 验证 devmon 是否加载了该信息

    busctl tree bmc.kepler.devmon
    

    查看是否有 /bmc/kepler/Chips/Tpt29511a_Sensor_0101 节点。


:white_check_mark: 方案二:更新 devmon 插件或注册机制

devmon 不支持自定义芯片类型:

  1. 实现芯片适配器插件
    devmon 中增加对 Tpt29511a 的适配支持:

    • 创建 Tpt29511aDriverAdapter.cpp
    • 实现 IDeviceDriverAdapter 接口
    • 在 CMakeLists.txt 中注册为 plugin
  2. 确保构建系统将其打包进 devmon

    add_subdirectory(drivers/tpt29511a)
    target_link_libraries(devmon PRIVATE Tpt29511aAdapter)
    
  3. 重启 devmon 并观察日志

    systemctl restart bmc.kepler.devmon
    journalctl -u bmc.kepler.devmon | grep Tpt29511a
    

:white_check_mark: 方案三:检查并修复设备树与配置一致性

1. 验证 I2C 总线是否可用

使用 i2cdetect 检查物理通信是否正常(尽管您关注的是拓扑问题,但底层通信是前提):

i2cdetect -y -r 8

应看到设备地址 0x48(假设为 TPT29511A 默认地址)出现。

:warning: 若未检测到,请检查:

  • 硬件连接
  • 上拉电阻
  • 地址是否冲突

2. 确保 devmon 读取了正确的 ManagementTopology

  • 确认配置已部署至 /etc/bmc/management_topology.json
  • 重启 devmon 后查看是否重新解析配置

:hammer_and_wrench: 已尝试方案评估(根据您提供内容推断)

尝试方案 是否合理 建议补充
编译生成 libTpt29511a.so :white_check_mark: 正确第一步 :check_mark: 但需配合配置
查看 log 中关键字 :white_check_mark: 合理诊断 可结合 busctl introspect 查 D-Bus 接口
假设 devmon 自动识别 :cross_mark: 不成立 devmon 需明确配置或插件支持

:books: 参考资料支持

  1. OpenUBMC 传感器开发文档

    说明了如何定义传感器、配置 CSR、注册驱动。

  2. devmon 架构设计文档(来自 knowledge base)

    明确指出 devmon 收集 component_drivers 提供的驱动元数据,动态生成 D-Bus 路径。

  3. BMC Studio 板卡适配指南

    展示了如何通过拖拽方式将 LM75 传感器连接到 I2c_8,实际等价于手动编写 CSR 配置。


:white_check_mark: 期望结果(修复后应达成)

  • 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 可查询对应温度/状态

:white_check_mark: 推荐操作流程总结

步骤 操作
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 通信

:red_question_mark:结论:是否需要在 devmon 中增加信息?

:white_check_mark: 是的,必须增加!

仅仅在 component_drivers 添加驱动是不够的
您还需要:

  • 在系统配置中声明该芯片(CSR / ManagementTopology)
  • 确保 devmon 能解析该配置并生成设备节点
  • 必要时为 devmon 添加插件支持自定义芯片类型

:wrench: devmon 不是全自动发现所有 .so 驱动的加载器,而是基于配置驱动的设备抽象框架


:telephone_receiver: 建议下一步

请提供:

  1. Tpt29511a_Sensor_0101 的 CSR 或 JSON 配置片段
  2. ManagementTopology 中的相关节点
  3. devmon 的完整日志(含启动阶段)

以便进一步判断是配置缺失还是代码不支持问题。

可以参考这个文档的 第六节 6. 新增Chip驱动开发规范和步骤,看看是不是少了哪步没配置的。

我是参考这个文档弄的,检查了几遍没有发现问题。我在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新增的对象。

如果需要hwdiscovery加载时候识别component_drivers配置的新驱动,那么我是需要在component_drivers组件FormatVersion为5.00的csr中配置新增传感器的信息吗?

是的

component_drivers组件的的drivers目录下有很多sr文件,我将芯片的信息加到那个sr文件中才能让hwdiscovery识别,还是在root.sr中添加Connecter,去加载添加芯片信息后的.sr文件。

得看你环境有支持哪个卡

如果加载不上FormatVersion为5.00的csr与hwdiscovery的版本有关系吗?我记得好像有的hwdiscovery支持CSR的最高版本FormatVersion为4.0。

目前hwdiscovery仅支持加载格式版本4.00以下的csr

请问新增Chip驱动,无法正确加载这个问题您后来解决了么?

还没解决。

请问还有什么问题吗

devmon组件加载新增芯片报错 - 交流互助区 - openUBMC 论坛这是现在的问题我又发了一个帖子

好的