【Yocto】BitBake入门之HelloWorld

33 篇文章 153 订阅

基础示例

创建一个新的目录OE,从https://gitee.com/mirrors/poky.git获取BitBake工具,将得到的bitbake目录放在OE目录下,可以查看版本:

jw@X1C:~/code/OE$ ./bitbake/bin/bitbake --version
BitBake Build Tool Core version 1.49.0

通过目录来调用bitbake工具不是很方便,所以将该目录增加到PATH变量中,将命令写到一个脚本中(init.sh):

#!/bin/bash

# Set the bitbake bin path.
PWD=`pwd`
export PATH=$PWD/bitbake/bin:$PATH

之后执行source命令,这样执行bitbake的时候就不需要加上目录了:

jw@X1C:~/code/OE$ source init.sh 
jw@X1C:~/code/OE$ bitbake --version
BitBake Build Tool Core version 1.49.0

环境准备好之后,接下去使用一个HelloWorld的示例来执行BitBake配方,从而打印HelloWorld。

首先创建新的目录:

jw@X1C:~/code/OE$ mkdir hello
jw@X1C:~/code/OE$ cd hello

先不管其它,在这个目录下执行bitbake看看结果:

jw@X1C:~/code/OE/hello$ bitbake
ERROR: Unable to find conf/bblayers.conf or conf/bitbake.conf. BBPATH is unset and/or not in a build directory?

这里提示没有conf/bitbake.conf,我们需要在该目录下创建该文件,bitbake命令在执行的开头就会去读取这个文件,而BBPATH是这个文件所在的位置。所以我们还应该在init.sh中设置BBPATH变量,它的值就是前面创建的hello目录,所以init.sh变成如下的样子:

#!/bin/bash

# Set the bitbake bin path.
PWD=`pwd`
export PATH=$PWD/bitbake/bin:$PATH
export BBPATH=$PWD/hello

设置了BBPATH之后,还需要在hello目录下创建bitbake.conf,它在hello/conf目录中,内容如下:

PN = "${@bb.parse.BBHandler.vars_from_file(d.getVar('FILE', False),d)[0] or 'defaultpkgname'}"

TMPDIR = "${TOPDIR}/tmp"
CACHE = "${TMPDIR}/cache"
STAMP = "${TMPDIR}/${PN}/stamps"
T = "${TMPDIR}/${PN}/work"
B = "${TMPDIR}/${PN}"

现在hello目录下的内容如下:

jw@X1C:~/code/OE/hello$ tree
.
└── conf
    └── bitbake.conf

1 directory, 1 file

之后再执行bitbake命令:

jw@X1C:~/code/OE/hello$ bitbake
ERROR: ParseError in configuration INHERITs: Could not inherit file classes/base.bbclass

可以看到错误发生了变化,这次缺少的是base.bbclass文件,BitBake使用class文件来提供基本的代码和功能,最基础的就是base.bbclass文件,这里在hello目录下创建classes目录,并在其中增加base.bbclass文件,内容如下:

addtask build

之后再执行bitbake命令,得到的结果如下:

jw@X1C:~/code/OE/hello$ bitbake
Nothing to do.  Use 'bitbake world' to build everything, or run 'bitbake --help' for usage information.

这个时候bitbake本身已经正常工作了,只是因为没有可以做的事情,所以什么也没有发生。

之后要做的是增加Layer和HelloWorld配方,当然这里我们需要的是配方,之所以还要创建Layer,只是因为这是符合Yocto要求的一种做法。

这里在OE下创建Layer,名字是meta-mylayer,然后在里面创建conf目录,并在目录中增加layer.conf,内容如下:

BBPATH .= ":${LAYERDIR}"
BBFILES += "${LAYERDIR}/*.bb"
BBFILE_COLLECTIONS += "meta-mylayer"
BBFILE_PATTERN_meta-mylayer := "^${LAYERDIR_RE}/"

以上内容是给Layer准备的,之后才是配方,名称是printhello.bb:

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

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

之后再进入到hello目录,执行bitbake命令:

jw@X1C:~/code/OE/hello$ bitbake printhello
ERROR: no recipe files to build, check your BBPATH and BBFILES?
Loading cache: 100% |                                           | ETA:  --:--:--
Loaded 0 entries from dependency cache.

Summary: There was 1 ERROR message shown, returning a non-zero exit code.

这里的bitbake之后增加了配方的名称,但是该配方并没有执行,这需要将配方对应的Layer添加到全局配置文件hello/conf/bblayers.conf中,它的内容如下:

BBLAYERS ?= " \
	/home/jw/code/OE/meta-mylayer \
"

注意这里需要使用全局的路径。

之后再执行bitbake printhello,结果如下:

jw@X1C:~/code/OE/hello$ bitbake printhello
WARNING: Layer meta-mylayer should set LAYERSERIES_COMPAT_meta-mylayer in its conf/layer.conf file to list the core layer names it is compatible with.
Loading cache: 100% |############################################| Time: 0:00:00
Loaded 1 entries from dependency cache.
NOTE: Resolving any missing task queue dependencies
Initialising tasks: 100% |#######################################| Time: 0:00:00
NOTE: No setscene tasks
NOTE: Executing Tasks
********************
*                  *
* Hello, World!    *
*                  *
********************
NOTE: Tasks Summary: Attempted 1 tasks of which 0 didn't need to be rerun and all succeeded.

Summary: There was 1 WARNING message shown.

bitbake执行成功。

  • 2
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值