OurBMC大咖说丨第5期:BMC开发中的非标准化问题探讨

栏目介绍:"OurBMC大咖说" 是由 OurBMC 社区精心策划的线上讲座栏目,邀请 BMC 相关领域大咖共同探讨 BMC 全栈技术的发展趋势、挑战和机遇。无论你是初学者还是资深从业者,"OurBMC大咖说" 都将为你提供一个宝贵的学习和交流的平台。
欢迎各位关注 "OurBMC大咖说",聆听大咖们的智慧之声,共同推动 BMC 全栈技术的进步和发展!
本期人物介绍:汪涛,南京百敖软件有限公司技术总监,百敖BMC团队负责人。毕业于德国不来梅大学电气工程专业,从事固件开发14年,历年来多次承担国家科技支撑计划、科技型中小企业、江苏省科技成果转化、无锡市科技支撑项目等,发表论文3篇,申请专利5项,参与多项BMC固件行业和团体标准制定。

前几期的专家老师们都提到了OurBMC社区标准化的问题,我对此深有感触,也十分赞同几位专家老师们的看法,百敖作为国内主要的 IBV 厂家之一,基于 OpenBMC 代码为国内多家厂商提供了基于 E2000 BMC 和基于其它 BMC 的技术服务,对 BMC 软件的开发和适配有着深厚的经验,借此机会初步探讨下当前 BMC 开发过程中遇到的一些非标准化的问题。
BMC 相关软件需求非标准化问题
BMC 的 SEL 事件日志功能是服务器管理中的一个关键组件,可以记录服务器运行过程中硬件或软件发生的各种事件或状态变化。这些事件的描述在 IPMI 规范中都有定义,主要包括,CPU、内存、硬盘、PCIE、电源、风扇等模块的硬件故障信息,相关组件的温度过高、电压异常等系统告警信息,系统开机/关机/重启等状态变化事件。
随着服务器行业的发展,对事件日志的精细化和可扩展性有了更高的要求,如果出现了系统硬件故障后,运维人员想要知道具体发生了什么样的故障,如果故障类型不能准确记录,会给系统运维人员造成很大的困扰,相反如果故障信息能精确的话,则运维人员可以针对不同的故障信息做不同的故障处理,可以大大的提高运维效率和节省运维成本。例如,有些厂商想让 BMC 能记录 CPU 或者 PCIE 设备的 MCE/AER 事件,但当前 IPMI SEL 事件中所支持的 CPU 或 PCIE 事件列表中都没有此类事件,BMC 如不能准确记录此类事件的话,则运维人员就不能做有针对的处理。
为了解决 BMC SEL 事件日志不够准确和事件类型不够丰富的问题,很多厂商都自定义了一套区别于传统 IPMI SEL 事件日志的日志规范。但由于各家的规范并不统一,要适配不同的服务器产品就意味着 BMC 需要不同的日志功能解决方案,而事件日志又是 BMC 的标配功能,这一基础功能的开发却需要实现多套不同方案,额外增加了 BMC 软件适配的工作量。如果能新制定一套统一的事件日志规范,同时能兼顾多方需求,则在能降低 BMC 的开发适配工作的同时也能大大提升服务器的运维管理能力。
BIOS 与 BMC 交互接口非标准化问题
BIOS 在启动过程中与 BMC 会有一些信息交互,这些交互基本上是通过 IPMI 命令来实现的。主要包括,BIOS 在启动过程中会获取 BMC 的版本信息、自检状态,BMC 的网络配置信息、BMC 的用户信息以及系统启动项等信息,同时在 BIOS setup 界面也可以修改 BMC 的网络配置以及用户配置,最终通过 IPMI 命令发送给 BMC,这些命令都有标准的 IPMI 规范。但是,随着服务器上的需求越来越多,BIOS 需要传送更多的信息给 BMC,例如 BIOS 的版本信息、CPU/内存/硬盘/PCIE 的设备信息或启动过程中检测到的一些设备故障信息,以及 BIOS 的 setup 配置信息等,这些信息标准的 IPMI 命令并没有实现,各家厂商实现这些需求时,要么是 BIOS 与 BMC 之间协商一套 OEM 命令,要么是用其它方式实现,总之,这些无法用标准 IPMI 命令支持的需求,各家 BIOS 和 BMC 厂商都没有一套统一的通信规范,从而造成不同厂商的 BMC 适配另一家的 BIOS 时,无法做到代码兼容,需要重新去适配 BIOS 与 BMC 之间的交互接口,增加了适配的工作量。如果能有一套统一的 BIOS 与 BMC 通信标准规范,则能大大的提高 BMC 的通用性,减少新的服务器项目中的适配工作。
其他固件升级的非标准化问题
服务器主板或各种背板上常用的 CPLD 主要由 Lattice、安路、紫光等厂商提供,服务器厂商对 CPLD 都有通过 BMC 进行在线升级的需求,然而各 CPLD 厂商通过 BMC 进行在线升级的文件格式基本各不相同,有 Lattice 的 jed 格式文件、安路的 aje 格式文件,也有 svf 格式或者 vme 格式的升级文件。不同格式的升级文件意味着 BMC 需要去适配开发不同的 CPLD 固件升级应用程序和设备驱动程序,如果某款服务器上有多个主板及背板 CPLD,且不同板卡上的 CPLD 还有几个备选厂家的话,则 BMC 在适配 CPLD 升级代码上就有较大工作量并且无法做到代码归一,这样就会加大开发此种场景下 CPLD 在线升级程序的复杂度。实际上,CPLD 的在线升级功能基本都是使用的 JTAG 接口,也有少量选择 I2C 接口,在统一使用 JTAG 接口的情况下,各 CPLD 厂商如果能提供统一的升级格式文件给到 BMC,如 svf 或者 vme 格式的在线升级文件,则 BMC 就可以用一套代码支持不同厂家的 CPLD 在线升级方案,无论服务器上有多少个 CPLD 需要升级或有多少家厂商需要支持。
同样的情况在 PSU 固件升级上也存在,服务器厂商对 PSU 也都有通过 BMC 进行在线升级的需求,而 PMBUS 规范中并没有定义固件升级相关的命令字,只是预留了一些厂商自定义命令字,因此各厂商在 PMBUS 规范中的自定义命令字里实现了各自的一些功能,包括在线升级功能,由于没有统一的规范,就会导致各家 PSU 厂商的升级功能实现各不相同,也给 BMC 的 PSU 在线升级功能的实现增加复杂度,在每适配一款新的服务器时就有可能需要重新适配修改 PSU 的在线升级代码。如果各 PSU 厂商把在线升级功能或设置 PSU 主备模式等功能相关的命令字都能做成一个标准规范的话,对 BMC 的硬件适配工作将会有极大的帮助。
BMC 接口标准化展望
在 BMC 的开发适配工作中,类似上述的非标准化接口非常之多,上述也只做了小部分举例说明,这些不仅体现在 BMC 自身的一些软件需求上,与其它领域都有涉及,例如 BIOS、CPLD、PSU、VR、PCIE网卡、NVMe硬盘、RAID卡、GPU卡、DPU卡等。百敖深耕国产化服务器已有多年,积累了深厚的服务器 BMC 开发经验,同时百敖的 BMC 和 BIOS 早已有一套通信标准,为了国产化服务器的发展繁荣,我们愿意跟行业内的相关厂商和合作伙伴分享经验并一起制定相关的 BMC 开发标准,让 BMC 的开发不再有高的门槛,使 BMC 的适配工作变得简单,大家能专注于新功能以及更有价值的功能开发,共同推动国产化服务器的新发展。
我们很荣幸能加 OurBMC社区,也很高兴看到越来越多的伙伴们加入OurBMC社区。国产 BMC 的发展,不仅依靠像飞腾这样的国产芯片厂商和 BMC 固件厂商,也依赖跟 BMC 有交互的各模块对应的厂商一起助力,也希望越来越多的厂商加入到OurBMC社区,壮大OurBMC社区,一起为国产 BMC 的发展谱写新的篇章。
相关文章:
OurBMC大咖说丨第5期:BMC开发中的非标准化问题探讨
栏目介绍:"OurBMC大咖说" 是由 OurBMC 社区精心策划的线上讲座栏目,邀请 BMC 相关领域大咖共同探讨 BMC 全栈技术的发展趋势、挑战和机遇。无论你是初学者还是资深从业者,"OurBMC大咖说" 都将为你提供一个宝贵的学习和交…...
空调制冷剂泄漏引发健康隐患,冷媒传感器实时监测至关重要
随着夏季的脚步逐渐临近,气温逐渐攀升,空调成为了许多家庭和企业必不可少的降温设备。然而,近年来多起因空调制冷剂泄漏导致的健康问题和安全事故,让人们开始重新审视空调使用安全的重要性。其中,冷媒传感器的实时监测…...
开源TinyFSM状态机适用于嵌入式工业平台吗?
文章目录 引言基于传统 C 实现的状态机TinyFSM 实现的对比现代 C 实现的状态机性能对比TinyFSM 性能测试传统 C 性能测试现代 C 性能测试 工业Misra C编程标准TinyFSM 的优缺点分析结论 引言 TinyFSM是一个为C设计的轻量级有限状态机开源库库。 在嵌入式系统开发中,…...
EE trade:利弗莫尔三步建仓法
在股市投资领域,利弗莫尔这个名字代表着无数的智慧和经历。他的三步建仓法成为了投资者们趋之若鹜的学习对象。本文将详细解析利弗莫尔的著名买入法,通过分步进攻方式,有效掌控市场并实现盈利。 一、利弗莫尔的三步建仓法详解 利弗莫尔三步…...
Java中Callable的应用
在Java中,Callable接口是一种用于并发编程的接口,它与Runnable类似,但有一些重要的区别和优势。Callable接口提供了一种在多线程环境下执行任务并返回结果的方法。以下是一些Callable接口的常见应用场景和使用示例: Callable vs.…...
测试卡无法仪表注册问题分析
1、问题描述 00101测试卡无法注册LTE网络,modemlog中发现终端未发起Attach请求,对比正常注册非正常注册的版本,发现正常的多出了ims apn。可以通过ATCGDCONT?来查询modem APN参数。 2、问题分析 目前Modem是一套,没有相关修改。因…...
【扩散模型(一)】Stable Diffusion中的重建分支(reconstruction branch)和条件分支(condition branch)
Stable Diffusion 是一种基于扩散模型的生成模型,用于生成图像等数据。在解释 Stable Diffusion 的过程中,经常会提到两个主要的分支:重建分支(reconstruction branch)和条件分支(condition branch…...
WPF——Binding
一、作用 将Window GUI的运行机理从 “事件驱动” 转变为 “数据驱动”。将UI界面与业务逻辑解耦,使得改动一个而无需改动另一个。数据逻辑层自成体系,使得无需借助UI也可进行单元测试。 二、基础 1. Binding源模板 Binding包括源与目标,源…...
linux与windows环境下qt程序打包教程
一、演示环境 qt5.14.2 二、Linux 2.1 关联依赖文件 2.1.1 下载打包工具 在Windows环境下可以使用 Qt Creator自带的官方工具进行打包,而Linux环境下没有官方工具,需要借助第三方工具才能打包。如:linuxdeployqt、CQtDeployer、AppImage…...
LeetCode21-合并两个有序链表
题目 将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 示例 1: 输入:l1 [1,2,4], l2 [1,3,4] 输出:[1,1,2,3,4,4] 示例 2: 输入:l1 [], l2 [] 输出…...
嵌入式学习——数据结构(双向无头无环链表)——day47
1. makefile——(注意:双向无头链表第一个节点的pre为空,最后一个节点的next为空) 单向无头链表只能找到后一个节点、双向无头链表前后节点都能找到 OBJ:doulink OBJSmain.c doublelink.c CClgcc$(OBJ):$(OBJS)$(CC) $^ -o $ .PH…...
MYSQL 将某个字段赋值当前时间
如 我们需要将use_time 赋值为当前时间: 准备三条数据 : 执行sql ,2种当前时间赋值函数,1种关键字赋值 : update test_info SET use_timeNOW() WHERE id 1; update test_info SET use_timeCURRENT_TIMESTAMP() …...
ModelSim® SE Command Reference Manual : find命令的用法
该命令按类型和名称定位对象。命令的参数按对象类型分组。 1、语法 find nets | signals <object_name> … [-internal] [-nofilter] {[-in] [-inout] [-out] | [-ports]} [-recursive]find instances | blocks {<object_name> … | -bydu <design_unit> |…...
PHPMailer发送的中文内容乱码如何解决
一: PHPMailer sdk 文件中有个设置默认编码的位置: vendor/phpmailer/phpmailer/src/PHPMailer.php 二: 实际业务代码中: require /sdk/PHPMailer/vendor/autoload.php;$mail new PHPMailer(true);try {//Server settings$mai…...
.npmrc配置文件
.npmrc配置文件 .npmrc 是一个用于配置 npm 行为的文件。这个文件可以位于多个地方,但最常见的是位于项目目录或者你的用户主目录。npmrc文件由一系列键值对组成,用于配置npm在执行命令时的行为和参数。 一个 .npmrc 文件的例子可能包含以下内容&#…...
无线桥接两个路由器 实现全屋网络全覆盖
由于房屋结构、面积等因素,单个路由器的信号很难覆盖整个家。这时,我们可以通过无线桥接的方式,将两个路由器连接成一个网络,实现家庭网络的全面覆盖。 一、准备工作 在进行无线桥接之前,我们需要准备以下设备&#…...
qt开发-14_QListwidget 仿qq好友列表制作
QListWidget 继承 QListView。QListWidget 类提供了一个基于项的列表小部件。QListWidg et 是一个便捷的类,它提供了一个类似于 QListView(下一小节将讲到)提供的列表视图,但 是提供了一个用于添加和删除项目的基于项目的经典接口…...
基于hutool的sm2非对称加密使用示例
前言 现在在网上已经有很多同学对hutool的sm2使用进行了详细的介绍。但是在使用过程中不是很符合我个人的使用情况。我在这儿自己整理了一版,一方面希望能对有需要的同学有些许帮助,另一方面做个笔记,方便后期直接cv。 引入依赖 <dependen…...
深入Scala的变量声明与类型推断:语法糖下的智能推导
Scala是一种静态类型语言,以其强大的类型推断系统而闻名。变量声明和类型推断是Scala编程中的基础概念,它们共同简化了代码的编写并提高了开发效率。本文将深入探讨Scala中变量声明的语法规则和类型推断的工作原理。 1. Scala静态类型的优越性 静态类型…...
ATA-4052C高压功率放大器在新能源汽车安全测试中的应用
新能源汽车的崛起已经改变了汽车行业的格局,为环境友好型交通方式提供了更多的选择。为了确保这些新型汽车的安全性和可靠性,进行全面的安全测试是至关重要的。高压功率放大器在新能源汽车的安全测试中发挥着重要的作用,本文将介绍其应用以及…...
理解 MCP 工作流:使用 Ollama 和 LangChain 构建本地 MCP 客户端
🌟 什么是 MCP? 模型控制协议 (MCP) 是一种创新的协议,旨在无缝连接 AI 模型与应用程序。 MCP 是一个开源协议,它标准化了我们的 LLM 应用程序连接所需工具和数据源并与之协作的方式。 可以把它想象成你的 AI 模型 和想要使用它…...
el-switch文字内置
el-switch文字内置 效果 vue <div style"color:#ffffff;font-size:14px;float:left;margin-bottom:5px;margin-right:5px;">自动加载</div> <el-switch v-model"value" active-color"#3E99FB" inactive-color"#DCDFE6"…...
页面渲染流程与性能优化
页面渲染流程与性能优化详解(完整版) 一、现代浏览器渲染流程(详细说明) 1. 构建DOM树 浏览器接收到HTML文档后,会逐步解析并构建DOM(Document Object Model)树。具体过程如下: (…...
【决胜公务员考试】求职OMG——见面课测验1
2025最新版!!!6.8截至答题,大家注意呀! 博主码字不易点个关注吧,祝期末顺利~~ 1.单选题(2分) 下列说法错误的是:( B ) A.选调生属于公务员系统 B.公务员属于事业编 C.选调生有基层锻炼的要求 D…...
自然语言处理——循环神经网络
自然语言处理——循环神经网络 循环神经网络应用到基于机器学习的自然语言处理任务序列到类别同步的序列到序列模式异步的序列到序列模式 参数学习和长程依赖问题基于门控的循环神经网络门控循环单元(GRU)长短期记忆神经网络(LSTM)…...
Maven 概述、安装、配置、仓库、私服详解
目录 1、Maven 概述 1.1 Maven 的定义 1.2 Maven 解决的问题 1.3 Maven 的核心特性与优势 2、Maven 安装 2.1 下载 Maven 2.2 安装配置 Maven 2.3 测试安装 2.4 修改 Maven 本地仓库的默认路径 3、Maven 配置 3.1 配置本地仓库 3.2 配置 JDK 3.3 IDEA 配置本地 Ma…...
#Uniapp篇:chrome调试unapp适配
chrome调试设备----使用Android模拟机开发调试移动端页面 Chrome://inspect/#devices MuMu模拟器Edge浏览器:Android原生APP嵌入的H5页面元素定位 chrome://inspect/#devices uniapp单位适配 根路径下 postcss.config.js 需要装这些插件 “postcss”: “^8.5.…...
视觉slam十四讲实践部分记录——ch2、ch3
ch2 一、使用g++编译.cpp为可执行文件并运行(P30) g++ helloSLAM.cpp ./a.out运行 二、使用cmake编译 mkdir build cd build cmake .. makeCMakeCache.txt 文件仍然指向旧的目录。这表明在源代码目录中可能还存在旧的 CMakeCache.txt 文件,或者在构建过程中仍然引用了旧的路…...
搭建DNS域名解析服务器(正向解析资源文件)
正向解析资源文件 1)准备工作 服务端及客户端都关闭安全软件 [rootlocalhost ~]# systemctl stop firewalld [rootlocalhost ~]# setenforce 0 2)服务端安装软件:bind 1.配置yum源 [rootlocalhost ~]# cat /etc/yum.repos.d/base.repo [Base…...
零知开源——STM32F103RBT6驱动 ICM20948 九轴传感器及 vofa + 上位机可视化教程
STM32F1 本教程使用零知标准板(STM32F103RBT6)通过I2C驱动ICM20948九轴传感器,实现姿态解算,并通过串口将数据实时发送至VOFA上位机进行3D可视化。代码基于开源库修改优化,适合嵌入式及物联网开发者。在基础驱动上新增…...
