板卡的SlotID是通过smc获取的,添加了一个Accessor,无法获取Accessor的value问题分析
更新时间: 2026/05/28
在Gitcode上查看源码

问题背景

  • 单板类型:NA;
  • 软件版本:NA;
  • 涉及功能:获取板卡的SlotID;
  • 触发条件:添加了一个Accessor,在代码中无法获取Accessor的value。
  • 业务表现:预期正常读取板卡的slotID;实际板卡的SlotID是通过smc获取的,添加了一个Accessor,无法获取Accessor的value。

问题复现步骤

添加了一个Accessor

关键日志信息

text
Traceback (most recent call last):
File “/home/workspace/sensor/temp/lua_codegen/script/merge_model.py”, line 293,3. 
main(sys.argv[1:])
File “/home/workspace/sensor/temp/lua_codegen/script/merge_model.py”, line 289, in main
generate(m_input, output, mdb_path, cmd_file)
File “/home/workspace/sensor/temp/lua_codegen/script/merge_model.py”, line 253,3.  generate
merge_model(load_dict, mdb_path)
File “/home/workspace/sensor/temp/lua_codegen/script/merge_model.py”, line 202,2.  merge_model
mdb_obj = utils.get_path(class_name, mdb_path, class_path)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File “/home/workspace/sensor/temp/lua_codegen/script/mds_util.py”, line 39, in get_path
with os.fdopen(os.open(real_path, os.O_RDONLY, stat.S_IRUSR), “r”) as obj_file:
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
FileNotFoundError: [Errno 2] No such file or directory: ‘/home/workspace/sensor/temp/lua_codegen/../../temp/opt/bmc/apps/mdb_interface//path/mdb//bmc/kepler/Systems//SlotID////SlotID.json’
make[3]: *** [Makefile:131: /home/workspace/sensor/temp/lua_codegen/temp/sensor/_model.json] Error 1
make[3]: Leaving directory ‘/home/workspace/sensor/temp/lua_codegen/templates/apps’
make[2]: *** [Makefile:12: apps] Error 2
make[2]: Leaving directory ‘/home/workspace/sensor/temp/lua_codegen/templates’
make[1]: *** [Makefile:68: gen] Error 2
make[1]: Leaving directory ‘/home/workspace/sensor/temp/lua_codegen’
make: *** [Makefile:25: gen] Error 2
ERROR: Traceback (most recent call last):
File “/usr/local/lib/python3.12/dist-packages/bmcgo/cli/cli.py”, line 355, in run
return method(command_args)
^^^^^^^^^^^^^^^^^^^^
File “/usr/local/lib/python3.12/dist-packages/bmcgo/cli/cli.py”, line 159, in gen
gen.run()
File “/usr/local/lib/python3.12/dist-packages/bmcgo/component/gen.py”, line 110, in run
self.generate_lua_run(parser, base_version)
File “/usr/local/lib/python3.12/dist-packages/bmcgo/component/gen.py”, line 122,2.  generate_lua_run
codegen.gen(args)
File “/usr/local/lib/python3.12/dist-packages/bmcgo/codegen/lua/codegen.py”, line 164, in gen
self.generate_code_run(args)
File “/usr/local/lib/python3.12/dist-packages/bmcgo/codegen/lua/codegen.py”, line 145, in generate_code_run
subprocess.run(cmd, env=dict(os.environ, LUA_FORMAT=lua_format, LUA_CODEGEN_VERSION=str(self.version),
File “/usr/lib/python3.12/subprocess.py”, line 571,1.  run
raise CalledProcessError(retcode, process.args,
subprocess.CalledProcessError: Command ‘[’/usr/bin/make’, ‘-j12’, ‘PROJECT_NAME=sensor’, ‘TPL_DIR=/home/workspace/sensor/temp/lua_codegen’, ‘VERSION=8’, ‘gen’]’ returned non-zero exit status 2.
ERROR: Command ‘[’/usr/bin/make’, ‘-j12’, ‘PROJECT_NAME=sensor’, ‘TPL_DIR=/home/workspace/sensor/temp/lua_codegen’, ‘VERSION=8’, ‘gen’]’ returned non-zero exit status 2.

定位过程

  1. 搞个属性配在csr里,属性关联accessor,代码里获取属性。

  1. csr配置对象与属性后,还需要在组件的model.json配置对象与属性,并设置属性为"usage":["CSR"],这样才可以通过CSR配置的来源更新属性:

问题原因

修改了资源协作接口,资源协作接口的定义是在mdb_interface里声明的。

解决方案

  1. 代码生成可以参考这篇文档代码自动生成 | 文档中心 | openUBMC
  2. 需要先在mdb_interface里面修改后,组件mds才能正确生成代码。
  3. 还有种方法是不上树,改成私有属性,在properties下面添加slotid,这样子就不依赖mdb_interface了,但同样的,这个值只能本APP使用,无法对外呈现。这么做的原因还是为了规范化管理组件对外的属性和接口。