invalid的问题主要是没有require导致,然后也添加一下check_dependencies
然后我看到你的model.json里面对MyEepromModel这个类是的属性是私有的,理论上是不上树,使用busctl –user tree来查询看不到的,我这边把它改成上树的属性
{
"HelloOpenUBMC": {
"path": "/bmc/kepler/HelloOpenUBMC",
"interfaces": {
"bmc.kepler.OpenUBMC.Community": {
"properties":{
"WelcometoOpenUBMC": {}
}
}
},
"properties": {
"Health": {
"baseType": "U32"
}
}
},
"MyCSRModel": {
"path": "/bmc/demo/MyCSRModel/${id}",
"interfaces": {
"bmc.demo.OpenUBMC.Reading": {
"properties":{
"TemperatureCelsius": {
"usage": [
"CSR"
]
}
}
}
}
},
"MyEepromModel": {
"path": "/bmc/kepler/MyEepromModel/${id}",
"interfaces": {
"bmc.kepler.OpenUBMC.Reading": {
"properties": {
"RefEepromTestChip":
{
"usage": [
"CSR"
],
"baseType": "U8[]",
"refInterface": "bmc.kepler.Chip.BlockIO"
}
}
}
}
}
}
然后我再app.lua里面添加创建这个实例
-- Copyright (c) Huawei Technologies Co., Ltd. 2025. All rights reserved.
--
-- this file licensed under the Mulan PSL v2.
-- You can use this software according to the terms and conditions of the Mulan PSL v2.
-- You may obtain a copy of Mulan PSL v2 at: http://license.coscl.org.cn/MulanPSL2
--
-- THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER EXPRESS OR
-- IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY OR FIT FOR A PARTICULAR
-- PURPOSE.
-- See the Mulan PSL v2 for more details.
--
-- Author: auto generate
-- Create: 2025-9-2
-- Description: DO NOT EDIT; Code generated by "${project_name}_app.lua.mako"
local class = require 'mc.class'
local service = require 'Hello_openUBMC.service'
local logging = require 'mc.logging'
-- 新增ipmi相关文件
local custom_msg = require 'messages.custom'
local ipmi_cmds = require 'Hello_openUBMC.ipmi.ipmi'
local object_manage = require 'mc.mdb.object_manage'
local mc_admin = require 'mc.mc_admin'
local client = require 'Hello_openUBMC.client'
local Hello_openUBMC = class(service)
function Hello_openUBMC:ctor()
end
-- 依赖检查
function Hello_openUBMC:check_dependencies()
logging:notice("check dependencies start")
local admin = mc_admin.new()
admin:parse_dependency(APP_WORKING_DIRECTORY .. '/mds/service.json')
admin:check_dependency(self.bus)
end
function Hello_openUBMC:init()
logging:notice("Hello_openUBMC:init start")
self.super.init(self)
-- 依赖检查
self:check_dependencies()
self.hello_openUBMC = self:CreateHelloOpenUBMC(function(object)
object.ObjectName = "HelloOpenUBMC_1"
object.WelcometoOpenUBMC = "Welcome to openUBMC"
object.Health = 1
end)
self.eeprommodel = self:CreateMyEepromModel(1, function(object)
object.ObjectName = "MyEepromModel_1"
end)
-- ipmi
self:register_ipmi_cmd(ipmi_cmds.FirstIpmiCmd, self.first_ipmi_cmd)
logging:notice("MyEepromModel run start")
logging:notice("Hello_openUBMC: init end")
end
function Hello_openUBMC.first_ipmi_cmd(req, ctx)
-- 参数校验(按需)
local data_len = req.DataLen
local data = req.Data
if #data ~= data_len then
logging:error('first ipmi cmd error: invalid req length')
error(custom_msg.IPMIRequestLengthInvalid())
end
-- 业务处理
-- 构造响应体
local rsp = ipmi_cmds.FirstIpmiCmd.rsp.new()
rsp.CompletionCode = 0x00
rsp.ManufactureId = 0x000000
logging:operation(ctx, 'Hello_openUBMC', 'first ipmi cmd success, Data:%s.', data)
return rsp
end
return Hello_openUBMC
上树属性需要在mdb_interface的添加以下内容:
json/path/mdb/bmc/kepler/MyEepromModel/MyEepromModel.json
{
"MyEepromModel": {
"path": "/bmc/kepler/MyEepromModel/${id}",
"interfaces": [
"bmc.kepler.OpenUBMC.Reading"
]
}
}
json/intf/mdb/bmc/kepler/OpenUBMC/Reading.json
{
"bmc.kepler.OpenUBMC.Reading": {
"properties": {
"RefEepromTestChip":
{
"usage": [
"CSR"
],
"baseType": "U8[]",
"refInterface": "bmc.kepler.Chip.BlockIO",
"description": "eeprom读写方法"
}
}
}
}
回显信息:
Eeprom这个类的信息是显示在hwproxy这个组件的,可以使用busctl --user tree bmc.kepler.hwproxy查看















