YoctoBitBake入门之HelloWorld

Posted jiangwei0512

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了YoctoBitBake入门之HelloWorld相关的知识,希望对你有一定的参考价值。

基础示例

创建一个新的目录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执行成功。

以上是关于YoctoBitBake入门之HelloWorld的主要内容,如果未能解决你的问题,请参考以下文章

Vue入门之HelloWorld

Thrift 入门之helloWorld

01.Nodejs入门之Helloworld

Vue入门之HelloWorld

Servlet入门之HelloWorld

RabbitMQ安装以及java连接RabbitMQ之HelloWorld入门