1. 简介

OpenBMC 项目是一个 Linux 基金会协作开源项目,它生成底板管理控制器(BMC) 固件堆栈的开源实现。OpenBMCBMCLinux 发行版,旨在跨异构系统工作,包括企业、高性能计算(HPC)、电信和云规模数据中心。

2014 年,四名 Facebook 程序员在 Facebook 黑客马拉松活动中创建了一个名为 OpenBMC 的开源 BMC 固件堆栈原型。2015 年,IBMRackspace 合作开发了开源 BMC 固件堆栈(也称为 OpenBMC)。这些项目仅在名称和概念上相似。20183 月,OpenBMC 成为 Linux 基金会项目并融合在 IBM 堆栈上。OpenBMC 项目的创始组织包括 MicrosoftIntelIBMGoogleFacebook。成立了一个由五家创始公司代表组成的技术指导委员会来指导该项目。IBMBrad Bishop 当选为技术指导委员会主席。20194 月,Arm Holdings 作为第六位 OpenBMC 技术指导委员会成员加入。

2. 特点

OpenBMC 使用 Yocto 项目作为底层构建和分发生成框架。固件本身基于 U-BootOpenBMC 使用 D-Bus 作为进程间通信(IPC)。OpenBMC 包含一个用于与固件堆栈交互的 Web 应用程序。OpenBMC 添加了 Redfish 对硬件管理的支持。

3. 示例平台构建

3.1. 安装依赖

安装相关依赖

sudo apt install git python3-distutils gcc g++ make file wget \
    gawk diffstat bzip2 cpio chrpath zstd lz4 bzip2

3.2. 下载源码

下载 OpenBMC 源码包。

git clone https://github.com/openbmc/openbmc
cd openbmc

🌟[注]:通过官方下载的源码包编译需要数小时之久,笔者下文中给出编译过的源码包,即已下载好了部分依赖包的工程代码,具体获取及操作见本文第 4 小节。

3.3. 构建

设置目标硬件平台

$ . setup <machine> [build_dir]
Target machine must be specified. Use one of:

bletchley               mori                    s8036
dl360poc                mtjade                  swift
e3c246d4i               mtmitchell              tatlin-archive-x86
ethanolx                nicole                  tiogapass
evb-ast2500             olympus-nuvoton         transformers
evb-ast2600             on5263m5                vegman-n110
evb-npcm750             p10bmc                  vegman-rx20
f0b                     palmetto                vegman-sx20
fp5280g2                qcom-dc-scm-v1          witherspoon
g220a                   quanta-q71l             witherspoon-tacoma
gbs                     romed8hm3               x11spi
greatlakes              romulus                 yosemitev2
gsj                     s2600wf                 zaius
kudo                    s6q
lannister               s7106

[注]:如上为 OpenBMC 默认所支持的硬件平台。

这选择 romulus 平台作为示例:(romulus 模拟的是 AST2500 平台)

. setup romulus

3.4. 编译

编译生成镜像

bitbake obmc-phosphor-image

[注]:该过程最好能挂梯子后再构建,否则可能会无法下载到一些软件包。并且该过程稍微有点长,耐心等待。

第一次构建的话,也许需要等待好几个小时(而往往不会一次构建成功,因为网络原因,你懂的)。但当第一次构建完成后在之后的构建过程将会相对容易,因为会从已经下载好的工程中获取。

这里笔者虽然编译过程中有一些警告但仍然还是可以运行起来系统,这是笔者编译完成的结尾部分。

在这里插入图片描述

编译完成后的目标目录在 build 下所对应的平台目录,其目录结构如下图。
在这里插入图片描述

其所生成的系统镜像以及其它平台相关文件会保存在上述目录的 tmp/deploy/images/romulus 目录中。

在这里插入图片描述

其中包含如下文件,我们下面将要使用到的文件就是所生成的系统镜像文件 obmc-phosphor-image-romulus.static.mtd

在这里插入图片描述

3.5. 启动系统

登录到 BMC 系统,启动 BMC 系统,使用映射本地端口方式启动。

sudo qemu-system-arm -m 256 -M romulus-bmc -nographic -drive file=./tmp/deploy/images/romulus/obmc-phosphor-image-romulus.static.mtd,format=raw,if=mtd -net nic -net user,hostfwd=:127.0.0.1:2222-:22,hostfwd=:127.0.0.1:2443-:443,hostname=qemu

[注]:一般执行完上面的 bitbake 构建命令后,会自动进入所构建目标平台的目录中,此处的相对路径是在该目录中执行。

  • -m 指定了内存的大小;
  • -M 指定机器架构;
  • -nographic 表示无图像输出,串口会输出的控制台;
  • -driver file=xx 指定了启动的系统,这里就是我们的 openbmc 固件系统;
  • -net 设定网络参数;

如果说上一步 bitbake obmc-phosphor-image 并没有通过的话,那么也可以下载官方编译好的镜像。

wget https://jenkins.openbmc.org/job/latest-master/label=docker-builder,target=romulus/lastSuccessfulBuild/artifact/openbmc/build/tmp/deploy/images/romulus/obmc-phosphor-image-romulus.static.mtd

然后执行如下命令,启动 BMC 系统。

sudo qemu-system-arm -m 256 -M romulus-bmc -nographic -drive file=./obmc-phosphor-image-romulus.static.mtd,format=raw,if=mtd -net nic -net user,hostfwd=:127.0.0.1:2222-:22,hostfwd=:127.0.0.1:2443-:443,hostname=qemu

在这里插入图片描述

BMC 的登录用户为:root
密码:0penBmc
[注]:此处的是数字 0,并非字母 o。

在这里插入图片描述

3.6. 访问 WebUI

若是按照本文上述中启动的 BMC 系统,那么在启动成功后便可以在当前 Linux 中使用浏览器访问 OpenBMC 的控制页面,在浏览器导航栏中输入:

https://localhost:2443/

在这里插入图片描述

[注]:这里的用户名和密码同样分别是 root,0penBmc。

在这里插入图片描述

#完

到此,恭喜你已经成功构建出示例平台的 OpenBMC

🌟4. 使用笔者提供的 OpenBMC

笔者提供的 OpenBMC 链接:https://github.com/ImagineMiracle-wxn/OpenBMC/releases/tag/Demo-Romulus

在这里插入图片描述

[注]:一定要下载全哦,一共有 13 个文件。

下载所有的 openbmc-im.tar.gz.**,到自己的系统中,这些是拆分后的压缩包文件,需要合并在一起才可以解压。

$ cat openbmc-im.tar.gz.* > openbmc-im.tar.gz
$ tar -zxvf openbmc-im.tar.gz

$ cd openbmc-im/build/romulus/conf
$ vim bblayers.conf

首先需要将 openbmc-im/build/romulus/conf/bblayers.conf 文件中的项目所在路径(下图中红框部分)修改为当前项目所在的绝对路径。(根据每个人所放的位置不同修改,否则编译将找不到具体文件)

在这里插入图片描述

[注]:事实上还需要删除 openbmc-im/build/romulus/tmp 目录,这一步笔者已经替大家完成了,因此不必关心。

# 回到 openbmc-im 根目录
$ cd ../../../

修改完后请跳回本文第 3 小节继续完成下述步骤。

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐