OpenBMC 层与包

OpenBMC 层与包

我的博客

首先构建 OpenBMC 系统

首先克隆 OpenBMC仓库 后,进入克隆的仓库:

cd openbmc

执行 ls 命令,可以看到许多的层,比如:

 meta-ibm     meta-inventec       meta-phosphor      meta-security

这些层,有的是其他层的链接文件,有的是单独的层,有的层内部包含更加细分的层,执行推荐动作 . setup romulus,脚本自动执行配置环境变量,建立工作目录,拷贝一些配置文件等动作,且自动切换到工作目录:

arv:~/openbmc/openbmc/build/romulus$

因为执行完 . setup romulus 命令后,bitbakedevtool 工具路径已经被添加到环境变量中了,此时可以在当前目录下使用 bitbakedevtool工具,因为刚建立好工作目录,其中还没有代码,因此我们需要先执行一下默认的 romulus 工程的编译动作,先看一下其中的信息,执行如下命令:

bitbake obmc-phosphor-image

等待系统慢慢编译,一般8核i7设备在一个小时之内能够完成整个固件编译,如果配置较低,但是依旧满足 OpenBMC 的最低环境要求,可能需要两个小时,甚至更长的时间。

查看目标固件的相关信息

假设当前目录是在 ~/openbmc/openbmc/build/romulus,在这个目录下执行 cat conf/bblayers.conf,将有如下信息展示:

BBLAYERS ?= " \
  /home/arv/openbmc/openbmc/meta \
  /home/arv/openbmc/openbmc/meta-openembedded/meta-oe \
  /home/arv/openbmc/openbmc/meta-openembedded/meta-networking \
  /home/arv/openbmc/openbmc/meta-openembedded/meta-perl \
  /home/arv/openbmc/openbmc/meta-openembedded/meta-python \
  /home/arv/openbmc/openbmc/meta-security \
  /home/arv/openbmc/openbmc/meta-phosphor \
  /home/arv/openbmc/openbmc/meta-aspeed \
  /home/arv/openbmc/openbmc/meta-openpower \
  /home/arv/openbmc/openbmc/meta-ibm/meta-romulus \
  "

在这个打印内容中,BBLAYERS 中的内容都是以绝对路径展示的生成 romulus 这个固件依赖的层。

食谱

我们在前面已经通过 . setup romulus 配置过环境了,因此我们可以在当前路径下使用 bitbakedevtool工具,执行如下命令:

bitbake -g obmc-phosphor-image

bitbake 解析完毕元数据之后,会在当前目录下生成 pn-buildlist 以及 task-depends.dot 文件,其中 task-depends.dot 中为依赖图,这个我们暂时先不关注,我们主要关注 pn-buildlist 文件,执行命令:

cat pn-buildlist | grep curl

会打印如下内容:

curl-native
curlpp
curl

可以看到,curl 是生成 obmc-phosphor-image 依赖的 package,或者说是 recipe,这个关系有点混淆我暂时也不懂,留待后面补充。
如果我们执行:

bitbake -g curl

将会刷新当前的 pn-buildlist 文件,此时这个文件将是安装 curl 所依赖的包,具体内容不再展开。

查看支持的食谱

首先我们使用默认的 romulusobmc-phosphor-imagepn-buildlist,查看如下内容:

cat pn-buildlist | grep ipmitool

可以看到,编译默认的 romulus 固件,并没有使用 ipmitool 工具,这也可以在我们最终生成的固件中看出来。
当前的 OpenBMC 框架其实是支持 ipmitool 工具的,我们使用如下的命令,将当前支持的食谱 recipe 输出到一个文件中:

bitbake-layers --help
bitbake-layers show-recipes >> xdd_recipe.log
cat xdd_recipe.log | grep ipmitool

可以看到如下的输出:

ipmitool:

它其实是位于 meta-openembedded/meta-oe/recipes-kernel/ipmitool 下,因此,只需要在编译固件前,修改配置文件,添加额外的安装包就可以将 ipmitool 集成到最终生成的固件中了。

posted @ 2021-12-09 23:00  ArvinDu  阅读(1174)  评论(0编辑  收藏  举报