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
集成到最終生成的固件中了。