新闻详情

新闻详情

首页 / 资讯中心 / 详情

openubmc 扩展对外接口-新增ipmi命令

发布时间:2026/11/13 21:22:47来源:尧图网络
openubmc 扩展对外接口-新增ipmi命令
新增IPMI命令 ​IPMI(智能平台管理接口)Intelligent Platform Management Interface 的缩写是常用的服务器带外管理协议之一。IPMI模型定义 ​openUBMC中提供了一套描述IPMI模型的方式也属于MDS模型的一部分因此仅需在MDS中定义IPMI命令便可自动生成IPMI命令的封装解析帮助函数代码。详细的IPMI模型定义请参考《MDS》也是在 my_app 组件下增加cd /home/workspace/my_app打开mds/ipmi.json(如果没有该文件请新建)粘贴下面的代码{ package: MyAppIpmiCmds, cmds: { GetSecretNumber: { netfn: 0x30, cmd: 0x90, priority: OEM, role: Operator, privilege: [BasicSetting], req: [ {data: SubCommand, baseType: U8, len: 1B, value: 0x88}, {data: ManufactureId, baseType: U32, len: 3B, value: 0x0007db}, {data: Action, baseType: U8, len: 1B, value: 0x00} ], rsp: [ {data: CompletionCode, baseType: U8, len: 1B}, {data: SecretNumber, baseType: U32, len: 3B} ] }, SetSecretNumber: { netfn: 0x30, cmd: 0x90, priority: OEM, role: Operator, privilege: [BasicSetting], req: [ {data: SubCommand, baseType: U8, len: 1B, value: 0x88}, {data: ManufactureId, baseType: U32, len: 3B, value: 0x0007db}, {data: Action, baseType: U8, len: 1B, value: 0x01}, {data: Data, baseType: U32, len: 3B} ], rsp: [ {data: CompletionCode, baseType: U8, len: 1B} ] } } }这里我们创建了两个IPMI命令都是NetFn 0x30, CMD 0x900x30 0x90 0x88 0xdb 0x07 0x00 0x00此命令用于查询SecretNumber0x30 0x90 0x88 0xdb 0x07 0x00 0x01此命令用于设置SecretNumber定义完后我们需要使用自动生成代码进行代码生成。bingo gen代码编写 ​通过自动生成代码我们获得了IPMI命令解析、封装和路由的能力但我们仍需编写IPMI命令的业务部分即将数据返回出去或者将传入的数据设置在内存中。打开my_app_app.lua首先要在头部加载生成的IPMI文件local class require mc.class -- lua开发框架提供的增强类型系统 local c_service require my_app.service -- 自动生成代码生成的组件基类 -- 新增ipmi相关文件 local ipmi_struct require my_app.ipmi.ipmi local ipmi_msg require my_app.ipmi.ipmi_message local ipmi require ipmi然后在app:init()中注册对应IPMI的回调函数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() end function app:register_ipmi() self:register_ipmi_cmd(ipmi_struct.GetSecretNumber, function(req, ctx, ...) return ipmi_msg.GetSecretNumberRsp.new(ipmi.types.Cc.Success, self.my_mds_model.SecretNumber) end) self:register_ipmi_cmd(ipmi_struct.SetSecretNumber, function(req, ctx, ...) if req.Data 630 then return ipmi_msg.SetSecretNumberRsp.new(ipmi.types.Cc.InvalidFieldRequest) end self.my_mds_model.SecretNumber req.Data return ipmi_msg.SetSecretNumberRsp.new(ipmi.types.Cc.Success) end) end完整 my_app_app.lualocal class require mc.class -- lua开发框架提供的增强类型系统 local c_service require my_app.service -- 自动生成代码生成的组件基类 -- 新增ipmi相关文件 local ipmi_struct require my_app.ipmi.ipmi local ipmi_msg require my_app.ipmi.ipmi_message local ipmi require ipmi local app class(c_service) -- 创建一个组件类型 function app:ctor() -- 组件的构造函数 end function app:init() -- 组件的初始化函数 app.super.init(self) -- 先调用基类的初始化函数 self.my_mds_model self:CreateMyMDSModel(1, function(object) -- 创建一个mds对象实例名字为1 object.ObjectName MyMDSModel_1 -- 在回调函数中进行对象的属性赋值 object.WelcomeMessage Hello OpenUBMC! object.SecretNumber 330 end) self.register_ipmi() -- 注册对应IPMI的回调函数 end function app:register_ipmi() self:register_ipmi_cmd(ipmi_struct.GetSecretNumber, function(req, ctx, ...) return ipmi_msg.GetSecretNumberRsp.new(ipmi.types.Cc.Success, self.my_mds_model.SecretNumber) end) self:register_ipmi_cmd(ipmi_struct.SetSecretNumber, function(req, ctx, ...) if req.Data 630 then return ipmi_msg.SetSecretNumberRsp.new(ipmi.types.Cc.InvalidFieldRequest) end self.my_mds_model.SecretNumber req.Data return ipmi_msg.SetSecretNumberRsp.new(ipmi.types.Cc.Success) end) end return app当查询IPMI命令来的时候我们返回MyMDSModel中存储的SecretNumber当设置IPMI命令来的时候我们先判断数值是否有效如果有效则修改对应的内存数据并返回成功。组件构建 ​代码写完后我们需要测试一下我们写的代码。首先先进行组件构建。因为我们对组件的功能进行了修改因此我们可以通过递增组件的版本用于区分。首先打开mds/service.json修改version字段从0.0.1修改至0.0.2bingo build --stagestable构建完成后我们可以通过日志发现我们构建了一个构建标签为 my_app/0.0.2openubmc/stable 的版本。我们之前的 my_app/0.0.1openubmc/stable 版本仍存在且不受影响。如果需要使用之前的版本仍可以通过依赖 my_app/0.0.1openubmc/stable 标签进行使用。整包构建 ​之前的版本我们使用的是my_app/0.0.1版本现在我们需要将版本改至my_app/0.0.2然后再进行整包构建。bingo build构建完成后便可在manifest/output中查看构建包。整包测试 ​整包升级后我们再次查看一下my_app的资源source /etc/profile busctl --user tree bmc.kepler.my_app└─/bmc |─/bmc/demo | └─/bmc/demo/MyMDSModel | └─/bmc/demo/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这里多了一些IPMI的资源证明我们成功的将IPMI注册到了我们组件上面SDK在启动阶段会通过遍历这些资源更新系统整体IPMI路由表。通过ipmitool我们可以快速测试ipmi命令是否可以访问。 ./ipmitool.exe -H ip -I lanplus -p 623 -U TestUser -P OpenUBMC123 -C 17 raw 0x30 0x90 0x88 0xdb 0x07 0x00 0x00 00 30 03命令返回330正是我们在代码中定义的SecretNumber再次通过设置命令将SecretNumber设置成630。ipmitool需要输入十六进制也就是0x000276# SetSecretNumber ./ipmitool.exe -H ip -I lanplus -p 623 -U TestUser -P OpenUBMC123 -C 17 raw 0x30 0x90 0x88 0xdb 0x07 0x00 0x01 0x76 0x02 0x00 # 当命令成功时成功码不会显示返回显示为空行 # GetSecretNumber ./ipmitool.exe -H ip -I lanplus -p 623 -U TestUser -P OpenUBMC123 -C 17 raw 0x30 0x90 0x88 0xdb 0x07 0x00 0x00 76 02 00设置成功并再次下发查询命令得到630与我们设置的数值一致。
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

【外设】之大彩串口显示屏 2026/11/13 0:43:49

【外设】之大彩串口显示屏

大彩串口屏初步使用 1 .官网下载 STM32 屏幕 GUI 设计资料 http://www.gz-dc.com/category/typeid/4112 找到 STM32 Keil 工程,移植相关代码因项目而异进行移植,由于项目简单,本人只对用到的指令接口进行修改。 比如:注意事项&…

阅读更多 →
无法下载Windows系统iso文件 2026/11/12 23:59:09

无法下载Windows系统iso文件

当我遇到这个问题的时候,我打开了一个网站: 登录 然后我打算下载的时候: 突然那个官方的连接就可以下载了:

阅读更多 →
【清华代码熊】DeepSeek V4.1 Flash 后训练详解 2026/11/13 10:09:00

【清华代码熊】DeepSeek V4.1 Flash 后训练详解

📌 上期解析了 DeepSeek V4.1 Flash 模型架构改进,本期解析 DeepSeek V4.1 Flash 预训练/后训练技术: 🌟 预训练:45T 文本 多模态混合语料、直接训练 sparse attention(取消 DeepSeek V4 的 dense 冷启动&…

阅读更多 →
Shuffle-R1: Efficient RL framework for Multimodal Large Language Models via Data-centric Dynamic ... 2026/11/13 13:31:48

Shuffle-R1: Efficient RL framework for Multimodal Large Language Models via Data-centric Dynamic ...

文章主要内容和创新点 主要内容 本文聚焦于多模态大语言模型(MLLM)强化学习(RL)训练中的效率问题,提出了一个名为Shuffle-R1的框架。研究发现,当前RL训练存在两个关键缺陷: 优势值坍缩(Advantage Collapsing):批次中大多数优势值集中在零附近,导致有效梯度信号被淹…

阅读更多 →
PRvL: Quantifying the Capabilities and Risks of Large Language Models for PII Redaction 2026/11/13 16:11:45

PRvL: Quantifying the Capabilities and Risks of Large Language Models for PII Redaction

一、文章主要内容总结 本文聚焦于利用大型语言模型(LLMs)实现个人身份信息(PII)脱敏的研究,旨在解决传统脱敏方法(如基于规则的系统、领域特定命名实体识别(NER)模型)泛化能力差、跨格式/跨语境适应性弱的问题。 研究通过全面评估多种LLM架构(包括密集型LLM(D-LLM…

阅读更多 →
LLaVA-RE: Binary Image-Text Relevancy Evaluation with Multimodal Large Language Model 2026/11/13 0:02:27

LLaVA-RE: Binary Image-Text Relevancy Evaluation with Multimodal Large Language Model

文章主要内容和创新点 主要内容 本文聚焦于二进制图像-文本相关性评估任务(判断图像与文本“相关”或“不相关”),针对该任务中文本格式多样、相关性定义随场景变化等挑战,提出了基于多模态大语言模型(MLLM)的解决方案LLaVA-RE。 模型设计:LLaVA-RE基于LLaVA 1.5架构,…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞 ✉