新增对象不上树问题分析
更新时间: 2026/06/01
在Gitcode上查看源码问题背景
- 单板类型:自研板;
- 软件版本:openubmc 25.12;
- 涉及功能:新增资源上树,dbus注册,systemd,升级;
- 触发条件:sr文件新增Expander对象,出包升级后,查看资源树是否上树。
- 业务表现:预期资源正常上树;实际无法上树。
问题复现步骤
新增了一个对象,并声明了接口,通过mdbctl lsobj命令可以看到对象,但是mdbctl lsprop命令却看不到属性值,资源树也看不到这个对象。
关键日志信息
mdbctl lsobj命令查看结果: mdbctl lsprop命令查看结果: 资源树查询结果: app.log日志:
定位过程
- 查看与Expander对象相关的配置是否能够拿到数值; Expander温度可获取:
- 确认对象添加完毕;
- 用getprop可以看到值的来源,如果getprop的结果只有值的话就说明就是一个写死的值,同步没有生效; 从日志上看有取消自动上树的动作
- 日志中搜索unregister_mdb_object,可以搜关键词 unregister remove,结果未搜到该关键字;
- 代码函数on_add_object中加打印,确认对象上树的时候的回调执行流程; 代码修改: 日志打印: 日志结果可知,正常打印,无异常;
- 看下framework.log日志文件,确认对象组无下树操作;
- 检查一下环境上cat /dev/shm/dbus/.dbus环境变量是否与env对的上,再试试telnet下进行查询操作是否能查询到; 在telnet下执行后还是不能查到这个对象;
- 确认object_manage.on_add_object代码中注册对象添加方法无问题; 逻辑很简单,就是对象分发之后,新建个对象就行了;
- openubmc2509版本上新增本次修改的代码,尝试是否存在同样的问题,结果发现2509版本功能正常;
- 给on_add_object回调加个pcall看下是否有抛错; 结果,日志正常,未报错;
- 用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配置文件裁剪处理,重新出包升级,按照问题复现步骤测试即可。