yocto的初始化脚本解释

调用source oe-init-build-env 的执行流程

没有指定目录参数 所有的操作将在build目录中执行。

如果指定了目录参数。比如source oe-init-build-env pi_build 那么所有的操作将在pi_build执行

我用的yocto版本是 commit 347347ad78c4c2502e83f2c2adff61f1ba8fed8b


oe-init-build-env 

设置OEROOT目录

由于我们是source xxx 所以$BASH_SOURCE就是当前脚本的名字‘oe-init-build-env ’

OEROOT就是脚本当前目录

if [ -n "$BASH_SOURCE" ]; then
   OEROOT="`dirname $BASH_SOURCE`"
elif [ -n "$ZSH_NAME" ]; then
   OEROOT="`dirname $0`"
else
   OEROOT="`pwd`"
fi

如果设置了BBSERVER变量。先取消
if [ -n "$BBSERVER" ]; then
   unset BBSERVER
fi



THIS_SCRIPT=$OEROOT/oe-init-build-env
结果THIS_SCRIPT=./oe-init-build-env



if [ -z "$ZSH_NAME" ] && [ "$0" = "$THIS_SCRIPT" ]; then
   echo "Error: This script needs to be sourced. Please run as '. $THIS_SCRIPT'"
   exit 1
fi


OEROOT=`readlink -f "$OEROOT"`

OEROOT=全路径/home/username/yocto/poky/oe-init-build-env


export OEROOT

导出OEROOT 需要导出是因为后面的脚本都是 ./执行的。不是source的


先开始执行scripts里面的oe-buildenv-internal

再执行oe-setup-builddir

然后进入$BUILDDIR指定的目录。如果没有带参数就是build。如果有就是参数名


. $OEROOT/scripts/oe-buildenv-internal && \
     $OEROOT/scripts/oe-setup-builddir && \
     [ -n "$BUILDDIR" ] && cd "$BUILDDIR"



unset OEROOT
unset BBPATH
unset THIS_SCRIPT
取消这些目录设置


# Shutdown any bitbake server if the BBSERVER variable is not set
if [ -z "$BBSERVER" ] && [ -f bitbake.lock ] ; then

    grep ":" bitbake.lock > /dev/null && BBSERVER=`cat bitbake.lock` bitbake --status-only
    if [ $? = 0 ] ; then
echo "Shutting down bitbake memory resident server with bitbake -m"
BBSERVER=`cat bitbake.lock` bitbake -m
    fi
fi


主要就是执行了

先执行了

scripts/oe-buildenv-internal

再执行了

scripts/oe-setup-builddir



scripts/oe-buildenv-internal

先执行了一系列的环境检查

OEROOT 以及python的版本大于2.6小于3.X


根据是否有dir参数设置 

BUILDDIR=/home/username/yocto/poky/pi_qt

设置

BITBAKEDIR=/home/username/yocto/poky/bitbake

将bitbake的脚本路径和bin路径添加到path变量当中。方便直接使用这些bin和脚本


# 导出一些runqemu 需要的变量
export BUILDDIR
export PATH
export BB_ENV_EXTRAWHITE="MACHINE DISTRO TCMODE TCLIBC HTTP_PROXY http_proxy \
HTTPS_PROXY https_proxy FTP_PROXY ftp_proxy FTPS_PROXY ftps_proxy ALL_PROXY \
all_proxy NO_PROXY no_proxy SSH_AGENT_PID SSH_AUTH_SOCK BB_SRCREV_POLICY \
SDKMACHINE BB_NUMBER_THREADS BB_NO_NETWORK PARALLEL_MAKE GIT_PROXY_COMMAND \
SOCKS5_PASSWD SOCKS5_USER SCREENDIR STAMPS_DIR"



oe-setup-builddir

检查各种变量。

创建 目录

mkdir -p "$BUILDDIR/conf"

测试这个目录是否可读写

是否可以chmod

chmod -st "$BUILDDIR" 2>/dev/null || echo "WARNING: unable to chmod $BUILDDIR"

如果chmod返回0 那么后面的echo不会执行。如果返回非0 表示chmod执行失败了。那么会继续执行||后面的echo

如果BUILDDIR/conf目录下不存在templateconf.cfg

那么执行 OEROOT/.tmplateconf。这个脚本很简单。

TEMPLATECONF=${TEMPLATECONF:-meta-yocto/conf}

结果是TEMPLATECONF=meta-yocto/conf


然后将meta-yocto/conf写入到BUILDDIR/conf/templateconf.cfg文本中

查看BUILDDIR/conf下面有没有bblayer.conf以及local.conf.sample

如果没有。从meta-yocto/conf/下面拷贝

bblayers.conf.sample

local.conf.sample

到BUILDDIR/conf/ 并重命名为

bblayers.conf

local.conf

并且将

bblayers.conf里的OEROOT路径变成绝对路径

本来是

BBLAYERS ?= " \
  ##OEROOT##/meta \
  ##OEROOT##/meta-yocto \
  ##OEROOT##/meta-yocto-bsp \
  "
BBLAYERS_NON_REMOVABLE ?= " \
  ##OEROOT##/meta \
  ##OEROOT##/meta-yocto \
  "

替换OEROOT为/home/username/yocto/poky






其实主要就是设置环境变量

主要是

设置BUILDDIR

BUILDDIR=/home/username/yocto/poky/build_xxx

build_xxx要么是build 要么是你自己传入的目录变量


把这两个bin环境设置到path里面

/home/username/yocto/poky/scripts

/home/username/yocto/poky/bitbake/bin


接着创建BUILDDIR以及 BUILDDIR/conf目录

创建一个template.conf文件。里面写入meta-yocto/conf

从meta-yocto/conf/下面拷贝

bblayers.conf.sample

local.conf.sample

到BUILDDIR/conf/ 并重命名为

bblayers.conf

local.conf

修改bblayers.conf

里面的OEROOT变成绝对路径

/home/username/yocto/poky/


最后进入

BUILDDIR

其他的变量后面都陆陆续续unset取消了只有BUILDDIR还存在


接下来你就可以执行bitbake指令了。




你可能感兴趣的:(yocto)