2017/10/11

reading notes on ..embedded linux with yocto project

Bitbake 源自於 Gentoo 的 portage 系統,雖然現在已經完全分開了。

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
以上都會被 foo_1.0.bb 列為依賴的 recipes

所以,有可能很多 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 目錄

沒有留言:

張貼留言