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