新增硬件资源对象 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_managefunction 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 --stagerc因为vpd仓库也被修改了所以也需要重新构建。修改版本号然后执行构建命令。bingo build --stagerc整包构建 在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.srMyCSRModel_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_01NAME 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 只是把硬件读值接到管理树上并没有变成另一种对象。
企业数字化 ERP 产品动态
相关推荐
openubmc 新增一个 IPMI Sensor 新增一个IPMI Sensor 一个常见的场景便是需要将硬件上的某一个器件的读值,通过IPMI协议中定义的门限传感器呈现给用户。在本章节中,我们将配置一个LM75温度器件,同时配置一个对应的IPMI门限传感器,并呈现至对外接口。 CSR配置 … · 2026/9/26 19:31:39
从代码问答到任务执行:AI Agent编排、状态与告警的工程实践 1. 从"会聊"到"会干活":我为什么重新设计一个代码问答工具1.1 纯问答模式的三个死穴在决定动手做羲和(XiheAgent)之前,我其实已经用了大半年的代码问答工具。日常查接口、问实现思路、让模型帮忙解释一段复杂… · 2026/9/26 19:31:39
openubmc 对外扩展接口-redfish redfish 接口 openUBMC的SDK已经提供了完备的Redfish协议管理能力,并提供了强大的映射配置器,简化北向接口的适配工作量。具体关于接口映射配置的介绍,请参考《接口映射配置》 映射配置增加 redfish 是一个独立的组件,使用时先… · 2026/9/26 19:31:39
数据库原理及运用(初识):第八节#多表查询3(联合查询与嵌套查询) 大家好!本篇文章为不了解数据库,或者将要学数据库却不知道它具体是什么的伙伴们介绍数据库的基础知识,同时小编也会用每一小节学到的新知识,一步一步搭建出一个完整的大一新生数据库系统,小编争取每天都会更新一节&… · 2026/9/26 20:05:17
基于深度卷积神经网络的植物病害智能识别与损伤率测量系统 摘要:植物病害是影响农作物产量和质量的重要因素,每年给全球农业生产造成巨大损失。传统的植物病害识别主要依赖人工观察和经验判断,这种方法不仅耗时费力,而且准确率受限于个人经验,难以满足现代农业规模化和精准化的… · 2026/9/26 20:05:10
告别补丁式防护:从零构建数据安全架构与治理体系(含实战代码) 告别补丁式防护:从零构建数据安全架构与治理体系(含实战代码)
很多团队做数据安全,是这么干的:出了一次数据泄露,赶紧买个 DLP;被监管点名了,临时补个加密;业务方喊数据… · 2026/9/26 20:05:10
AI操作硬件的门槛有多高?我花一个晚上、两百多块钱,亲手试出了答案 20:51,书房。
桌上摊着一块刚拆封的开发板、一袋传感器模块、一把杜邦线。板子插上USB,我盯着它看了半天,问出今晚的第一个问题:“这东西要不要按电源键?”——答案是,这块板没有电源键,USB一插… · 2026/9/26 20:05:10
OpenCode终端AI编程助手安装配置与模型接入全指南 1. 为什么我要在终端里折腾 OpenCode 第一次听说 OpenCode 是在一个开发群里,有人甩了张截图,终端里直接跟 AI 对话改代码,不用切浏览器、不用开 IDE 插件,敲个命令就能让模型读文件、改函数、跑测试。当时我的第一反应是… · 2026/9/26 20:05:10
AI 编程的 token 都烧在哪了?6 个把成本降下来的实际做法 目录一、先搞清楚计费结构二、六个实际做法三、怎么知道自己花在哪了四、几个不值得做的「优化」五、什么情况下不用管这些小结先说一个反直觉的事实:你的 token 大部分不是花在「写代码」上,是花在「找代码」上。
让 AI 改一个函数,它要先找… · 2026/9/26 20:05:10
数据库课后习题答案别硬背:当测试用例集刷,效率翻倍 简介:万常选版《数据库原理与设计》课后习题答案资源,覆盖第2至6章及第9章,适合正在学习关系模型、数据库建模、关系数据理论与模式求精的本科生、自学者作为复习与自测材料。压缩包共7个文件,含3个doc参考答案、2个sql示例脚本、… · 2026/9/26 0:00:21
OpenClaw 替代品?Hermes Agent 踩坑实录:macOS 飞书接入 TaoToken 配置 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/26 0:00:40
向下兼容与向上兼容:接口设计中的兼容性策略与工程实践 一次版本升级事故,是很多团队绕不过去的坎。线上环境里,服务端明明已经上线了新版接口,老的移动端还在照着旧文档传参数。请求一到网关,校验直接拒绝,用户操作失败,客服群炸了锅,开发群里开始互… · 2026/9/26 0:00:46