设为首页 加入收藏

TOP

BitBake使用攻略--BitBake的语法知识二(三)
2023-07-23 13:39:00 】 浏览:77
Tags:BitBake --BitBake
性。对于该属性,其指定了一个任务依赖的任务列表,这些依赖任务不同于[deptask]或者[rdeptask],它需要在依赖任务前指定任务所属的目标,格式如下:

do_a = "target1:do_b target2:do_b"

在这个例子中,执行任务a之前必须要先执行target1的任务b和target2的任务b。你可以尝试下面的例子:

printhello.bb:

DESCRIPTION = "Prints Hello World"
PN = 'printhello'
PV = '1'

python do_configure() {
    bb.plain("************************");
    bb.plain("*                      *");
    bb.plain("* Pre Configure self ! *");
    bb.plain("*                      *");
    bb.plain("************************");
}
do_configure[nostamp] = "1"
addtask do_configure

do_build[depends] = "printhello:do_configure printbeef:do_configure printbird:do_configure"

python do_build() {
    bb.plain("********************");
    bb.plain("*                  *");
    bb.plain("*  Hello, World!   *");
    bb.plain("*                  *");
    bb.plain("********************");
}

printbird.bb

DESCRIPTION = "Prints Bird Info"
PN = 'printbird'
PV = '1'

python do_configure() {
    bb.plain("************************");
    bb.plain("*                      *");
    bb.plain("* Pre Configure bird ! *");
    bb.plain("*                      *");
    bb.plain("************************");
}

do_configure[nostamp] = "1"
addtask do_configure

printbeef.bb:

DESCRIPTION = "Prints Beef Info"
PN = 'printbeef'
PV = '1'

python do_configure() {
    bb.plain("************************");
    bb.plain("*                      *");
    bb.plain("* Pre Configure Beef ! *");
    bb.plain("*                      *");
    bb.plain("************************");
}

do_configure[nostamp] = "1"
addtask do_configure

运行结果如下:

************************
*                      *
* Pre Configure bird ! *
*                      *
************************
************************
*                      *
* Pre Configure Beef ! *
*                      *
************************
************************
*                      *
* Pre Configure self ! *
*                      *
************************
********************
*                  *
*  Hello, World!   *
*                  *
********************

可见,通过这种方法,我们可以实现前面2.1.1,2.1.2,2.1.3提到的所有依赖定义方法。

2.2 事件

BitBake提供了事件处理函数机制用于在一些特定场景下执行某个指定函数,例如在某个任务失败后触发事件处理函数,然后发送邮件,另外,事件只能定义在菜谱文件或者类文件中,下面是一个事件的例子,在printhello.bb文件中添加如下内容:

addhandler myclass_eventhandler
python myclass_eventhandler() {
    from bb.event import getName
    bb.plain("The name of the Event is %s" % getName(e))
    bb.plain("The file we run for is %s" % d.getVar('FILE'))
}
myclass_eventhandler[eventmask] = "bb.event.RecipeParsed"

在这个例子中,我们使用addhandler将一个python函数定义为事件处理函数,然后通过[eventmask]属性指定了哪些事件可以触发该函数(若不指定,任何事件都将触发该函数),例子中指定了在解析完菜谱后触发myclass_eventhandler函数。另外在这个例子中,e是一个全局变量,指代的是当前发生的事件,通过getName函数我们可以得到该事件的名称。
下面列出了在标准构建过程中,最经常使用的一些事件:

  • bb.event.ConfigParsed(): 基本配置(bitbake.conf,base.bbclass以及继承的其他全局变量)解析后触发。通过在该事件中设置BB_INVALIDCONF可以重解析基本配置。
  • bb.event.HeartbeatEvent(): 定时触发,默认一秒,可以通过配置BB_HEARTBEAT_EVENT配置触发间隔。
  • bb.event.ParseStarted(): 开始解析菜谱时触发,事件有total属性表示计划解析菜谱的数量。
  • bb.event.ParseProgress(): 解析菜谱触发,事件有current属性表示已经解析菜谱的数量。
  • bb.event.ParseCompleted(): 解析菜谱完成时触发,事件有cached, parsed, skipped, virtuals, masked, errors属性,可以用来统计解析情况。
  • bb.event.BuildStarted(): 一个新的构建开始时触发。
  • bb.build.TaskStarted(): 一个任务开始时触发。taskfile属性表示任务是哪个配方发起的,taskname表示任务名,logfile表示任务的输出路径,time表示
首页 上一页 1 2 3 4 下一页 尾页 3/4/4
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇Linux的文件权限管理 下一篇Shell命令-常用操作2

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目