OpenBMC 层与包
OpenBMC 层与包
首先构建 OpenBMC 系统
首先克隆 OpenBMC
的仓库 后,进入克隆的仓库:
cd openbmc
执行 ls
命令,可以看到许多的层,比如:
meta-ibm meta-inventec meta-phosphor meta-security
这些层,有的是其他层的链接文件,有的是单独的层,有的层内部包含更加细分的层,执行推荐动作 . setup romulus
,脚本自动执行配置环境变量,建立工作目录,拷贝一些配置文件等动作,且自动切换到工作目录:
arv:~/openbmc/openbmc/build/romulus$
因为执行完 . setup romulus
命令后,bitbake
,devtool
工具路径已经被添加到环境变量中了,此时可以在当前目录下使用 bitbake
、devtool
工具,因为刚建立好工作目录,其中还没有代码,因此我们需要先执行一下默认的 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
配置过环境了,因此我们可以在当前路径下使用 bitbake
,devtool
工具,执行如下命令:
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
所依赖的包,具体内容不再展开。
查看支持的食谱
首先我们使用默认的 romulus
的 obmc-phosphor-image
的 pn-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
集成到最终生成的固件中了。