新建组件框架 openUBMC CLI支持一键创建新组件简化组件框架搭建流程。组件初始化 通过bingo执行新建组件命令组件名称为my_app使用openUBMC的Lua SDK作为组件SDK# 进入到工作目录 cd /home/workspace # 创建新组件 bingo new -n my_app -t application -l lua -conan 2.0执行完毕后我们便可以在工作目录下看到一个新的文件夹my_app其中包括了组件需要的所有基础内容。 ls -l my_app total 40 -rw-r--r-- 1 root root 0 Jan 17 07:22 CHANGELOG.md -rw-r--r-- 1 root root 1273 Jan 17 07:22 CMakeLists.txt -rw-r--r-- 1 root root 673 Jan 17 07:22 Makefile -rw-r--r-- 1 root root 0 Jan 17 07:22 README.md -rw-r--r-- 1 root root 102 Jan 17 07:22 conanfile.py -rw-r--r-- 1 root root 141 Jan 17 07:22 config.cfg drwxr-xr-x 2 root root 4096 Jan 17 07:22 mds -rw-r--r-- 1 root root 624 Jan 17 07:22 permissions.ini drwxr-xr-x 4 root root 4096 Jan 17 07:22 src drwxr-xr-x 3 root root 4096 Jan 17 07:22 temp drwxr-xr-x 4 root root 4096 Jan 17 07:22 test drwxr-xr-x 3 root root 4096 Jan 17 07:22 user_conf为了后续方便版本管理需要进行git初始化(必须要做不做构建会失败)# 进入到my_app项目路径 cd /home/workspace/my_app # git初始化 git init . git add -A git commit -m init新增MDS资源对象定义openUBMC系统中每个组件都拥有自己的业务资源通过遵循MDS模型定义openUBMC即可以完成BMC整体资源的建模统一系统内的交互规范。同时基于相同的模型基础openUBMC运行框架简化了组件间的交互逻辑组件开发人员仅需围绕着自身的资源对象进行业务逻辑代码编写。首先进入到新建的my_app项目中打开mds/model.json粘贴以下配置{ MyMDSModel: { path: /bmc/demo/MyMDSModel/${id}, interfaces: { bmc.demo.OpenUBMC.Community: { properties:{ WelcomeMessage: {} } } }, properties: { SecretNumber: { baseType: U32 } } } }模型代码生成mds/model.json仅定义了资源对象的含义但并不能直接使用。因此我们需要通过自动生成代码的方式将模型转换成实际的代码。通过CLI进行模型代码生成bingo gen运行结束后我们在组件的文件目录中可以看到gen文件夹里面是基于mds新建的模型生成出来的辅助代码。利用这些代码我们便可以很轻易地在openUBMC中创建系统资源。具体自动生成的代码含义以及详细介绍请参考《代码自动生成》创建资源对象 自动生成代码仅仅生成了管理代码但并没有真正的创建实例。因此我们需要在组件的代码中去创建实例对象。打开src/lualib/my_app_app.lua粘贴下方代码local class require mc.class -- lua开发框架提供的增强类型系统 local c_service require my_app.service -- 自动生成代码生成的组件基类 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) end return appopenUBMC基于Lua语言创建了一套面向对象编程框架简化Lua类的创建和管理。ctor函数即代表类的构造函数用于创建具体的内存对象实例。init函数用于初始化对象的属性会在ctor函数调用后立即调用。app类是基于openUBMC SDK框架创建的子类因此可以调用框架的代码进行MDS对象操作。self:CreateMyMdsModel便是基于mds/model.json中定义的对象生成的辅助代码帮助开发者快速创建对象。组件SDK框架更多细节请参考此章节。《组件开发》组件构建 代码写完后我们需要在真实环境上测试一下我们写的代码。因此需要将my_app组件打包到BMC版本中。openUBMC拥有组件级构建和产品级构建的两层构建体系利用业界成熟的开源软件Conan进行组件构建包的管理。因此需要先将组件构建后再进行整包构建。bingo build --stagestable构建成功后我们可以看到打印了许多my_app/0.0.1openubmc/stable的文字这个就是my_app版本0.0.1的构建标签。后续在任何和组件构建产物相关的地方我们都会使用此标签来指向这次的组件构建包。整包构建 由于我们新建了一个组件当前的manifest中并不包含这个新组件。所以第一步我们需要将组件添加至manifest组件列表中。首先我们需要找到产品对应的定义文件 cd /home/workspace/manifest ls build/product/ ca BMC ls build/product/BMC openUBMC ls build/product/BMC/openUBMC archive.ini manifest.yml permissions.ini rootfs update_ext4.cfg version.xmlmanifest/build/product/BMC/openUBMC/manifest.yml便是定义产品的基础信息包括具体包括的组件。打开manifest.yml在dependencies:下面添加my_appdependencies: - conan: my_app/0.0.1openubmc/stable添加完成后我们便可以按照之前的方式进行整包构建。bingo build -b openUBMC构建完成后便可在manifest/output中查看构建包。整包测试无硬件环境验证组件集成 如果您当前没有真实的BMC硬件可以通过检查整包构建产物的方式验证新组件已被正确集成到产品包中。整包构建过程中会先在temp构建工作区生成集成后的rootfs目录(tmp_root)它就是hpm包内rootfs镜像的直接来源其中的文件会原样打包进升级包。因此只需检查该目录# 进入manifest工作目录 cd /home/workspace/manifest # 确认组件部署文件已集成到rootfs ls temp/build_openUBMC_debug_dev/tmp_root/opt/bmc/apps/my_app # 确认组件服务单元文件已集成到rootfs ls temp/build_openUBMC_debug_dev/tmp_root/etc/systemd/system/my_app.service可以看到my_app的部署文件包括业务代码lualib/my_app_app.lua、mds编译产物mds/、自动生成的模型代码class/等以及组件服务单元文件my_app.service说明组件已随整包构建打入升级包。build_openUBMC_debug_dev目录名与构建类型相关如果您使用了其他构建类型请将路径中的debug替换为对应类型或使用temp/build_openUBMC_/tmp_root通配匹配。*
企业数字化 ERP 产品动态
相关推荐
Excel迁移CRM避坑指南:从数据清洗到上线验证的12个关键节点 /* 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 19:31:52
openubmc 环境搭建 openUBMC 26.06 版本构建指导书 基于 Ubuntu 24.04 LTS 搭建 openUBMC 构建环境,完成系统准备、环境初始化、工具安装、配置及构建出包的全流程。 第1章 系统准备 本章介绍 openUBMC 构建对操作系统、硬件资源和网络环境的基本要求,并提供开发环境搭建指… · 2026/9/26 19:31:52
openubmc 扩展对外接口-新增ipmi命令 新增IPMI命令 IPMI(智能平台管理接口),Intelligent Platform Management Interface 的缩写,是常用的服务器带外管理协议之一。 IPMI模型定义 openUBMC中提供了一套描述IPMI模型的方式,也属于MDS模型的一部分,因此仅需在MDS中… · 2026/9/26 19:31:45
Ghidra逆向工程实战:从安装配置到脚本化自动化分析 1. 为什么我最终把主力逆向工具换成了Ghidra第一次接触Ghidra是几年前的一个固件分析项目。当时手里有一套设备固件需要做漏洞挖掘,IDA Pro的授权费用让团队犹豫了很久,而免费方案里能打的实在不多。抱着试试看的心态装了Ghidra,结果一个下午… · 2026/9/26 20:05:49
AI安全测试沙箱实战:容器化隔离与渗透测试指南 1. 为什么AI安全测试不能直接上生产环境
1.1 一个真实的教训:删库只需要一条指令 去年帮一个朋友的公司做应急响应,事情的起因特别简单:他们内部搞了个AI智能体,想测试一下自动化工单处理能力,结果开发同学图省事&… · 2026/9/26 20:05:42
罗技GHUB离线安装包部署指南:21.03.24稳定版安装与避坑 1. 为什么罗技GHUB的离线部署值得单独写一篇罗技GHUB这个驱动软件,用过罗技外设的人基本都绕不开它。G系列鼠标、键盘、耳机、方向盘,想要改键、调DPI、设宏、同步灯光,都得靠它。但问题在于,GHUB的在线安装体验一直不算稳定——下… · 2026/9/26 20:05:42
数据库原理及运用(初识):第八节#多表查询3(联合查询与嵌套查询) 大家好!本篇文章为不了解数据库,或者将要学数据库却不知道它具体是什么的伙伴们介绍数据库的基础知识,同时小编也会用每一小节学到的新知识,一步一步搭建出一个完整的大一新生数据库系统,小编争取每天都会更新一节&… · 2026/9/26 20:05:17
基于深度卷积神经网络的植物病害智能识别与损伤率测量系统 摘要:植物病害是影响农作物产量和质量的重要因素,每年给全球农业生产造成巨大损失。传统的植物病害识别主要依赖人工观察和经验判断,这种方法不仅耗时费力,而且准确率受限于个人经验,难以满足现代农业规模化和精准化的… · 2026/9/26 20:05:10
告别补丁式防护:从零构建数据安全架构与治理体系(含实战代码) 告别补丁式防护:从零构建数据安全架构与治理体系(含实战代码)
很多团队做数据安全,是这么干的:出了一次数据泄露,赶紧买个 DLP;被监管点名了,临时补个加密;业务方喊数据… · 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