一步步写bitbake简单的helloworld expamle(2)

这次不按照bitbake的介绍。而是自己一步步来慢慢设置,来解决中途遇到的问题


新建一个env.sh用于初始化环境。

开始内容如下,一步步添加。并且通过source env.sh运行


初始的时候创建一个工作目录helloworld。如果没有的话

#!/bin/sh

if ! [ -d helloworld ];then

  mkdir helloworld

fi


1需要能够执行bitbake命令

#!/bin/sh
if ! [ -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目录等等的解释后面再说



   









评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值