调用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指令了。