OurBMC社区贡献指南之OpenBMC 开发指南

原创
01/19 11:12
阅读数 401

OpenBMC 开发指南

本文档介绍 OpenBMC 定制化构建的步骤。

1. 创建本地 OpenBMC 项目

1.1 依赖条件

参考Yocto 指导文档,在编译 OpenBMC 前,需要给编译的宿主机器,检查是否已经安装对应的软件。以 Ubuntu 和 Fedora 操作系统示例,使用如下命令,安装工具软件。

Ubuntu

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

Fedora

sudo dnf install git python3 gcc g++ gawk which bzip2 chrpath cpio hostname file diffutils diffstat lz4 wget zstd rpcgen patch

1.2 下载 OpenBMC 源码

git clone git@gitee.com:openbmc/openbmc.git

1.3 构建特定的 BMC 卡

使用如下命令,查看是否已实现对该 BMC 卡的适配;若未适配需要自行开发。

$ . setup
Target machine must be specified. Use one of:

ast25ps23               e2ps23                  evb-pomelov11
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

以 e2ps23 的服务器示例,执行如下命令。

cd openbmc
. setup e2ps23

4) 编译构建

bitbake obmc-phosphor-image

首次构建 OpenBMC,需要耗费很长的时间,这是因为要从互联网上下载各种软件包、工具链等。 'bitbake obmc-phosphor-image' 命令执行完成后,将会在 ‘tmp/dempoy/images/e2ps23' 目录下,生成 u-boot 、内核、文件系统、mtd 格式镜像等文件。

$ cd tmp/demploy/image/e2ps23
$ ls
fitImage  obmc-phosphor-image-e2ps23-20230814030016.static.mtd
u-boot.bin  u-boot-e2ps23.bin

1.5 烧录固件

将类似名为 'obmc-phosphor-image-e2ps23-20230814030016.static.mtd' 的 mtd 格式固件,烧录到 BMC 卡的 flash。启动 BMC 系统,即可验证 BMC 固件功能是否达到预期要求。

2. OpenBMC 开发

在 OpenBMC 的顶层目录里,可根据下面的命名规则,找到特定服务器的BMC型号,参考其他机器的配置文件,编写未适配机器的配置文件。

meta-<layer>/meta-<system>/conf/machine/machineA.conf
meta-<layer>/meta-<system>/conf/machine/machineB.conf

然后执行如下命令,若执行成功,将会在 'tmp/dempoy/images/machineB' 目录下,生成 u-boot、内核、文件系统、mtd 格式镜像等文件。

$ cd openbmc
$ . setup machineB
$ bitbake obmc-phosphor-image

3. 使用 devtool 修改 recipe

'devtool' 作为 Yocto 项目里的一款便捷工具,为 OpenBMC 的开发者提供了快捷的代码修改方式。 'devtool' 的使用命令如下:

$ devtool modify <recipe>
$ cd build/workspace/sources/<recipe>   
$ bitbake obmc-phosphor-image

其中 '<recipe>' 为 OpenBMC 的任一配方名称。在进入目录 'build/workspace/sources/<recipe>' ,可对源代码做本地修改保存后,执行 'bitbake obmc-phosphor-image' 命令成功后,修改的代码即可被编译进 mtd 格式的固件里。将mtd格式的固件烧录到 BMC 的 flash,启动 BMC 系统,可测试修改的功能是否生效。

3.1 devtool 使用示例

(1) 使用 'devtool' 解压源码压缩包。

devtool modify phosphor-state-manager

上述命令,将 recipe 名为 'phosphor-state-manager' 的源码,解压到如下目录里。

(2) 修改 recipe 的代码

vi workspace/sources/phosphor-state-manager/bmc_state_manager_main.cpp

添加 'Hello World' 的打印到 recipe 里。

+#include <iostream>

int main(int argc, char**)
{
@@ -17,6 +18,8 @@ int main(int argc, char**)

     bus.request_name(BMC_BUSNAME);

+    std::cout<<"Hello World" <<std::endl;
+
     while (true)
     {

(3) 重新构建编译

使用如下命令,将修改的 recipe 重新构建编译,打包进二进制的 flash 固件里。

bitbake obmc-phosphor-image

(4) 测试验证

将固件烧录到 flash,或在 QEMU 里测试验证,查看修改是否生效。

journalctl | grep "Hello World"

终端将会输出如下打印内容:

<date> e2ps23 phosphor-bmc-state-manager[1089]: Hello World

3.2 使用 devtool 修改 recipe

若 '<recipe>' 的修改达到设计的要求,可使用 'git format-patch' 命令,将差异文件,以补丁的形式导出。接着使用如下命令,将本地修改撤销,使用 OpenBMC 原生的 '<recipe>'。

$ devtool reset <recipe>

4. 设置软件包目录共享

在编译 OpenBMC 的服务器上,可以使得多个用户共享 OpenBMC 下载的软件包目录。OpenBMC 根据软件包的管理软件,给下载的软件包重新命名。用户可以在 'build/downloads' 查看下载的软件包。

  • 若软件包是单个的压缩包,命名如下:
    • zlib-1.2.11.tar.xz - 软件包的原名
    • zlib-1.2.11.tar.xz.done - 软件包已经下载完成的标志
  • 若软件包被git版本工具管理,命名如下:
    • git2/gitee.com.openbmc.linux - 软件包的原名
    • git2/gitee.com.openbmc.linux.done - 软件包已经下载完成的标志
展开阅读全文
加载中
点击引领话题📣 发布并加入讨论🔥
打赏
0 评论
0 收藏
0
分享
返回顶部
顶部