【libmc4lua】问题定位FAQ
更新时间: 2025/06/27
在Gitcode上查看源码

本文为libmc4lua常见问题的FAQ

一、MDB模块

1. 如何获取没有自定义接口的资源树子路径?

背景:目前框架 mdb_service 中提供的 get_sub_paths 方法只能获取带自定义接口的资源树子路径,下面示例中的 /bmc/kepler/Systems/1/Storage/Controllers 这种资源树路径存在,但是没有自定义接口的路径是没办法通过该方式查到的。

示例: 输入 busctl --user tree bmc.kepler.storage,可以看到在路径 /bmc/kepler/Systems/1/Storage 下有子路径 /bmc/kepler/Systems/1/Storage/Controllers; 输入 busctl --user introspect bmc.kepler.storage /bmc/kepler/Systems/1/Storage/Controllers,该路径没有自定义接口,所以无法查询到接口信息。

解决方案:先查找带查找路径的所有父路径 /bmc/kepler/Systems/1/Storage,再通过 dbus 标准的GetManagedObjects 查询子路径。输入下面的命令后,查询结果中包含路径 /bmc/kepler/Systems/1/Storage/Controllers

busctl --user call bmc.kepler.storage /bmc/kepler/Systems/1/Storage org.freedesktop.DBus.ObjectManager GetManagedObjects

代码样例:

lua
local mdb = require 'mdb'
local objs = mdb.get_sub_objects(bus, '/bmc/kepler/Systems/1', 'bmc.kepler.Systems.Storage.Diagnose', 1)
local result = {}
for _, obj in ipairs(objs) do
    local rsp = bus:call(obj.service, obj.path, 'org.freedesktop.DBus.ObjectManager', 'GetManagedObjects', '')
    for path, _ in pairs(rsp) do
        result[#result + 1] = path
    end
end

2.日志出现 invalid interface 相关问题

解决思路:需要在 service.json 中配置对应接口的依赖。如果已经配置了依赖,则需检查是否正确引用,如引用的时序是否正确等。