
OpenBMC是基于Yocto項目的,而Yocto項目實在是太復(fù)雜了,本人也只了解了一點點,所以可能有不對的地方,以下是基于目前的理解所做的總結(jié):1.bbclass的作用可以認(rèn)為是為該layer中一些常用的工具定義了一組可以在多個配方中共享的任務(wù)和函數(shù)或一些通用的信息,比如想使用cmake,那么就在cmake.bbclass中定義了常用的宏定義,編譯選項等。*.bbclass是存放在 Layer 內(nèi)部的可復(fù)用構(gòu)建腳本庫,物理上歸屬于某一個 layer;Recipe(.bb)只是使用者:通過inherit xxx將 layer 中 bbclass 的函數(shù)、變量、構(gòu)建任務(wù)引入當(dāng)前配方。一個 bbclass 可以被成百上千個不同 recipe 繼承使用;一個 recipe 也可以同時繼承多個來自不同 layer 的 bbclass。以cmake.bbclass為例:它內(nèi)部已經(jīng)完整實現(xiàn) CMake 的配置、編譯、安裝任務(wù)。配方中只要寫inherit cmake,就自動套用整套 CMake 構(gòu)建流程,不需要在每個 bb 文件重復(fù)寫 cmake 調(diào)用腳本。bbclass 中不僅可以封裝函數(shù),還可以設(shè)置變量、修改依賴、注冊事件處理函數(shù)。一個配方支持同時繼承多個類,繼承順序有意義,后繼承的類會覆蓋前面的變量與任務(wù)。