OpenBMC 示例的编译和构建
OpenBMC项目是一个Linux基金会协作开源项目,它生成底板管理控制器(BMC) 固件堆栈的开源实现。OpenBMC是BMC的Linux发行版,旨在跨异构系统工作,包括企业、高性能计算(HPC)、电信和云规模数据中心。2014年,四名Facebook程序员在Facebook黑客马拉松活动中创建了一个名为OpenBMC的开源BMC固件堆栈原型。2015年,IBM与Rackspace合作开发了开源
1. 简介
OpenBMC
项目是一个 Linux
基金会协作开源项目,它生成底板管理控制器(BMC
) 固件堆栈的开源实现。OpenBMC
是 BMC
的 Linux
发行版,旨在跨异构系统工作,包括企业、高性能计算(HPC
)、电信和云规模数据中心。
2014
年,四名 Facebook
程序员在 Facebook
黑客马拉松活动中创建了一个名为 OpenBMC
的开源 BMC
固件堆栈原型。2015
年,IBM
与Rackspace
合作开发了开源 BMC
固件堆栈(也称为 OpenBMC
)。这些项目仅在名称和概念上相似。2018
年 3
月,OpenBMC
成为 Linux
基金会项目并融合在 IBM
堆栈上。OpenBMC
项目的创始组织包括 Microsoft
、Intel
、IBM
、Google
和 Facebook
。成立了一个由五家创始公司代表组成的技术指导委员会来指导该项目。IBM
的 Brad Bishop
当选为技术指导委员会主席。2019
年 4
月,Arm Holdings
作为第六位 OpenBMC
技术指导委员会成员加入。
2. 特点
OpenBMC
使用 Yocto
项目作为底层构建和分发生成框架。固件本身基于 U-Boot
。OpenBMC
使用 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
小节继续完成下述步骤。
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)