1 首先,脚本先对运行方式进行了检测:

if ! $(return >/dev/null 2>&1) ; then
echo 'oe-buildenv-internal: error: this script must be sourced'
echo ''
echo 'Usage: . $OEROOT/scripts/oe-buildenv-internal &&'
echo ''
echo 'OpenEmbedded oe-buildenv-internal - an internal script that is'
echo 'used in oe-init-build-env to initialize oe build environment'
echo ''
exit 2
fi

这个目的,就是强制OEROOT/scripts/oe-buildenv-internal以“. $OEROOT/scripts/oe-buildenv-internal”的方式运行,避免以直接执行$OEROOT/scripts/oe-buildenv-internal的方式运行,也就是希望脚本执行过程中对于环境的一些改变能够在当前shell保存下来。

2 接下来需要检测OEROOT环境变量,从本系列分享的第一章,可以得知,OEROOT即为poky-sumo-19.0.0目录:

if [ -z "$OEROOT" ]; then
echo >&2 "Error: OEROOT is not defined!"
return 1
fi

3 检测当前shell是否已经包含OE SDK/ADT环境变量:

if [ -z "$OE_SKIP_SDK_CHECK" ] && [ -n "$OECORE_SDK_VERSION" ]; then
echo >&2 "Error: The OE SDK/ADT was detected as already being present in this shell environment. Please use a clean shell when sourcing this environment script."
return 1
fi

在缺省情况下,OE_SKIP_SDK_CHECK为空,OECORE_SDK_VERSION为空,在这里条件是不满足的,脚本将继续后面的动作。

4 检测python2版本是否为2.7以上,但不能是3.x:

py_v2_check=$(/usr/bin/env python --version 2>&1 | grep "Python 3")
if [ -n "$py_v2_check" ]; then
echo >&2 "OpenEmbedded requires 'python' to be python v2 (>= 2.7.3), not python v3."
echo >&2 "Please set up python v2 as your default 'python' interpreter."
return 1
fi
unset py_v2_check

5 继续检测python2版本,必须是2.7.3以上,这次是在语言级别上检测:

y_v27_check=$(python -c 'import sys; print sys.version_info >= (2,7,3)')
if [ "$py_v27_check" != "True" ]; then
echo >&2 "OpenEmbedded requires 'python' to be python v2 (>= 2.7.3), not python v3."
echo >&2 "Please upgrade your python v2."
fi
unset py_v27_check

6 继续检测python3版本,bitbake需要python3.4以上版本:

py_v34_check=$(python3 -c 'import sys; print(sys.version_info >= (3,4,0))')
if [ "$py_v34_check" != "True" ]; then
echo >&2 "BitBake requires Python 3.4.0 or later as 'python3'"
return 1
fi
unset py_v34_check

7 设置BUILDDIR以及BITBAKEDIR,参数1为空时BUILDDIR为“build”,否则BUILDDIR为参数1,参数2不为空时,BITBAKEDIR设置为参数2,参数2为空时BITBAKE指向"$OEROOT/bitbake$BBEXTRA"或者"$OEROOT/../bitbake$BBEXTRA":

if [ -z "$BDIR" ]; then
if [ -z "$1" ]; then
BDIR="build"
else
BDIR="$1"
if [ "$BDIR" = "/" ]; then
echo >&2 "Error: / is not supported as a build directory."
return 1
fi # Remove any possible trailing slashes. This is used to work around
# buggy readlink in Ubuntu 10.04 that doesn't ignore trailing slashes
# and hence "readlink -f new_dir_to_be_created/" returns empty.
BDIR=$(echo $BDIR | sed -re 's|/+$||') BDIR=$(readlink -f "$BDIR")
if [ -z "$BDIR" ]; then
PARENTDIR=$(dirname "$1")
echo >&2 "Error: the directory $PARENTDIR does not exist?"
return 1
fi
fi
if [ -n "$2" ]; then
BITBAKEDIR="$2"
fi
fi
if [ "${BDIR#/}" != "$BDIR" ]; then
BUILDDIR="$BDIR"
else
BUILDDIR="$(pwd)/$BDIR"
fi
unset BDIR if [ -z "$BITBAKEDIR" ]; then
    BITBAKEDIR="$OEROOT/bitbake$BBEXTRA"
    test -d "$BITBAKEDIR" || BITBAKEDIR="$OEROOT/../bitbake$BBEXTRA"
fi BITBAKEDIR=$(readlink -f "$BITBAKEDIR")
BUILDDIR=$(readlink -f "$BUILDDIR")
BBPATH=$BUILDDIR export BBPATH if [ ! -d "$BITBAKEDIR" ]; then
    echo >&2 "Error: The bitbake directory ($BITBAKEDIR) does not exist!  Please ensure a copy of bitbake exists at this location or specify an alternative path on the command line"
    return 1
fi

8 设置PATH,BB_ENV_EXTRAWHITE环境变量:

# Make sure our paths are at the beginning of $PATH
for newpath in "$BITBAKEDIR/bin" "$OEROOT/scripts"; do
# Remove any existences of $newpath from $PATH
PATH=$(echo $PATH | sed -re "s#(^|:)$newpath(:|$)#\2#g;s#^:##") # Add $newpath to $PATH
PATH="$newpath:$PATH"
done
unset BITBAKEDIR newpath # Used by the runqemu script
export BUILDDIR
export PATH BB_ENV_EXTRAWHITE_OE="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 BBPATH_EXTRA BB_SETSCENE_ENFORCE" BB_ENV_EXTRAWHITE="$(echo $BB_ENV_EXTRAWHITE $BB_ENV_EXTRAWHITE_OE | tr ' ' '\n' | LC_ALL=C sort --unique | tr '\n' ' ')" export BB_ENV_EXTRAWHITE

那么参照本系列分享第一章中对该脚本的调用:

export OEROOT
. $OEROOT/scripts/oe-buildenv-internal &&
TEMPLATECONF="$TEMPLATECONF" $OEROOT/scripts/oe-setup-builddir || {
unset OEROOT
return 1
}

脚本最后的几个重要环境变量变更为:

  BUILDDIR: poky-sumo-19.0.0/build-arm64

  BITBAKEDIR:

  PATH:poky-sumo-19.0.0/scripts:poky-sumo-19.0.0/bitbake/bin:/home/totem/bin:/home/totem/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin

其中$1为build-arm64,为第一章中". oe-init-build-env build-arm64"中的$1,因为$2为空,另外两个目录亦不存在,故BITBAKEDIR为空。

yocto-sumo源码解析(二): oe-buildenv-internal的更多相关文章

  1. Mybatis源码解析(二) —— 加载 Configuration

    Mybatis源码解析(二) -- 加载 Configuration    正如上文所看到的 Configuration 对象保存了所有Mybatis的配置信息,也就是说mybatis-config. ...

  2. RxJava2源码解析(二)

    title: RxJava2源码解析(二) categories: 源码解析 tags: 源码解析 rxJava2 前言 本篇主要解析RxJava的线程切换的原理实现 subscribeOn 首先, ...

  3. Sentinel源码解析二(Slot总览)

    写在前面 本文继续来分析Sentinel的源码,上篇文章对Sentinel的调用过程做了深入分析,主要涉及到了两个概念:插槽链和Node节点.那么接下来我们就根据插槽链的调用关系来依次分析每个插槽(s ...

  4. iOS即时通讯之CocoaAsyncSocket源码解析二

    原文 前言 本文承接上文:iOS即时通讯之CocoaAsyncSocket源码解析一 上文我们提到了GCDAsyncSocket的初始化,以及最终connect之前的准备工作,包括一些错误检查:本机地 ...

  5. jQuery 源码解析二:jQuery.fn.extend=jQuery.extend 方法探究

    终于动笔开始 jQuery 源码解析第二篇,写文章还真是有难度,要把自已懂的表述清楚,要让别人听懂真的不是一见易事. 在 jQuery 源码解析一:jQuery 类库整体架构设计解析 一文,大致描述了 ...

  6. Common.Logging源码解析二

    Common.Logging源码解析一分析了LogManager主入口的整个逻辑,其中第二步生成日志实例工厂类接口分析的很模糊,本随笔将会详细讲解整个日志实例工厂类接口的生成过程! (1).关于如何生 ...

  7. erlang下lists模块sort(排序)方法源码解析(二)

    上接erlang下lists模块sort(排序)方法源码解析(一),到目前为止,list列表已经被分割成N个列表,而且每个列表的元素是有序的(从大到小) 下面我们重点来看看mergel和rmergel ...

  8. element-ui 源码解析 二

    Carousel 走马灯源码解析 1. 基本原理:页面切换 页面切换使用的是 transform 2D 转换和 transition 过渡 可以看出是采用内联样式来实现的 举个栗子 <div : ...

  9. ArrayList源码解析(二)

    欢迎转载,转载烦请注明出处,谢谢. https://www.cnblogs.com/sx-wuyj/p/11177257.html 自己学习ArrayList源码的一些心得记录. 继续上一篇,Arra ...

  10. React的Component,PureComponent源码解析(二)

    1.什么是Component,PureComponent? 都是class方式定义的基类,两者没有什么大的区别,只是PureComponent内部使用shouldComponentUpdate(nex ...

随机推荐

  1. EF5.0中的跨数据库操作

    以前在用MVC + EF 的项目中,都是一个数据库,一个DbContext,因此一直没有考虑过在MVC+EF的环境下对于多个数据库的操作问题.等到要使用时,才发现这个问题也不小(关键是有个坑).直接说 ...

  2. XSS详解

    什么是XSS(跨站脚本攻击) XSS又叫CSS (Cross Site Script) ,跨站脚本攻击.它指的是恶意攻击者往Web页面里插入恶意html代码或者javascript代码,当用户浏览该页 ...

  3. JavaScript定时器的工作原理(翻译)

    JavaScript定时器的工作原理(翻译) 标签(空格分隔): JavaScript定时器 最近在看ajax原理的时候,看到了一篇国外的文章,讲解了JavaScript定时器的工作原理,帮助我很好的 ...

  4. MetaMask/json-rpc-engine

    https://github.com/MetaMask/json-rpc-engine RpcEngine——MetaMask/json-rpc-engine https://github.com/M ...

  5. spring引入properties变量报错

    通过properties配置文件配置数据源,代码如下: <bean class="org.springframework.beans.factory.config.PropertyPl ...

  6. Python2.7-hmac

    hmac 模块,基于密钥的哈希算法 1.模块对象 1.1 HMAC 对象 1.1.1 初始化构建类:需要通过模块方法 hmac.new(key[, msg[, digestmod]]) 创建一个新对象 ...

  7. 解决IDEA因分配内存而引起的卡顿

    解决IDEA分配内存不足引起卡顿的问题 在使用IDEA的过程中,经常会运行一段时间后程序卡顿.一段代码可能要敲很久或者出现死机状态,严重影响代码书写速度.经查阅资料,IDEA的自动分配内存最大只有75 ...

  8. 使用git初始化本地仓库并提交到远程分支

    创建本地文件并提交到github远程分支,步骤如下: 1.通过github创建repository,本例中repository名称为maven_demo,工程为maven + spring + myb ...

  9. 3-(基础入门篇)稍微了解一下(需要知道的关于Lua的一些基本的知识)

      http://www.cnblogs.com/yangfengwu/p/8948935.html 基础教程源码链接如果失效,请在淘宝介绍中下载,由于链接很容易失效,如果失效请联系卖家,谢谢 htt ...

  10. jqgrid 配置行号及行号的宽度

    有时,我们想把jqgrid的行号按指定的宽度显示出来,如何实现? 通过 rownumbers:true  设置启用行号 通过 rownumWidth 配置行号列的宽度 $("#jqGrid& ...