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