bitbake簡介(1)

BitBake 介紹

  1. 簡介

BitBake 是用 Python 寫的一個程序,它是 OpenEmbedded 構建系統時使用的生產工具,現在有很多嵌入式系統都是在使用,比如Yocto 、WindRiver Linux 等。它是一個多任務引擎,可以並行執行 shell 和 Python 任務,每個任務單元根據預定義的元數據來管理源碼、配置、編譯、打包,並最終將每個任務生成的文件集合成爲系統鏡像。例如要從源碼構建一個 Linux 系統,需要搭建一個生產環境,然後依次生成 Grub、Kernel、各種庫文件、各種可執行文件,然後集合到一個文件系統裏。如果你玩過 LFS ,就會了解這個過程的複雜性。BitBake 存在的意義就是提供了一個高效的工具,將這個過程標準化、流程化。BitBake 與 GNU Make 的關係就像 GNU Make 之於 GCC ,運作方式也類似 GNU Make ,又有很多不同:

  • BitBake 根據預先定義的元數據執行任務,這些元數據定義了執行任務所需的變量,執行任務的過程,以及任務之間的依賴關係,它們存儲在 recipe(.bb)、append(.bbappend)、configuration(.conf)、include(.inc) 和 class(.bbclass) 文件中。
  • BitBake 包含一個抓取器,用於從不同的位置獲取源碼,例如本地文件、源碼控制器(git)、網站等。
  • 每一個任務單元的結構通過 recipe 文件描述,描述的信息有依賴關係、源碼位置、版本信息、校驗和、說明等等。
  • BitBake 包含了一個 C/S 的抽象概念,可以通過命令行或者 XML-RPC 使用,擁有多種用戶接口。

幾個概念:

  • Recipe 。Recipe 文件是最基本的元數據文件,每個任務單元對應一個 Recipe 文件,後綴是 .bb ,這種文件爲 BitBake 提供的信息包括軟件包的基本信息(作者、版本、License等)、依賴關係、源碼的位置和獲取方法、補丁、配置和編譯方法、如何打包和安裝。
  • Configuration 。Configuration 文件的後綴是 .conf ,它會在很多地方出現,定義了多種變量,包括硬件架構選項、編譯器選項、通用配置選項、用戶配置選項。主 Configuration 文件是 bitbake.conf ,以 Yocto 爲例,位於 ./poky/meta/conf/bitbake.conf ,其他都在源碼樹的 conf 目錄下。
  • Classes 。Class 文件的後綴是 .bbclass ,它的內容是元數據文件之間的共享信息。BitBake 源碼樹都源自一個叫做 base.bbclass 的文件,在 Yocto 中位於 ./poky/meta/classes/base.bbclass ,它會被所有的 recipe 和 class 文件自動包含。它包含了標準任務的基本定義,例如獲取、解壓、配置、編譯、安裝、打包,有些定義只是框架,內容是空的。
  • Layers 。Layer 被用來分類不同的任務單元。某些任務單元有共同的特性,可以放在一個 Layer 下,方便模塊化組織元數據,也方便日後修改。例如要定製一套支持特定硬件的系統,可以把與低層相關的單元放在一個 layer 中,這叫做 Board Support Package(BSP) Layer 。
  • Append 。Append 文件的後綴是 .bbappend ,用於擴展或者覆蓋 recipe 文件的信息。BitBake 希望每一個 append 文件都有一個相對應的 recipe 文件,兩個文件使用同樣的文件名,只是後綴不同,例如 formfactor_0.0.bb 和 formfactor_0.0.bbappend 。命名 append 文件時,可以用百分號(%)來通配 recipe 文件名。例如,一個名爲 busybox_1.21.%.bbappend 的 apend 文件可以對應任何名爲 busybox_1.21.x.bb 的 recipe 文件進行擴展和覆蓋,文件名中的 x 可以爲任何字符串,比如 busybox_1.21.1.bb、busybox_1.21.2.bb ... 通常用百分號來通配版本號。

BitBake 命令的語法可以執行 bitbake -h 查看。-b 用於指定 recipe 文件,-c 用於指定要執行的任務,如果沒有指定任務,會按照 recipe 文件完整的執行一次從獲取源碼到編譯打包的過程。要編譯一個名爲 foo_1.0.bb 的包,可以執行:


 
  • $ bitbake -b foo_1.0.bb

可以不用 -b ,而只寫包的名字,不加下劃線後的版本號和後綴,簡化爲:


 
  • $ bitbake foo

如果要執行清除任務:


 
  • $ bitbake foo -c clean

2. 工作流程

運行 BitBake 的主要目的是生成一個東西,例如安裝包、內核、鏈接庫、或者一個完整的 Linux 系統啓動鏡像(包括 bootloader、kernel、根文件系統)。當然,你也可以通過使用 bitbake 命令的某些參數,只執行生成過程中的某個步驟,例如編譯、獲取或清除數據、或者只返回編譯環境的信息。

簡單說一下使用 BitBake 生成系統鏡像的的執行過程。

2.1 分析基本元數據

基本元數據由多個文件組成,包括 bblayers.conf 文件(定義項目所需的 layers)、每個 layer 的 layer.conf 文件、以及 bitbake.conf 文件。數據內容有如下幾類:

  • Recipes:特定軟件包的詳情。
  • Class Data:通用構建信息的抽象總結。
  • Configuration Data:針對特定機器的設置,相當於粘合劑,把所有軟件集合到一起。

基本元數據都具有全局屬性,所有它們對所有的 recipes 都有效。

首先,BitBake 會先搜索當前工作目錄下的 conf/bblayers.conf 文件。該文件包含一個 BBLAYERS 變量,它會列出所有項目所需的 layer 的目錄。在 BBLAYERS 所列出的 layer 目錄中,都會有一個 conf/layer.conf 文件,在這個文件中會有一個 LAYERDIR 變量,它記錄了該 layer 的完整路徑。這些 layer.conf 文件會自動構建一些關鍵的變量,例如 BBPATH 和 BBFILES 。BBPATH 記錄了 conf 和 classes 目錄下的 configuration 和 classes 文件的位置,BBFILES 則用於定位 .bb 和 .bbappdend 文件。如果找不到 bblayers.conf 文件,BitBake 會認爲用戶已經在環境變量中設置了 BBPATH 和 BBFILES 。

其次,BitBake 會在 BBPATH 記錄的位置中尋找 conf/bitbake.conf 文件。該配置文件包含了

參考

BitBake User ManualYocto 實用筆記

linux下md5sum用法 (查看文件或字符串的md5值)

 

MD5算法常常被用來驗證網絡文件傳輸的完整性,防止文件被人篡改。MD5 全稱是報文摘要算法(Message-Digest Algorithm 5),此算法對任意長度的信息逐位進行計算,產生一個二進制長度爲128位(十六進制長度就是32位)的“指紋”(或稱“報文摘要”),不同的文件產生相同的報文摘要的可能性是非常非常之小的。

md5sum命令採用MD5報文摘要算法(128位)計算和檢查文件的校驗和。一般來說,安裝了Linux後,就會有md5sum這個工具,直接在命令行終端直接運行。

語法

1

# md5sum(選項)(參數)

選項

1

2

3

4

5

-b或--binary:  把輸入文件作爲二進制文件看待。

-t或--text:    把輸入的文件作爲文本文件看待(默認)。

-c或--check:   用來從文件中讀取md5信息檢查文件的一致性。(不細說了參見info)

--status:      這個選項和check一起使用,在check的時候,不輸出,而是根據返回值表示檢查結果。

-w或--warn:    在check的時候,檢查輸入的md5信息又沒有非法的行,如果有則輸出相應信息。

參數

1

文件:指定保存着文件名和校驗和的文本文件

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章