// 此模板仅供参考,如果不适用可以修改
问题描述
我新增了一个对象,并声明了接口,通过mdbctl lsobj可以看到对象,但是lsprop却看不到属性值

资源树也看不到这个对象
环境信息
openubmc25.12
重现步骤
-
[第一步]
-
[第二步]
-
[第三步]
期望结果
[您希望实现什么]
实际结果
[实际发生了什么,包含错误信息]
尝试过的解决方案
[列出您已经尝试过的解决方案及结果]
// 此模板仅供参考,如果不适用可以修改
我新增了一个对象,并声明了接口,通过mdbctl lsobj可以看到对象,但是lsprop却看不到属性值

资源树也看不到这个对象
openubmc25.12
[第一步]
[第二步]
[第三步]
[您希望实现什么]
[实际发生了什么,包含错误信息]
[列出您已经尝试过的解决方案及结果]
答案内容由AI生成,仅供参考:
| 问题 | 根本原因 | 解决方案 |
|---|---|---|
| 对象不在资源树 | 未配置 path 或未被 MDS 管理 |
补充 path,确认 Class 被组件引用 |
lsprop 无属性 |
未实现标准资源协作接口 | 确保 interfaces 正确声明并实现 |
| 接口未生效 | model.json 配置错误 |
校验字段结构,属性置于 properties 内 |
| 代码未生成 | 接口命名冲突 | 修改接口名避免末段重复 |
重要提醒:所有资源树对象必须满足 “路径 + 接口 + MDS管理” 三位一体,缺一不可。否则即使对象存在,也无法对外暴露。
用户新增了一个对象(如 Expander),并在 model.json 中声明了相关接口和属性,通过 mdbctl lsobj 可以看到对象实例(如 Expander_1_010103),但执行 mdbctl lsprop 无法查看其属性值。同时,在资源树(Resource Tree)中也无法发现该对象路径。
示例命令输出:
~ $ mdbctl lsobj Expander
Expander_1_010103
~ $ mdbctl lsprop Expander_1_010103
~ $
资源树结构未包含该对象:
/bmc
└── /bmc/kepler
└── ...(无 Expander 相关路径)
根据提供的上下文信息,以下是导致“对象不上树”或“属性不可见”的主要原因:
Rule Resource 048 要求每个 Resource Tree Interface 必须被至少一个 resource tree object 实现。model.json 中,但其所属的 Class 没有关联有效的 path 和 interfaces 字段,则无法在资源树中生成对应节点。path 明确指定在资源树中的位置,并通过 interfaces 声明所实现的接口,否则不会注入资源树。model.json 是资源树对象创建的核心配置文件。path 字段;interfaces 字段类型错误或引用未定义的接口;properties 下;search_result_id=8)。search_result_id=8 提到,若 mdb_interface 中有定义接口但 service.lua 未生成代码,很可能是 model.json 字段配置错误。Class 定义中缺少 tableLocation 或 tableName 配置,可能导致对象无法持久化和加载。search_result_id=2 提到,“资源树对象在 App 的 MDS 中管理才能生效该资源树定义的功能”。mdbctl lsprop 仅能查询实现了“资源协作接口”的对象。mdbctl 查看其属性。doc_chunk_id=1 明确指出:“mdbctl查询必须是在资源协作接口中的对象”。确保 Class 定义满足以下条件:
{
"Expander": {
"path": "/bmc/kepler/hk_general_hardware/Expander/${Id}",
"interfaces": {
"bmc.kepler.Hardware.Expander": {}
},
"properties": {
"Status": {
"baseType": "String",
"default": "Enabled"
}
}
}
}
关键字段说明:
path:必须配置,决定对象在资源树中的路径;interfaces:必须为对象类型(JSON object),键为合法接口名;- 接口必须已在
mdb_interface或全局接口定义中声明;- 所有属性需在接口定义的
properties下。
bmc.kepler.Hardware.Expander)需在系统的接口定义文件中存在;mdb_interface,验证该接口下是否定义了对应的 properties 和 methods;.Bb 结尾),将触发防冲突重命名机制(AaBb.lua, CcBb.lua),需同步修改手写代码。Class 是否属于一个 service.json 中声明的组件;required 字段包含所依赖的接口(CSR、Per 等);tableLocation 和 tableName 是否正确配置(参考 rule_mds_031~rule_mds_032);使用以下命令检查运行时状态:
# 查看资源树是否加载对象
busctl --user tree bmc.kepler.hk_general_hardware
# 检查特定对象属性(需完整路径)
busctl --user get-property /bmc/kepler/hk_general_hardware/Expander/1_010103 bmc.kepler.Hardware.Expander Status
或者使用:
mdbctl lsprop Expander_1_010103 bmc.kepler.Hardware.Expander
注意:需显式指定接口名,否则可能因多接口屏蔽而无法显示。
完成上述修复后:
/bmc/kepler/hk_general_hardware/Expander/1_010103
mdbctl lsprop 能正常列出属性;busctl 或 Redfish 接口可访问该对象的数据。请用户补充以下信息以便进一步定位:
bmc reboot 或 framework restart?app.log 中是否有该对象加载失败的日志?model.json 是否经过 merge_model.py 合并并成功编译进系统?| 问题 | 根本原因 | 解决方案 |
|---|---|---|
| 对象不在资源树 | 未配置 path 或未被 MDS 管理 |
补充 path,确认 Class 被组件引用 |
lsprop 无属性 |
未实现标准资源协作接口 | 确保 interfaces 正确声明并实现 |
| 接口未生效 | model.json 配置错误 |
校验字段结构,属性置于 properties 内 |
| 代码未生成 | 接口命名冲突 | 修改接口名避免末段重复 |
重要提醒:所有资源树对象必须满足 “路径 + 接口 + MDS管理” 三位一体,缺一不可。否则即使对象存在,也无法对外暴露。
test
![]()
对象也添加完毕了
我觉得应该是对象下面没挂接口的原因,你说的那个能同步到的对象可以用getprop查询一下他的属性配置是否应用了
我指的是你用getprop去查那个sensor,那个同步应该是没有生效的,你这个对象直接用busctl去看一下资源树信息
unregister_mdb_object,可以搜关键词 unregister remove
看了下,代码里面没有这些关键字
目前有没有什么手段可以看是在上树哪个阶段失败了呀?有没有什么日志文件可以看的?
或者我能在哪个文件中添加日志打印,可以看到失败的原因的?
组件的日志一般是在app.log,你可以在你代码里的on_add_object里面加打印,看下对象上树的时候你的回调执行流程
看下framework.log 是不是你这个对象对应的对象组下树了
可以发一份日志到chenghaoyang3@h-partners.com