yocto recipe : (4) recipe's task 撰寫

Recipe's Task

recipe 包含許多 tasks, 以下紀錄關於 recipe 的 task 撰寫

1. 列出 recipe 的 tasks

yijyun@wd-disk: build$ bitbake libunistring -c listtasks

2. function types of tasks

根據[1] 的 3.6.1 Promoting a Function to a Task. 能成為 task 的 function 只有兩種類型. 此外需要以 "do_" 為開頭

  1. shell function
  2. do_shell_msg () {
        bbwarn 'hello'
    }
    

  3. BitBake-style Python functions
  4. python do_py_msg () {
        import time
        bb.warn( "hello %s" % ( time.strftime('%Y%m%d', time.gmtime())))
    }
    

3. 新增/刪除/插入 task

新增

以 addtask 加入 new task, 可以搭配 before 與 after 決定順序

# syntax
addtask task [before task] [after task]
# e.g. 
addtask do_msg before do_configure after do_fetch

插入

以現有 task function 名稱. 尾部使用 append or prepend 即可

do_msg_prepend () {
    bbwarn 'before'
}
do_msg_append () {
    bbwarn 'before'
}
do_msg () {
    bbwarn 'kkk'
}
addtask do_msg

刪除

deltask 特定 task 即可. 切記使用此方式會把此任務相依的 task 一併刪除. 如果要忽略某個 task, 請使用 do_task_name[noexec] = "1"

deltask do_configure

範例

使用 deltask do_configure 後, task 的執行順序

# error with deltask do_configure
do_populate_lic (29798): log.do_populate_lic.29798
do_compile (29797): log.do_compile.29797

# normal
do_prepare_recipe_sysroot (29992): log.do_prepare_recipe_sysroot.29992
do_populate_lic (29993): log.do_populate_lic.29993
do_configure (30004): log.do_configure.30004
do_compile (6522): log.do_compile.6522
do_install (26823): log.do_install.26823
...
do_package_write_rpm (27184): log.do_package_write_rpm.27184

4. Variable Flags

[1] 的 3.7. Variable Flags 章節. Variable Flags 可用於控制 task 的 functionality 與 dependencies

範例

列出一些 variable Flags

# disable a task
do_msg[noexec] = "1"
# lock files while executing
do_rootfs[lockfiles] += "${WORKDIR}/ipk.lock"
# empty folders before running
do_unpack[cleandirs] += " ${S} ${STAGING_KERNEL_DIR} ${B}"
#  Controls inter-task dependencies
do_rootfs[depends] += "mklibs-native:do_populate_sysroot"

Reference

  1. Bitbake User Manual

留言

這個網誌中的熱門文章

yocto recipe : (1) 撰寫 recipe

yocto recipe : (2) 撰寫 bbappend

yocto recipe : (3) 使用 External Source 來編譯軟體