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高压功率放大器在新能源汽车安全测试中的应用
新能源汽车的崛起已经改变了汽车行业的格局,为环境友好型交通方式提供了更多的选择。为了确保这些新型汽车的安全性和可靠性,进行全面的安全测试是至关重要的。高压功率放大器在新能源汽车的安全测试中发挥着重要的作用,本文将介绍其应用以及…...

liunx打开谷歌报错
liunx打开谷歌报错[48526:48526:0624/173553.311113:ERROR:zygote_host_impl_linux.cc(99)] Running as root without --no-sandbox is not supported. See https://crbug.com/638180. 这个错误信息表明你尝试以root用户身份运行Chrome浏览器,但是没有使用–no-san…...

ICMAN液位检测大盘点
ICMAN液位检测原理: 基于双通道比较原理,一个通道检测当前无水状态下的环境电容,另一个通道通过传感电极去检测容器内液体的变化情况,通过两个通道电容的差值与芯片内部设定阈值做比较,来判断容器壁内部液位的变化或者…...

2024软件设计师笔记之考点版(一考就过):1-10
软件设计师之一考就过:成绩版 考点1:CPU、指令 真题1:CPU 执行算术运算或逻辑运算时,常将源操作数和结果暂存在(累加器(AC))中。 真题2:在程序的执行过程中,Cache与主存的地址映射是由(硬件自动)完成的。 真题3:计算机执行程序时,内存分为静态数据区、代码区、…...

Java中的性能优化技巧
Java中的性能优化技巧 大家好,我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编,也是冬天不穿秋裤,天冷也要风度的程序猿! 在Java开发中,性能优化是一项重要且经常需要面对的任务。尽管Java提供了许多…...

一位Java软件开发工程师繁忙的一天
早晨:迎接新的一天 7:00 AM - 起床 每天早晨七点准时起床。洗漱、早餐后,他查看手机上的邮件和待办事项,以便提前了解今天的工作内容。 8:00 AM - 前往公司 乘坐公交车前往公司。路上,他通过手机阅读一些技术博客或参加在线技术…...

容易上手的AI图片生成软件有哪些值得推荐?
随着人工智能技术的飞速发展,我们的生活也正在经历一场前所未有的变革。其中,AI图片生成软件的出现,为我们的创作提供了更多的可能性。那么接下来就来介绍几款容易上手、功能强大的AI图片生成软件。 首先是建e网AI,这是一个专为设…...

如何高效运营交友APP
如何高效运营交友APP?在当今的互联网时代,交友App已成为连接人与人之间情感纽带的桥梁。然而,面对激烈的市场竞争和不断变化的用户需求,如何高效运营一款交友App,确保用户黏性并提升安全体验,成为每个运营者关注的焦点…...

使用@Lazy注解解决循环依赖的问题
有这样一个场景: 订单服务与用户服务的循环依赖 假设在一个电商系统中,我们有两个服务类:OrderService 和 UserService。 OrderService 需要访问用户服务来获取或更新订单关联的用户信息。例如,当处理订单时,可能需要…...

manim边学边做--SingleStringMathTex
SingleStringMathTex是Mobjects分类中用来显示数学公式的class。 manim中有3个可以用来显示数学公式的class,还有两个是MathTex和Tex,后续再介绍。 从SingleStringMathTex的名称中也可以看出,它是用来显示只有一行的简单公式。 SingleStrin…...

4、双足机器人mpc基础概念
MPC全称是Model Predictive Control,即模型预测控制。主要思想是通过建立机器人动态模型,在运动过程中通过控制输入,来预测机器人未来的运动轨迹和状态。此处的机器人特指双足机器人。 坐标系1、W(orld)系:固定于地面上某点,用于定义机器人绝对位置的是世界坐标系。此处x=…...