OpenBmc开发1:openbmc简介

1、OpenBMC简介

     在说OpenBMC之前,先说一下BMC(Baseboard Manager Controller,简称BMC),BMC应用了IPMI架构的智能性,是嵌入在计算机(通常是服务器)主板上的专用的微控制器。它是负责管理系统和管理软件与服务器平台硬件之间的一个接口。

    根据IPMI规范,BMC需要满足如下条件:

  • 具有IMPI命令;
  • 提供BMC访问接口(一般是网口);
  • 提供标准化的看门狗定时器接口和看门狗内部事件产生功能;
  • 提供可被其他主机组件使用的事件接收功能;
  • 提供可通过相应的IPMI必选命令访问的SDR(传感器数据记录)、SEL(系统事件记录)和FRU(现场可替换单元)等功能;

       简而言之,BMC就是服务器主板上一块独立的小板卡,有自己独立的处理器,和控制系统,通过IPMB、LPC(low-pin-count-interface)、SMBus等接口与主机硬件或者主机系统进行通信,并通过网络、串行/Moderm、PCI等接口传向本地主机/远程服务器提供查询和控制等功能。

       OpenBMC是BMC 的Linux发行版,旨在跨越异构系统,包括企业,高性能计算(HPC),电信和云规模数据中心等系统的管理。

       2014年,四名Facebook程序员在一次Facebook 黑客马拉松活动上创建了一个名为OpenBMC的原型开源BMC固件。 

      2015年,IBM与Rackspace合作开发了一个开源BMC固件堆栈,也称为OpenBMC。这些项目仅在名称和概念上相似。

     2018年3月,OpenBMC成为Linux Foundation项目并融合在IBM堆栈上。OpenBMC项目的创始组织是Microsoft、Intel、IBM、Google和Facebook。并且成立了一个技术指导委员会,由五家创始公司的代表来指导该项目。IBM的Brad Bishop当选为技术指导委员会主席。

    2019年4月,ArmHoldings也加入了OpenBMC技术指导委员会,成为了第六名成员。

       OpenBmc使用Yocto Project作为底层构建和发行的框架,并结合OpenEmbedded,systemd以及D-BusOpen等技术来轻松定制管理平台。同时,OpenBMC包含一个用于与固件堆栈进行交互的Web应用程序,并添加了Redfish对硬件管理的支持。它支持常见的主机状态查看和控制、主机固件更新等功能。

2、IPMI简介

       IPMI的全称是Intelligent Platform Management Interface,智能平台管理接口。IPMI规定了很多的东西,BMC是其中最重要的一个部分,此外还有一些”模块“控制器通过IPMB与BMC相连,这些”模块“控制器一般控制特定的设备,有些支持热插拔。可以说目前IPMI是BMC的核心,BMC的远程控制基本都是通过ipmi协议实现。

       IPMB全称Intelligent Platform Management Bus,是一种基于I2C的串行总线,它用于BMC与模块(主板上的子卡)控制器的通信,其上传递的是IPMI命令。

       IMPI接口基于命令/响应机制,可通过网络将机箱、传感器、固件、存储、应用等主机组件的信息进行分类传递,通过软件ID对BIOS、系统管理软件、远程终端等传感器等进行分类管理,在网络、串行/Moderm接口、IPMB(I2C)、KCS、SMIC、SMBus等不同接口上传递都使用统一的格式。

      IPMI1.0于1998年9月16日发布,制定了基本规范。

      IPMI1.5于2001年2月21日发布,允许IPMI系统通过串口,BMC专用的带外网口,或者与主机共享的带内网口(NC-SI)与远程管理系统通讯。

      IPMI2.0于2004年2月12日发布,增加了SOL(serial over LAN)、群组管理系统、身份认证(RAKP+、SHA-1等)、基于OpenSSL/RCMP+的安全增强网络接口、固件防火墙和VLAN支持等。其中,SOL支持将BIOS输出和操作系统终端重定向到与BMC相连的串口,进而通过IPMI与远程系统管理软件连接。同时,IPMI2.0兼容系统通常还提供KVM over IP(基于IP的远程键盘鼠标显示器连接)、远程桌面和页面服务器等功能,尽管这些功能并不属于IPMI协议。

     IPMI2.0修订版1.1于2013年10月1日发布,修订了勘误表,说明和附录,并增加了对IPv6寻址的支持。

     更多信息请参考英特尔IPMI技术资源网站、常见IPMI软件开源项目对比。

3 Yocto项目简介

        Yocto项目是Linux基金会协作开源项目,其目标是生产工具和流程,使创建Linux发行版的嵌入式和物联网软件独立于嵌入式硬件的底层架构。该项目由Linux基金会于2010年宣布,并于2011年3月与22个组织(包括OpenEmbedded)合作启动。2018年10月,Arm Holdings与Intel合作,通过Yocto项目共享嵌入式系统的代码。

        Yocto项目的目的和目标是尝试改善减轻ARM,MIPS,PowerPC和x86 / x86-64体系结构的定制Linux系统的开发人员的工作。其中的关键部分是OpenEmbedded构建系统,它使开发人员能够创建特定于其环境的自己的Linux发行版。Yocto Project和OpenEmbedded Project共享OpenEmbedded构建系统主要部分的维护权:构建引擎BitBake和核心元数据OpenEmbedded-Core。Yocto项目提供了一个称为Poky包含OpenEmbedded构建系统以及按层级分层系统排列的大量配方,可以用作定制嵌入式操作系统的全功能模板。

        Yocto项目框架下还有其他几个子项目,包括CROPS,伪交叉预链接,Eclipse集成(已从2.7 版删除),火柴盒应用程序套件以及许多其它子项目。该项目的主要目标之一是这些工具之间的通用性和交互性。

        该项目提供了从“微小”到功能齐全的图像的大小不同的系统,这些系统镜像可由最终用户配置和自定义。该项目鼓励与上游项目进行交互,并为OpenEmbedded-Core和BitBake以及包括Linux内核在内的众多上游项目做出了巨大贡献。生成的镜像通常在嵌入式Linux的系统中使用,这些系统是常用的系统或没有像台式机Linux系统相关的常规屏幕/输入设备的系统。

         除了构建Linux系统外,还可以生成用于交叉编译的工具链和针对其自己的发行版量身定制的软件开发工具包(SDK),也称为应用程序开发者工具包(ADT)。该项目尝试与软件和供应商无关。因此,例如,可以选择要使用的包管理器格式(deb,rpm或ipk)。在构建中,存在用于各种构建时完整性/回归测试的选项,还具有在QEMU下引导和测试某些映像以验证构建的选项。构建流程如下图所示。

4、BMC的CPU

     OpenBmc硬件平台最多的是Aspeed,其次是Xilinx 、NXP等。 aspeed是bmc管理平台的核心(请参考aspeed官网),类似internal和AMD的cpu,但是ASPEED是ARM架构,目前最新的soc型号是AST2600,它采用ARM V7架构的双核ARM Cotex A7。目前,已有国产芯片(龙芯)移植了OpenBMC,未来也会有更多的国产BMC芯片(RISC-V架构)。

AST2600 AST2500 AST2400 AST230
Embedded CPU Dual-core ARM Cortex A7
 Embedded 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-1600Mbps
 Up to 2G Byte
 ECC option
800Mbps DDR3/1600Mbps DDR4 SDRAM
 16-bit data bus width
 Up to 1G Byte
 ECC option
 800Mbps DDR3/DDR2 SDRAM
 16-bit data bus width
 Up to 512 MB
 ECC option
800Mbps DDR3/DDR2 SDRAM
16-bit data bus width
Up to 512 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 to 1920×1200
 YUV444/YUV420 Video Compression
 24 bits video compression quality
Video Redirection up to 1920×1200
 YUV444/YUV420 Video Compression
 24 bits video compression quality
Video Redirection up to 1920×1200
 YUV444/YUV420 Video compression
 24 bits video compression quality
Video Redirection up to 1920×1200
YUV444/YUV420 Video compression
24 bits video compression quality
USB-Over-IP USB 2.0 virtual hub controller with 5 devices supported
 USB 1.1 HID device controller
USB 2.0 virtual hub controller with 5 devices supported
 USB 1.1 HID device controller
 USB 2.0 virtual hub controller with 5 any types devices supported
 USB 1.1 HID device controller
USB 2.0 virtual hub controller with 5 any types devices supported
USB 1.1 HID device controller
BMC  BMC controller with IPMI 2.0/1.5 compliant
 Remote Presence (iKVM)
 PCIe host capability
 eSPI/LPC
 MCTP over PCIe
 I2C/I3C/SMBus (Total 16 sets)
 Virtual UART (1 set)
 UART (13 sets and 1 set for FW debug)
 GPIO (244 sets)
 SGPIO (80 bits)
 PWM (16 sets)
 Secure boot engine
 Fan tachometer (16 sets)
 PECI 4.0
 USB1.1/2.0 Host
 SD/SDIO (2 ports)
 Embedded SRAM
 ADC (16 channels) Port 80h snoop
 Watchdog (3 sets)
 Timer (8 sets)
yes yes yes
VGA PCIe VGA/2D Controller
 1920×1200@60Hz 32bpp
PCIe VGA/2D Controller
 1920×1200@60Hz 32bpp
PCIe VGA/2D Controller
 1920×1200@60Hz 32bpp
PCIe VGA/2D controller
1920×1200@60Hz 32bpp

VGA

Drivers

RHEL
 SLES
 Solaris
 Ubuntu
 FreeBSD
 Fedora
 Windows Server 2012 R2 (WHQL logo'ed)
 Windows Server 2016 (WHQL logo'ed)
 Windows Server 2019 (WHQL logo'ed)
RHEL 
 SLES 
 Solaris
 Ubuntu
 FreeBSD
 Fedora
 Windows Server 2008 R2 (WHQL logo'ed)
 Windows Server 2012 R2 (WHQL logo'ed)
Redhat RHEL 3/4/5/6
 SUSE SLES 9/10/11
 Solaris x86
 Windows Server 2008 R2 (WHQL logo'ed)
 Windows Server 2008 x86/x64 (WHQL logo'ed)
 Windows Server 2003 x86/x64 (WHQL logo'ed)
 Windows 2000 series (WHQL logo'ed)
 Windows XP x86/x64

Redhat RHEL 3/4/5/6
SUSE SLES 9/10/11
Solaris x86
Windows Server 2008 R2 (WHQL logo'ed)
Windows Server 2008 x86/x64 (WHQL logo'ed)
Windows Server 2003 x86/x64 (WHQL logo'ed)
Windows 2000 series (WHQL logo'ed)
Windows XP x86/x64

LAN Quad 10/100/1000M bps MAC Dual 10/100/1000M bps MAC  Dual 10/100/1000M bps MAC Dual 10/100/1000M bps MAC
Technology 624-pin 21mmx21mm TFBGA package 456-pin 19mmx19mm TFBGA package 408-pin 19mmx19mm LFBGA package 408-pin 19mmx19mm TFBGA package
Pin Compatibility AST2620 AST2510, AST2520, AST2530 AST2300, AST1300, AST1050, AST1400, AST1250 AST1300, AST1050

       目前,OPenBmc项目中上用的最多的芯片是AST2500系列,AST240和AST2300系列相对使用较少,并且AST2400系列已经停产。AST2600是ASPEED的第七代服务器管理处理器,也是世界上第一个采用28nm先进工艺技术的BMC SoC。AST2600采用双核ARM Cortex A7处理器,可以优化性能和计算能力。也大大降低了功耗。另外,AST2600支持Secre Boot模式和ARM Cortex A7 TrustZone,可以为客户提供出色的信息安全保护。由于AST2600系列由于上市不久,目前还在适配中。AST2600体积稍有增大,但相较于上一代增加了接近170GPIO,预示着新一代的AST可以实现更丰富的功能。

5 OpenBMC软件架构

BMC硬件本身就是一个计算机系统。与常用的计算机系统相比,BMC中的硬件资源非常有限。BMC硬件中CPU运行速度较慢,闪存(flash)一般在32 MB,RAM一般少于256 MB。因此,OpenBMC被设计为完整的Linux发行版,可以灵活地定制以支持不同的BMC SoC或板卡。

OpenBMC映像包括一个引导程序(u-boot),一个Linux内核,开源软件包和特定于主板的软件包。

引导加载程序和Linux内核:包括BMC SoC的各种硬件驱动程序,包括i2c驱动程序,USB驱动程序,LPC驱动、PWM驱动程序和SPI驱动等等。

开源软件包:一般包括常用应用程序,例如BusyBox,i2ctools,lm传感器,OpenSSH和Python等。

用户板的软件包:包括用于特定板的初始化脚本和工具。例如,一个用于从EEPROM转储资产信息的工具和一个风扇控制器守护程序,用于根据环境读数控制风扇速度。

在“ Wedge”内部的BMC上运行的“ OpenBMC”软件包如下图所示。

        OpenBMC中,共有三组层:

        1、通用层:包括可用于不同板卡和BMC SoC的软件包。如meta-openembedded、meta-security等。

        2、SoC层:包括特定于BMC SoC的软件包,例如Aspeed对AST2300 / AST2400 SoC 基础包,引导加载程序和内核都在SoC层中定义。如meta-aspeed、meta-raspberrypi、meta-xilinx等。

        3、板层:包括用于不同板的封装。应用于特定Wedge的硬件配置的初始化脚本和工具,如meta-facebook、meta-ibm等。

6 OpenBmc源码

        openbmc的git仓库:openbmc仓库(https://github.com/openbmc/openbmc),源码文件如下:

        matster分支下的layer所对应的soc如下表所示。      

BSP目录 单板型号 SOC型号 ARM开发版
meta-evb/meta-evb-enclustra/meta-evb-zx3-pm3 evb-zx3-pm3 Xilinx Zynq-7000 arm Cortex-A9
meta-evb/meta-evb-aspeed/meta-evb-ast2500 evb-ast2500 ASPEED AST2500 arm1176jz-s
meta-evb/meta-evb-nuvoton/meta-evb-npcm750 evb-npcm750 Nuvoton NPCM7XX arm7a-novfp
meta-evb/meta-evb-raspberrypi RaspberryPi RaspberryPi arm1176jzf-s
meta-facebook/meta-tiogapass tiogapass ASPEED AST2500 arm1176jz-s

metahxt/metastardragon4800-rep2

stardragon4800-rep2 ASPEED AST2500 arm1176jz-s
meta-ibm/meta-fsp2 ibm-z fsp2 PPC476
meta-ibm/meta-palmetto palmetto ASPEED AST2400 arm926ejs
meta-ibm/meta-romulus romulus

ASPEED AST2500

arm1176jz-s
meta-ibm/meta-witherspoon witherspoon ASPEED AST2500 arm1176jz-s
meta-ingrasys/meta-zaius zaius ASPEED AST2500 arm1176jz-s
meta-inspur/meta-on5263m5 on5263m5 ASPEED AST2500 arm1176jz-s
meta-intel/meta-s2600wf s2600wf ASPEED AST2500 arm1176jz-s
meta-inventec/meta-lanyang lanyang ASPEED AST2500 arm1176jz-s
meta-mellanox/meta-msn msn

ASPEED AST2500

arm1176jz-s
meta-phosphor qemuarm arm versatile 926ejs arm926ejs
meta-portwell/meta-neptune neptune ASPEED AST2500 arm1176jz-s
meta-qualcomm/meta-centriq2400-re centriq2400-rep ASPEED AST2500 arm1176jz-s
meta-quanta/meta-f0b fob ASPEED AST2500 arm1176jz-s
meta-quanta/meta-gsj gsj Nuvoton NPCM7XX arm7a-novfp
meta-quanta/meta-runbmc-nuvoton runbmc-nuvoton Nuvoton NPCM7XX arm7a-novfp
meta-quanta/meta-q71l quanta-q71l ASPEED AST2400 arm926ejs
poky/meta-poky qemux86 i586 x86

:不同的分支下的BSP对应不同的硬件平台,有效BSP必须同时包含:local.conf.sample和bblayers.conf.sample两个文件。

Published by

风君子

独自遨游何稽首 揭天掀地慰生平