1 OpenBMC简介
BMC
在说OpenBMC之前,先说一下BMC(Baseboard Manager Controller,简称BMC),BMC是IPMI协议的实现,是嵌入在计算机(通常是服务器)主板上的专用的微控制器,是负责管理系统和管理软件与服务器平台硬件之间的一个接口。
根据IPMI规范,BMC需要满足如下条件:
- 支持IMPI协议通过相应的IPMI必选命令访问的SDR(传感器数据记录)、SEL(系统事件记录)和FRU(现场可替换单元)、固件更新等功能;
- 支持redfish协议
- 提供BMC访问接口(一般是网口)用于远程管理;
- 提供标准化的看门狗定时器接口和看门狗内部事件产生功能;
- 提供可被其他主机组件使用的事件接收功能;
- 可以远程操作host主机系统,安装操作系统等;
简而言之,BMC就是服务器主板上独立的小系统,有自己的处理器和控制系统,通过IPMB、LPC(low-pin-count-interface)、SMBus等接口与主机硬件或者主机系统进行通信,并可通过网络、串行/Moderm、PCI等接口传向本地主机/远程服务器提供查询和控制等功能。
OpenBmc
年,四名Facebook程序员在一次Facebook 黑客马拉松活动上创建了一个名为OpenBMC的开源BMC固件原型。
年,IBM与Rackspace合作开发了一个开源BMC固件堆栈,也称为OpenBMC。这些项目仅在名称和概念上相似。
年3月,OpenBMC成为Linux Foundation项目并融合在IBM堆栈上。OpenBMC项目的创始组织是Microsoft、Intel、BM、Google和Facebook。并且成立了一个技术指导委员会,由五家创始公司的代表来指导该项目。IBM的Brad Bishop当选为技术指导委员会主席。
年4月,ArmHoldings也加入了OpenBMC技术指导委员会,成为了第六名成员。
OpenBMC是BMC 的一个Linux开源发行版,旨在跨越异构系统,可对包括企业,高性能计算(HPC),电信和云规模数据中心等系统进行管理。
OpenBmc使用YoctoProject作为底层构建和发行的框架,并结合OpenEmbedded,systemd、D-Bus等技术来轻松定制管理平台。同时,OpenBMC包含一个用于与固件进行交互的Web应用程序,并支持了Redfish协议对硬件的管理。主要包括了常见的主机状态查看和控制、主机固件更新、主机远程操作(KVM)等功能。
2 IPMI简介
在早期,可以说IPMI目前是BMC的核心,BMC的远程控制都是通过ipmi协议实现。IPMI的全称是Intelligent Platform Management Interface,智能平台管理接口。IPMI规定了很多的东西,BMC是其中最重要的一个部分,此外还有一些”模块“控制器通过IPMB与BMC相连,这些”模块“控制器一般控制特定的设备,并且有些支持热插拔。IPMB全称Intelligent Platform Management Bus,是一种基于I2C的串行总线,它用于BMC与模块(主板上的子卡)控制器的通信,其上传递的是IPMI命令,IPMB是IPMI协议实现的硬件接口。
IPMI接口基于命令/响应机制,可通过网络将机箱、传感器、固件、存储、应用等主机组件的信息进行分类传递,通过软件ID对BIOS、系统管理软件、远程终端等传感器等进行分类管理,在网络、串行/Moderm接口、IPMB(I2C)、KCS、SMIC、SMBus等不同接口上传递都使用统一的格式。
IPMI1.0于年9月日发布,制定了基本规范。
IPMI1.5于年2月日发布,允许IPMI系统通过串口,BMC专用的带外网口,或者与主机共享的带内网口(NC-SI)与远程管理系统通讯。
IPMI2.0于年2月日发布,增加了SOL(serial over LAN)、群组管理系统、身份认证(RAKP+、SHA-1等)、基于OpenSSL/RCMP+的安全增强网络接口、固件防火墙和VLAN支持等。其中,SOL支持将BIOS输出和操作系统终端重定向到与BMC相连的串口,进而通过IPMI与远程系统管理软件连接。同时,IPMI2.0兼容系统通常还提供KVM over IP(基于IP的远程键盘鼠标显示器连接)、远程桌面和页面服务器等功能,尽管这些功能并不属于IPMI协议。
IPMI2.0修订版于年月1日发布,修订了勘误表,说明和附录,并增加了对IPv6寻址的支持。
更多信息请参考英特尔IPMI技术资源网站(
https://www.intel.com/content/www/us/en/servers/ipmi/ipmi-technical-resources.html)、常见IPMI软件开源项目对比(
http://ipmiutil.sf.net/docs/ipmisw-compare.htm)。
3 Yocto项目简介
Yocto项目是Linux基金会协作开源项目,其目标是生产工具和流程,使创建Linux发行版的嵌入式和物联网软件独立于嵌入式硬件的底层架构。该项目由Linux基金会于年宣布,并于年3月与个组织(包括OpenEmbedded)合作启动。年月,Arm Holdings与Intel合作,通过Yocto项目共享嵌入式系统的代码。
Yocto项目的目的和目标是尝试改善减轻ARM,MIPS,PowerPC和x86 / x86-体系结构的定制Linux系统的开发人员的工作。其中的关键部分是OpenEmbedded构建系统,它使开发人员能够创建特定于其环境的自己的Linux发行版。YoctoProject和OpenEmbeddedProject共享OpenEmbedded构建系统主要部分的维护权:构建引擎BitBake和核心元数据OpenEmbedded-Core。Yocto项目提供了一个称为Poky包含OpenEmbedded构建系统以及按层级分层系统排列的大量配方,可以用作定制嵌入式操作系统的全功能模板。
Yocto项目框架下还有其他几个子项目,包括CROPS,伪交叉预链接,Eclipse集成(已从 版删除),火柴盒应用程序套件以及许多其它子项目。该项目的主要目标之一是这些工具之间的通用性和交互性。
该项目提供了从“微小”到功能齐全的图像的大小不同的系统,这些系统镜像可由最终用户配置和自定义。该项目鼓励与上游项目进行交互,并为OpenEmbedded-Core和BitBake以及包括Linux内核在内的众多上游项目做出了巨大贡献。生成的镜像通常在嵌入式Linux的系统中使用,这些系统是常用的系统或没有像台式机Linux系统相关的常规屏幕/输入设备的系统。
除了构建Linux系统外,还可以生成用于交叉编译的工具链和针对其自己的发行版量身定制的软件开发工具包(SDK),也称为应用程序开发者工具包(ADT)。该项目尝试与软件和供应商无关。因此,例如,可以选择要使用的包管理器格式(deb,rpm或ipk)。在构建中,存在用于各种构建时完整性/回归测试的选项,还具有在QEMU下引导和测试某些映像以验证构建的选项。构建流程如下图所示。
更多信息请参考Yocto官方(
https://www.yoctoproject.org/)、Yocto文档(
https://docs.yoctoproject.org/)。
4 BMC硬件CPU
OpenBmc硬件平台最多的是Aspeed,其次是Xilinx 、NXP等。目前,aspeed芯片是bmc管理平台的核心(请参考aspeed官网),类似intel和AMD的cpu,但是ASPEED是ARM架构,目前最新的soc型号是AST2600,它采用ARM V7架构的双核ARMCotexA7。
AST2600 | AST2500 | AST2400 | AST2300 | |
Embedded CPU | Dual-core ARM Cortex A7Embedded ARM Cortex M3 | 800MHz ARM11 | 400MHz ARM926EJ 16KB/16KB Cache | 400MHz ARM926EJ 16KB/16KB Cache |
SDRAM Memory | DDR4 SDRAM with speed grade higher than DDR4-1600MbpsUp to 2G ByteECC option | 800Mbps DDR3/1600Mbps DDR4 SDRAM16-bit data bus widthUp to 1G ByteECC option | 800Mbps DDR3/DDR2 SDRAM16-bit data bus widthUp to MBECC option | 800Mbps DDR3/DDR2 SDRAM -bit data bus width Up to MB ECC option |
Flash Memory | SPI flash memory | SPI flash memory | NOR/NAND/SPI flash memory | NOR/NAND/SPI flash memory |
Video-Over-IP | Video Redirection up to1920x1200YUV444/YUV420 Video Compression24 bits video compression quality | Video Redirection up to1920x1200YUV444/YUV420 Video Compression24 bits video compression quality | Video Redirection up to 1920x1200YUV444/YUV420 Video compression24 bits video compression quality | Video Redirection up to 1920x1200 YUV444/YUV420 Video compression bits video compression quality |
USB-Over-IP | USB virtual hub controller with 5 devices supportedUSB HID device controller | USB virtual hub controller with 5 devices supportedUSB HID device controller | USB virtual hub controller with 5 any types devices supportedUSB HID device controller | USB virtual hub controller with 5 any types devices supported USB HID device controller |
BMC | BMC controller with IPMI / compliantRemote Presence (iKVM) PCIehost capability eSPI/LPCMCTP overPCIeI2C/I3C/SMBus(Total sets)Virtual UART (1 set)UART ( sets and 1 set for FW debug)GPIO ( sets)SGPIO ( bits)PWM ( sets)Secure boot engineFan tachometer ( sets)PECI 4.0USB1.1/ HostSD/SDIO (2 ports)Embedded SRAMADC ( channels) Port 80h snoopWatchdog (3 sets)Timer (8 sets) | yes | yes | yes |
VGA | PCIe VGA/2D Controller 1920x1200@60Hz32bpp | PCIe VGA/2D Controller1920x1200@60Hz 32bpp | PCIe VGA/2D Controller1920x1200@60Hz 32bpp | PCIe VGA/2D controller 1920x1200@60Hz 32bpp |
VGADrivers | RHELSLESSolarisUbuntuFreeBSDFedoraWindows Server R2 (WHQLlogo'ed)Windows Server (WHQLlogo'ed)Windows Server (WHQLlogo'ed) | RHELSLESSolarisUbuntuFreeBSDFedoraWindows Server R2 (WHQLlogo'ed)Windows Server R2 (WHQLlogo'ed) | RedhatRHEL 3/4/5/6SUSE SLES 9//11Solaris x86Windows Server R2 (WHQLlogo'ed)Windows Server x86/x64 (WHQLlogo'ed)Windows Server x86/x64 (WHQLlogo'ed)Windows series (WHQLlogo'ed)Windows XP x86/x64 | Redhat RHEL 3/4/5/6 SUSE SLES 9// Solaris x86 Windows Server R2 (WHQL logo'ed) Windows Server x86/x64 (WHQL logo'ed) Windows Server x86/x64 (WHQL logo'ed) Windows series (WHQL logo'ed) Windows XP x86/x64 |
LAN | Quad //1000M bps MAC | Dual //1000M bps MAC | Dual //1000M bps MAC | Dual //1000M bps MAC |
Technology | -pin 21mmx21mm TFBGA package | -pin 19mmx19mm TFBGA package | -pin 19mmx19mm LFBGA package | -pin 19mmx19mm TFBGA package |
Pin Compatibility | AST2620 | AST2510, AST2520, AST2530 | AST2400, AST1400,AST1250 | AST1300, AST1050 |
目前,OpenBmc项目中上用的最多的芯片是AST2500系列,AST240和AST2300系列相对使用较少,并且AST2400系列已经停产多年。AST2600是ASPEED的第七代服务器管理处理器,也是世界上第一个采用28nm先进工艺技术的BMC用途的SoC。AST2600采用双核ARM Cortex A7处理器,在提升性能和计算能力的同时,也降低了功耗。另外,AST2600支持SecreBoot模式和ARM Cortex A7 TrustZone,可以为客户提供出色的信息安全保护。由于AST2600系列由于上市不久,目前还在适配中,服务器大厂以及BMC软件公司有芯片,目前还没有大规模应用于服务器上。AST2600体积稍有增大,但相较于上一代增加了接近个GPIO管脚,预示着新一代的AST可以实现更丰富的功能。
随着cloud和AI等大风向袭来,未来对服务器的需求更多,而服务器的稳定、安全等都需要BMC来进行管理和维护,因此BMC芯片也越来越受到服务器厂商的重视。此外,由于BMC可以概览服务器的几乎一切,因此,面对贸易制裁以及芯片安全等问题,国产的浪潮已经全面到来,未来在重点领域中不仅服务器将会采用国产化芯片来替代,BMC也必须采用国产化芯片替代。但是,就国产BMC芯片来说,目前还没有一款真正意义上的BMC芯片(海思Hi1710除外,毕竟该芯片不对外,并且必须搭配iBMC使用),目前主要是有龙芯和飞腾芯片有提供芯片应用于BMC场景(能用,但是好不好用另说)。
龙芯最早应用BMC的芯片是ls1a300,只能算是勉强够用在特殊场景下(主频低并且不支持KVM),严格来说不能算BMC芯片。年7月龙芯发布了ls2k0500(LA架构,
https://www.loongson.cn/product/show?id=9),基于2k(嵌入式平台)的LA264单核位SOC,并支持了KVM功能,但是就实际情况来说,还处于测试打磨中,并没有广泛使用。2k0500对标产品是aspeed2500,但是各方面还是有待提升优化,毕竟此芯片的BMC应用场景只是其中的一个。期待龙芯打磨优化后下一代产品有更好的性能和竞争力。
飞腾在年月日公开了eBMC应用方案(
https://phytium.com.cn/article/),该方案是基于飞腾腾珑 E2000(
https://phytium.com.cn/article/)芯片和openbmc,BMC应用场景也是E2000的一个方向,从公开的数据手册看,是ARMV8架构下飞腾自主FTC310单核芯片,产品对标的是aspeeed2600,主频一致,手册上两者功耗也相差不大,但实际可用GPIO管脚要少不少。由于是ARM架构,具有天生优势,因为openbmc中适配的的芯片都是ARM架构(除了xilinx),E2000适配openbmc也没什么难度。不出意外很快就能看到该芯片搭配飞腾自己的服务器CPU而大展拳脚,可以发挥CPU和BMC芯片同服务器芯片的强关联性能(独特功能)。
5 OpenBMC软件架构
BMC硬件本身就是一个linux系统,但是与日常的计算机系统相比,BMC中的硬件资源非常有限。BMC硬件中CPU运行速度较慢(目前的BMC芯片主频都低于1GHZ),闪存(flash)一般在 MB,RAM一般在 MB。因此,OpenBMC被设计为完整的Linux发行版,可以灵活地定制以支持不同的SoC芯片或不同的板卡。
OpenBMC映像包括一个引导程序(u-boot),一个kernel,开源软件包和特定于主板的软件包,在“Wedge”内部的BMC上运行的“OpenBMC”软件包如下图所示。
u-boot(引导程序)和kernel都包括BMC芯片的各种硬件驱动,主要包括gpio驱动、PWM驱动、i2c驱动,SPI驱动、LPC驱动、USB驱动以及芯片外围的硬件设备驱动等。
开源软件包一般包括文件系统中常用应用程序,例如BusyBox,i2c工具,lm传感器,OpenSSH和Python、Ldap等。
用户板的软件包包括用于特定板的初始化脚本和工具。例如,用于从EEPROM获取资产信息的工具、风扇控制的应用程序,可根据环境读数控制风扇速度、ipmi协议守护程序、redfish协议程序、网络后端服务程序(实际用户远程管理使用)、BMC配置、监测程序等等。
OpenBMC中,配置文件可分为三层:
1、通用层:包括可用于不同板卡和BMCSoC的软件包。如meta-openembedded、meta-security等。
2、SoC层:包括特定于BMCSoC的软件包,例如Aspeed对AST2300 / AST2400SoC 基础包,引导加载程序和内核都在SoC层中定义。如meta-aspeed、meta-raspberrypi、meta-xilinx等。
3、板级层:包括用于不同板的封装,应用于特定Wedge的硬件配置的初始化脚本和工具,如meta-facebook、meta-ibm等。
6 OpenBmc源码
openbmc的git仓库地址:openbmc仓库,源码文件()内容如下:
各layer所对应的soc以及厂商如下表所示。
BSP目录 | 单板型号 | SOC型号 | soc/服务器厂商 |
meta-evb/meta-evb-aspeed/meta-evb-ast2500 | evb-ast2500 | ASPEED AST2500 | 信驊科技 |
meta-evb/meta-evb-aspeed/meta-evb-ast2600 | evb-ast2600 | ASPEED AST2600 | 信驊科技 |
meta-evb/meta-evb-nuvoton/meta-evb-npcm750 | evb-npcm750 | NuvotonNPCM7XX | 新塘科技 |
meta-evb/meta-evb-nuvoton/meta-evb-npcm845 | evb-npcm845 | NuvotonNPCM8XX | 新塘科技 |
meta-evb/meta-evb-raspberrypi | RaspberryPi | RaspberryPi | 树莓派 |
meta-amd/ | daytonax、ethanolx | ASPEED AST2500 | AMD |
meta-ampere | jade | ASPEED AST2500 | 安晟培半导体科技有限公司 |
meta-asrock/ | e3c246d4i、romed8hm3 | ASPEED AST2500 | 华擎科技 |
meta-bytedance/meta-g220a | g220a | ASPEED AST2500 | 字节跳动 |
meta-delta | ahe50dc | ASPEED AST2400 | |
meta-facebook/meta-tiogapass | tiogapass | ASPEED AST2500 | 脸书 |
meta-fii/mea-kudo | kudo | NuvotonNPCM730 | 工业富联 |
meta-fii/mea-mori | mori | NuvotonNPCM730 | 工业富联 |
meta-google/ | ASPEED/Nuvoton | ||
meta-hpe | dl360poc | hpe | 慧与 |
meta-ibm/meta-fsp2 | ibm-z | fsp2 | |
meta-ibm/meta-palmetto | palmetto | ASPEED AST2400 | ibm |
meta-ibm/meta-romulus | romulus | ASPEED AST2500 | ibm |
meta-ibm/meta-witherspoon | witherspoon | ASPEED AST2500 | ibm |
meta-ingrasys/meta-zaius | zaius | ASPEED AST2500 | 鸿佰科 |
meta-inspur/meta-on5263m5 | on5263m5 | ASPEED AST2500 | 浪潮 |
meta-intel-openbmc/meta-s2600wf | s2600wf | ASPEED AST2500 | intel |
meta-inventec/meta-lanyang | lanyang | ASPEED AST2500 | 英业达 |
meta-qualcomm/ | qcom | ASPEED AST2500 | 高通 |
meta-quanta/meta-f0b | fob | ASPEED AST2500 | 广达 |
meta-quanta/meta-gsj | gsj | NuvotonNPCM7XX | 广达 |
meta-quanta/meta-olympus-nuvoton | olympus-nuvoton | NuvotonNPCM7XX | 广达 |
meta-quanta/meta-q71l | quanta-q71l | ASPEED AST2400 | 广达 |
meta-tyan/meta-s7106 | s7106 | ASPEED AST2500 | 泰安 |
meta-tyan/meta-s8036 | s8036 | ASPEED AST2500 | 泰安 |
meta-wistron/meta-lannister | lannister | ASPEED AST2600 | 纬创 |
meta-yadro/meta-nicole | nicole | ASPEED AST2500 | 亚德罗 |
注:不同的版本下BSP会有区别,其它文件基本是yocto文件或者BMC芯片的通用的配置。
7 OpenBmc固件厂商
目前固件厂商主要是AMI(美国)、Insyde Software (系微,台湾)、昆仑太科、百敖软件厂商,在openbmc出现之前,BMC固件几乎全是AMI公司,目前,AMI仍是一家独大,但在国内市场越来越多的的使用昆仑、百敖、长城等固件,另外一些有能力的OEM大厂也开始使用基于openbmc的固件(浪潮、字节、阿里、H3C等)。由于BMC固件需要和BIOS进行交互,因此,一般BMC固件都是出自BIOS厂商。