news 2026/9/26 19:31:32

openubmc 新增硬件资源对象

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
openubmc 新增硬件资源对象

新增硬件资源对象 ​

CSR中的对象定义来源于MDS模型,通过实例化MDS类定义,我们便可以很方便的在对应的设备配置中,将所需要的硬件管理数据配置齐全,然后在组件中对资源对象进行业务逻辑编写。

MDS对象定义 ​

首先我们需要在my_app组件的MDS模型中定义资源类。
打开在《新增一个组件》中创建的my_app组件的mds/model.json, 添加下面的模型定义

"MyCSRModel": { "path": "/bmc/demo/MyCSRModel/${id}", "interfaces": { "bmc.demo.OpenUBMC.Reading": { "properties": { "TemperatureCelsius": { "usage": [ "CSR" ] } } } } }

完整代码

{ "MyMDSModel": { "path": "/bmc/demo/MyMDSModel/${id}", "interfaces": { "bmc.demo.OpenUBMC.Community": { "properties": { "WelcomeMessage": {} } } }, "properties": { "SecretNumber": { "baseType": "U32" } } }, "MyCSRModel": { "path": "/bmc/demo/MyCSRModel/${id}", "interfaces": { "bmc.demo.OpenUBMC.Reading": { "properties": { "TemperatureCelsius": { "usage": [ "CSR" ] } } } } } }

与普通的组件MDS对象定义不同,这里新增了"usage": ["CSR"]的声明。这个表示在某个CSR中,存在一个叫做MyCSRModel的对象,包含TemperatureCelsius的属性。

CSR对象添加

关于硬件自发现的具体设计,请参考《硬件自发现》

在上述的usage的定义中,可以看到TemperatureCelsius来源于CSR,因此需要在上述的CSR中定义一个MyCSRModel,通过硬件自发现将CSR对象分发给my_app。

命名规则是<前缀_后缀>前缀必须与mds里一样,后缀可以随便命名

在vpd/vendor/Huawei/Server/Kunpeng/openUBMC/root.sr的Objects里添加下面代码

"MyCSRModel_DemoSensor": { "TemperatureCelsius": "<=/Scanner_GetTemperature.Value" }

Scanner_GetTemperature对象是在《openubmc 新增一个 IPMI Sensor》中添加的

自动生成代码 ​

由于新增了模型定义,我们需要通过自动代码生成辅助代码。在my_app中执行如下命令:

cd /home/workspace/my_app bingo gen

代码编写 ​

由于MyCSRModel的实例已经在root.sr中“创建”,因此我们需要等待对象的分发,而非主动去创建。可以通过如下的方法在代码中获取对象的分发。

打开my_app_app.lua,在app:init()中添加对象添加回调函数。

local object_manage = require 'mc.mdb.object_manage'
function app:init() -- 组件的初始化函数 app.super.init(self) -- 先调用基类的初始化函数 self.my_mds_model = self:CreateMyMDSModel(1, function(object) -- 创建一个mds对象实例 object.ObjectName = "MyMDSModel_1" -- 在回调函数中进行对象的属性赋值 object.WelcomeMessage = "Hello OpenUBMC!" object.SecretNumber = 330 end) self:register_ipmi() self:register_mds_callback() -- 新增mds方法回调 end function app:register_mds_callback() object_manage.on_add_object(self.bus, function(class_name, object, position) if class_name == 'MyCSRModel' then self.my_csr_model = object end end) object_manage.on_add_object_complete(self.bus, function(position) end) object_manage.on_delete_object(self.bus, function(class_name, object, position) if self.my_csr_model == object then self.my_csr_model = nil end end) object_manage.on_delete_object_complete(self.bus, function(position) end) end

组件构建 ​

由于修改了my_app仓库,因此我们需要进行构建。

为了和之前版本进行区分,我们需要手动将mds目录下的service.json中的version字段进行更新,通常会在原有版本号的最后一位上加一。随后再执行组件构建命令。

bingo build --stage=rc

因为vpd仓库也被修改了,所以也需要重新构建。修改版本号,然后执行构建命令。

bingo build --stage=rc

整包构建 ​

在manifest中找到之前my_app声明位置,将版本改至对应的构建版本,然后再进行整包构建。

bingo build

整包测试 ​

检查产物

.sr打进整包后落在/opt/bmc/sr/root.sr(package()按扩展名拷到opt/bmc/sr)。
执行以下命令可以检查是否被包含到整包中

grep -o 'MyCSRModel_DemoSensor' home/workspace/manifest/temp/build_openUBMC_debug_dev/buildimg/rtos_with_driver/rootfs/opt/bmc/sr/root.sr
MyCSRModel_DemoSensor

整包升级

整包升级后,可以查看资源协作接口对象,

source /etc/profile busctl --user tree bmc.kepler.my_app
└─/bmc |─/bmc/demo | |─/bmc/demo/MyCSRModel | | └─/bmc/demo/MyCSRModel/MyCSRModel_DemoSensor_01 | └─/bmc/kepler/MyMDSModel | └─/bmc/kepler/MyMDSModel/1 └─/bmc/kepler | └─/bmc/kepler/IpmiCmds | └─/bmc/kepler/IpmiCmds/30 | └─/bmc/kepler/IpmiCmds/30/90 | |─/bmc/kepler/IpmiCmds/30/90/GetSecretNumber | └─/bmc/kepler/IpmiCmds/30/90/SetSecretNumber └─/bmc/kepler/my_app └─/bmc/kepler/my_app/MicroComponent

通过busctl --user tree我们发现多了一个对象,这个便是CSR中配置的对象。我们可以通过busctl --user introspect命令对对象进行查看

busctl --user introspect bmc.kepler.my_app /bmc/demo/MyCSRModel/MyCSRModel_DemoSensor_01
NAME TYPE SIGNATURE RESULT/VALUE FLAGS bmc.kepler.OpenUBMC.Reading interface - - - .TemperatureCelsius property n 28 emits-change writable bmc.kepler.Object.Properties interface - - - .GetAllWithContext method a{ss}s a{sv} - .GetOptions method a{ss}ss a{ss} - .GetPropertiesByNames method a{ss}sas a{sv}a{sv} - .GetPropertiesByOptions method a{ss}sa{ss} as - .GetWithContext method a{ss}ss v - .SetWithContext method a{ss}ssv - - .ClassName property s "MyCSRModel" emits-change .ObjectIdentifier property (ysss) 0 "1" "" "01" emits-change .ObjectName property s "MyCSRModel_DemoSensor_01" emits-change org.freedesktop.DBus.Introspectable interface - - - .Introspect method - s - org.freedesktop.DBus.ObjectManager interface - - - .GetManagedObjects method - a{oa{sa{sv}}} - org.freedesktop.DBus.Peer interface - - - .GetMachineId method - s - .Ping method - - - org.freedesktop.DBus.Properties interface - - - .Get method ss v - .GetAll method s a{sv} - .Set method ssv - - .PropertiesChanged signal sa{sv}as - -

MDS 对象与 CSR 对象区别

MDS 对象是管理面对象

在组件的mds/model.json里定义,代码生成后挂到D-Bus资源树(例如/bmc/demo/MyMDSModel/1)。北向Redfish/IPMI/Web读的是它。生命周期由应用管:CreateMyMDSModel创建,Lua里给WelcomeMessage、SecretNumber赋值。

CSR 对象是硬件面对象

写在VPD的.sr里(openUBMC/root.sr),例如Lm75_DemoSensor、Scanner_GetTemperature、ThresholdSensor_DemoSensor、Entity_DemoSensor。描述芯片、总线、扫描周期、门限。由hwdiscovery解析、hwproxy按Scanner去读寄存器。它本身不是北向资源。中间用"usage": ["CSR"]粘起来:MDS属性声明后,框架按同名属性把CSR对象的值灌进MDS,应用不用再写。sensor组件就是这样:MDS类ThresholdSensor的SensorName、Reading、UpperCritical全是"usage": ["CSR"],对应.sr里ThresholdSensor_*。

一句话总结

MDS 是给北向看的软件对象;CSR 是给南向扫硬件的描述。带 usage: CSR 的 MDS 只是把硬件读值接到管理树上,并没有变成另一种对象。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/26 19:31:30

从一枚手机镜头到毕业论文:光学人的 AI 工具链怎么选

如果你在理学 / 物理学 / 光学方向学习&#xff0c;大概率会遇到一类很典型的毕业任务&#xff1a;基于 Zemax OpticStudio 的手机广角物镜优化设计。 题目看起来不长&#xff0c;但事情不少&#xff1a;要确定焦距、视场角、F 数、传感器尺寸&#xff0c;要选初始结构&#x…

作者头像 李华
网站建设 2026/9/26 19:30:51

华为光学工程师面试全解析:考点体系与备考策略

华为的光学工程师面试&#xff0c;在圈子里一直是个热度很高的话题。每年校招和社招&#xff0c;光通信、手机镜头、车载光学这几个方向的候选人&#xff0c;都会翻来覆去地找面经&#xff0c;但能找到的往往是零散几条&#xff0c;什么“考了球差和彗差”“让我推导了高斯公式…

作者头像 李华
网站建设 2026/9/26 19:29:01

ax:面向Kubernetes的轻量级Agent运行时抽象层

1. “ax”不是缩写&#xff0c;而是一个正在成型的系统级抽象层 最近在几个开源社区和云原生技术分享会上&#xff0c;频繁看到“ax”这个词被单独拎出来讨论——既不带版本号&#xff0c;也不加引号&#xff0c;就干干净净两个字母&#xff1a; ax 。它不像 Kubernetes 那样…

作者头像 李华
网站建设 2026/9/26 19:27:11

工业监控为何抛弃RS485?以太网型温湿度传感器选型与落地指南

“这台传感器支持485通讯&#xff0c;我建议再加个网关转一下。”以前做温湿度监控项目&#xff0c;这句话几乎是标配。但这两年风向变得非常明显——越来越多的工厂、机房、医药冷链项目开始点名要求“以太网型温湿度传感器”&#xff0c;甚至把网口直接写进招标参数里。我自己…

作者头像 李华