这次不按照bitbake的介绍。而是自己一步步来慢慢设置,来解决中途遇到的问题
新建一个env.sh用于初始化环境。
开始内容如下,一步步添加。并且通过source env.sh运行
初始的时候创建一个工作目录helloworld。如果没有的话
#!/bin/sh
if ! [ -d helloworld ];then
mkdir helloworld
fi
1需要能够执行bitbake命令
#!/bin/shif ! [ -d helloworld ];then
mkdir helloworld
fi
export PATH=$PATH:/home/xxxx/yocto/poky/bitbake/bin
运行bitbake提示
The BBPATH variable is not set and bitbake did not find a conf/bblayers.conf xxxxxx
没有找到BBPATH 变量
2添加BBPATH变量.将工作目录设置为helloworld同时进入这个工作目录
cd helloworld
export BBPATH=$(pwd)
也可以定义一个WDIR =xxxx
最后脚本如下
#!/bin/sh
export WDIR=helloworld
if ! [ -d $WDIR ];then
mkdir $WDIR
fi
export PATH=$PATH:/home/xxxx/yocto/poky/bitbake/bin
cd $WDIR
export BBPATH=$(pwd)
后续的操作都不写在脚本里面
运行bitbake 提示
file conf/bitbake.conf not found in /home/xxxx/yocto/poky/helloworld
4在helloworld目录中新建一个conf目录。并且添加一个bitbake.conf文件
提示Unable to parse /lib/bb/parse/parse_py/ConfHandler.py classes/base.bbclass
这是由于所有的菜谱都自动集成一个叫做base.bbclass的类文件。这个base.bbclass定义了一系列的基础编译流程。do_fetch do_unpack .....do_build
5在helloworld目录中新建一个classes目录。新建一个base.bbclass文件
运行提示
ERROR: Please set the 'PERSISTENT_DIR' or 'CACHE' variable
希望设置缓存变量。这个变量是在bitbake.conf里面设置的。记得带引号
TMPDIR="${TOPDIR}/tmp"CACHE ="${TMPDIR}/cache"
运行bitbake提示
Nothing to do. Use 'bitbake world' to build everything, or run 'bitbake --help' for usage information.
到此说明基础的变量配置已经完成了。helloworld目录结构如下(bitbake/bin的目录没有包含在这里,)
----helloworld
----classes
----base.bbclass
----conf
----bitbake.conf
6运行bitbake helloworld 默认是执行do_build任务
提示
ERROR: no recipe files to build, check your BBPATH and BBFILES?
原因是根本没有bb菜谱文件。bitbake怎么会知道helloworld该如何编译呢?
我们同样在bitbake.conf里面设置一个变量BBFILES
BBFILES="${TOPDIR}/*.bb"
意思就是解析所有helloworld目录中的后缀为bb的文件
7再次运行 bitbake helloworld
提示ERROR: Nothing PROVIDES 'helloworld'
因为目录下没有任何bb文件
所以我们新建一个helloworld.bb
8再次运行 bitbake helloworld
提示
for task in tasks
TypeError: 'NoneType' object is not iterable
没有任何任务
所以我们要在bb文件里面定义默认的do_build任务
DESCRIPTION = "Prints Hello World"
PN = 'helloworld'
PV = '1'
python do_build() {
bb.plain("********************");
bb.plain("* *");
bb.plain("* Hello, World recpie");
bb.plain("* *");
bb.plain("********************");
}
addtask do_build
一个bb文件要么为空。否则必须有DESCRIPTION描述。否则解析错误
PN = 'helloworld' 是package name
PV = '1' package version
python do_build()是调用python执行do_build任务。任务就是打印
8再次运行提示If the stamp is missing, it's not currentxxx
我们没有设置STAMP目录。这个是在bitbake.conf文件中设置
STAMP ="${TMPDIR}/stamps"
9再次运行提示"T variable not set
我们没有设置T目录。这个是在bitbake.conf文件中设置
T="${TMPDIR}/work"
10再次运行提示i = p.rfind('/') + 1
AttributeError: 'NoneType' object has no attribute 'rfind'
这个是没有设置B目录 同样是bitbake.conf
B="${TMPDIR}"
再次运行 完美执行
********************
* *
* Hello, World recpie
* *
********************
后续B目录以及T目录等等的解释后面再说