本文围绕基于开源 OpenBMC 架构开展飞腾、龙芯等国产 CPU 的 BMC 开发,系统介绍了 OpenBMC 的概念与来历、IPMI 核心协议、OpenBMC 软件分层架构,以及飞腾 E2000S 与龙芯 2K0500 两种国产硬件平台的选型与适配方案,为构建自主可控的国产带外管理系统提供参考。
一、OpenBMC 简介
BMC(Baseboard Management Controller,基板管理控制器)是嵌入在服务器主板上的专用微控制器,应用了 IPMI 架构的智能性,是系统管理软件与平台硬件之间的接口。它本质上是主板上一块独立的小板卡,拥有自己独立的处理器和控制系统,通过 IPMB、LPC、SMBus 等接口与主机硬件或主机系统通信,并通过网络、串行/Modem、PCI 等接口向本地与远程管理系统提供查询和控制能力。
OpenBMC 是 BMC 的 Linux 发行版,旨在跨异构系统(企业、HPC、电信与云规模数据中心)提供统一的管理能力。2014 年四名 Facebook 程序员在黑客马拉松中创建了名为 OpenBMC 的原型固件;2015 年 IBM 与 Rackspace 合作开发了同样名为 OpenBMC 的开源 BMC 固件堆栈;2018 年 3 月 OpenBMC 成为 Linux 基金会项目。其创始组织包括 Microsoft、Intel、IBM、Google 和 Facebook,2019 年 Arm 加入技术指导委员会。OpenBMC 使用 Yocto Project 作为底层构建与发行框架,并结合 OpenEmbedded、systemd 和 D-Bus 等技术定制管理平台,同时提供 Web 应用并加入 Redfish 硬件管理支持,支持主机状态查看、控制与固件更新等功能。
图 1 BMC 在服务器中的带外管理示意
二、IPMI 简介
IPMI 是目前 BMC 的核心,BMC 的远程控制大多通过 IPMI 协议实现。其全称为 Intelligent Platform Management Interface(智能平台管理接口)。IPMI 规范了体系化的管理模型,BMC 是其中最重要的部分;此外还有一些“模块”控制器通过 IPMB 与 BMC 相连,分别控制特定设备,其中部分支持热插拔。IPMB(Intelligent Platform Management Bus)是一种基于 I2C 的串行总线,用于 BMC 与模块(主板上的子卡)控制器之间的通信,其上传递的是 IPMI 命令。
IPMI 接口基于命令/响应机制,通过网络将机箱、传感器、固件、存储、应用等组件信息分类传递,并可在网络、串行/Modem、IPMB(I2C)、KCS、SMIC、SMBus 等不同接口上以统一格式传输。IPMI 1.0 于 1998 年发布基本规范,1.5 于 2001 年增加了串口与带外/带内网口远程通讯,2.0 于 2004 年加入 SOL、群组管理、身份认证(RAKP+、SHA-1)、安全增强网络接口、固件防火墙与 VLAN 等,2.0 修订版 1.1(2013 年)进一步支持 IPv6 寻址。
图 2 IPMI 体系结构示意图
三、OpenBMC 软件架构
BMC 硬件本身就是一个计算机系统。与常用计算机系统相比,BMC 的硬件资源非常有限:CPU 运行速度较慢,闪存一般在 32 MB 左右,RAM 一般少于 256 MB。因此 OpenBMC 被设计为完整的 Linux 发行版,可灵活定制以支持不同的 BMC SoC 或板卡。OpenBMC 映像包括引导程序(u-boot)、Linux 内核、开源软件包和特定于主板的软件包:引导加载程序和内核包含 i2c、USB、LPC、PWM、SPI 等硬件驱动;开源软件包一般包括 BusyBox、i2c 工具、lm-sensors、OpenSSH、Python 等常用应用;用户板软件包则包括针对特定板的初始化脚本与工具,例如从 EEPROM 转储资产信息的工具和风扇控制器守护程序。
从软件组织上看,OpenBMC 共有三组层:通用层包含可复用于不同板卡与 SoC 的软件包(如 meta-openembedded、meta-security);SoC 层包含特定于 BMC SoC 的软件包,引导加载程序与内核均在此定义(如 meta-aspeed);板层则包含面向不同板的封装、初始化脚本与工具(如 meta-facebook、meta-ibm)。针对飞腾、龙芯等国产 SoC,开发时即需新增对应的 SoC 层与板层,完成底层驱动与硬件抽象的适配。
图 3 OpenBMC 软件分层与镜像生成流程
四、以飞腾 E2000S 为BMC管理芯片
在硬件选型上,国产 BMC 可优先采用飞腾腾珑 E2000S 作为主控平台。E2000S 是飞腾面向嵌入式与边缘计算场景的高集成度 SoC,集成飞腾自研处理器核,并提供 I2C、SPI、UART、GPIO、PCIe、USB、GbE 等丰富的外设接口,具备低功耗、高集成、自主可控等特点,能够满足 BMC 对传感器采集、风扇控制、串口重定向与带外网络管理的需求。
以 E2000S 为硬件底座开发国产 BMC 时,可在 OpenBMC 框架内新增面向飞腾 SoC 的 meta 层与板级配置,移植引导程序、内核及 i2c/SPI/UART/GPIO/以太网等驱动,并针对国产 CPU 完善电源管理、远程 KVM、安全启动与国密算法支持,从而构建一套跨平台兼容、自主可控、高效稳定的服务器带外管理系统。
图 4 飞腾 E2000S 国产 SoC 平台
五、硬件平台以龙芯 2K0500 为例
除飞腾平台外,龙芯 2K0500 也是面向 BMC 应用的理想国产芯片。2K0500 是龙芯中科推出的一款高集成度处理器,官方明确将其定位于工控互联网、打印终端与 BMC 等场景,片内集成 64 位 LA264 处理器核(双发射乱序执行,主频 500MHz~800MHz)、32 位 DDR2/DDR3 控制器、2D GPU 与 DVO 显示接口,并提供两路 PCIe2.0、两路 SATA2.0、一路 USB3.0、四路 USB2.0、两路 GMAC,以及 LPC、SPI、I2C、UART、PWM、GPIO、ADC 等丰富外设,配合 ACPI、DVFS/DPM 动态电源功耗管理,功耗仅 1~3W,与 BMC 资源受限、低功耗、强外设的需求高度契合。以 2K0500 为硬件底座构建国产 BMC 时,可在 OpenBMC 框架内新增面向龙芯 LoongArch 的 SoC 层与板层,完成引导程序、内核与 PCIe、LPC、USB、I2C、ADC、PWM、GMAC 等驱动的移植。在软件层面,可基于昆仑 BMC 固件或 OpenBMC 软件栈,结合银河麒麟高级服务器操作系统 V10 进行交互协同,实现 iKVM、远程虚拟媒体挂载、服务器监控管理、外设状态监控、用户管理及安全、故障预警与固件更新升级等完备功能,形成从 BMC 芯片、BMC 固件到操作系统的全自主国产带外管理解决方案。