新增对象不上树问题分析
更新时间: 2026/06/01
在Gitcode上查看源码

问题背景

  • 单板类型:自研板;
  • 软件版本:openubmc 25.12;
  • 涉及功能:新增资源上树,dbus注册,systemd,升级;
  • 触发条件:sr文件新增Expander对象,出包升级后,查看资源树是否上树。
  • 业务表现:预期资源正常上树;实际无法上树。

问题复现步骤

新增了一个对象,并声明了接口,通过mdbctl lsobj命令可以看到对象,但是mdbctl lsprop命令却看不到属性值,资源树也看不到这个对象。

关键日志信息

mdbctl lsobj命令查看结果: mdbctl lsprop命令查看结果: 资源树查询结果: app.log日志:

定位过程

  1. 查看与Expander对象相关的配置是否能够拿到数值; Expander温度可获取:
  2. 确认对象添加完毕;
  3. 用getprop可以看到值的来源,如果getprop的结果只有值的话就说明就是一个写死的值,同步没有生效; 从日志上看有取消自动上树的动作
  4. 日志中搜索unregister_mdb_object,可以搜关键词 unregister remove,结果未搜到该关键字;
  5. 代码函数on_add_object中加打印,确认对象上树的时候的回调执行流程; 代码修改: 日志打印: 日志结果可知,正常打印,无异常;
  6. 看下framework.log日志文件,确认对象组无下树操作;
  7. 检查一下环境上cat /dev/shm/dbus/.dbus环境变量是否与env对的上,再试试telnet下进行查询操作是否能查询到; 在telnet下执行后还是不能查到这个对象;
  8. 确认object_manage.on_add_object代码中注册对象添加方法无问题; 逻辑很简单,就是对象分发之后,新建个对象就行了;
  9. openubmc2509版本上新增本次修改的代码,尝试是否存在同样的问题,结果发现2509版本功能正常;
  10. 给on_add_object回调加个pcall看下是否有抛错; 结果,日志正常,未报错;
  11. 用debug_console注入一下代码到问题服务看下内存里有没有对象;
lua
  local class_mgnt = require 'mc.class_mgnt'
  local log_obj = class_mgnt('Expander').Expander_00["bmc.kepler.Object.Properties"]
  print(log_obj.ObjectName)

12. 确认组件的config.cfg是否配置MODULE_NAME字段; config.cfg的MODULE_NAME字段已完成配置。 13. 考虑是否存在进程重复拉起的可能;

问题原因

由于systemd配置文件未裁剪导致重复的进程拉起,dbus注册时由于重复的service_name导致无法正常请求唯一名,导致上树失败。

解决方案

由于systemd配置文件裁剪处理,重新出包升级,按照问题复现步骤测试即可。