bitbake 使用的資料(metadata) 可以分為三種類型:
- configuration : .conf
Global 放的設定 - classes : .bbclass
給recipes include 用的,避免一堆 recipes 要重複寫一堆code - recipes: .bb,bbappend
bitbake 看這個決定動作
bitbake parsing 的順序:
先到目前目錄 (build) 下,找 bblayares.conf,裡面的 BBLAYERS 變數會指出需要parse 的 其他 layer 目路。
BBLAYERS 有次序之分,所以要先被parse 的要放在前面。
bitbake 到 BBLAYERS 指定的每個 layer 去,先找看看有沒有 meta/conf/bitbake.conf
並且follow include 命令去 include 其他 file
麻煩的recipes 相依
recipes 中可以用 DEPENDS 和 PROVIDES 兩個變數來說明這個recipes 需要的東西。
DEPENDS 和 PROVIDES 有點問題。
foo_1.0.bb 有 DEPENDS += bar
那磨:
- bar_version.bb
- XOXO.bb 中有: PRIVIDES = bar
所以,有可能很多 recipes 都有 PROVIDES = bar,所foo_1.0.bb 有很多package 可以選。
這就要用 PREFERRED_PROVIDER_name = XOXO 來指定foo_1.0.bb 真的想用那一個。
fetch -- download files
bitbake 執行 do_fetch 時,會去看 recipes 中的 SRC_URI 變數。
其中,可以用 ${PV} 代表版本號。
bitbake 會去下載source 到 DL_DIR 這格目錄。
同時檢查md5dum, sha256sum 和 bb 中數值一部一樣。
檢查正確,就會在 DL_DIR 中另外create 一個 XXOO.filename.done ,
do_fetch 和 git
SRC_URI 是 git://uri...的話,bitbake 就會clone source 到 DL_DIR/git2/-git url- 下。
Bitbake 的 tasks
用 bitbake recipes-name -c listtasks
可以列出該 recipes 所有的 task
root filesystem 製作
每個 recipes 與 rootfs 相干的部份會由 do_rootfs 這格 subtask 來完成。
IMAGE_INSTALL 和 IMAGE_FEATURES 包函了會加入rootfs 的 packages。
之後, PACKAGE_EXCLUDE 包含不要放入 rootfs 的 package 列表。
bitbake 把 IMAGE_INSTALL/FEATURES 統整後,再比對,挑出要放進去的 package。
但是如果有相依性的需求,即使被劣在 EXCLUDE 中,也一樣會被放進 rootfs。
build 目錄的內容
fetch 的時候,download source 到 DL_DIR。
解開/clone source 到 tmp/wocdrk,有需要 patch 的也patch 好。
然後在 tmp/work 下做 configure,build。
build 完,有要做make install 之類動作的,就會放到各自 tmp/work/..../image 下。
之後,把其他package 需要的header file,share library 都放到tmp/sysroot,讓其他 package build 的匙時候使用。
work 目錄
沒有留言:
張貼留言