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

  1. if ! $(return >/dev/null 2>&1) ; then
  2. echo 'oe-buildenv-internal: error: this script must be sourced'
  3. echo ''
  4. echo 'Usage: . $OEROOT/scripts/oe-buildenv-internal &&'
  5. echo ''
  6. echo 'OpenEmbedded oe-buildenv-internal - an internal script that is'
  7. echo 'used in oe-init-build-env to initialize oe build environment'
  8. echo ''
  9. exit 2
  10. 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目录:

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

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

  1. if [ -z "$OE_SKIP_SDK_CHECK" ] && [ -n "$OECORE_SDK_VERSION" ]; then
  2. 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."
  3. return 1
  4. fi

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

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

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

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

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

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

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

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

  1. if [ -z "$BDIR" ]; then
  2. if [ -z "$1" ]; then
  3. BDIR="build"
  4. else
  5. BDIR="$1"
  6. if [ "$BDIR" = "/" ]; then
  7. echo >&2 "Error: / is not supported as a build directory."
  8. return 1
  9. fi
  10.  
  11. # Remove any possible trailing slashes. This is used to work around
  12. # buggy readlink in Ubuntu 10.04 that doesn't ignore trailing slashes
  13. # and hence "readlink -f new_dir_to_be_created/" returns empty.
  14. BDIR=$(echo $BDIR | sed -re 's|/+$||')
  15.  
  16. BDIR=$(readlink -f "$BDIR")
  17. if [ -z "$BDIR" ]; then
  18. PARENTDIR=$(dirname "$1")
  19. echo >&2 "Error: the directory $PARENTDIR does not exist?"
  20. return 1
  21. fi
  22. fi
  23. if [ -n "$2" ]; then
  24. BITBAKEDIR="$2"
  25. fi
  26. fi
  27. if [ "${BDIR#/}" != "$BDIR" ]; then
  28. BUILDDIR="$BDIR"
  29. else
  30. BUILDDIR="$(pwd)/$BDIR"
  31. fi
  32. unset BDIR
  33.  
  34. if [ -z "$BITBAKEDIR" ]; then
        BITBAKEDIR="$OEROOT/bitbake$BBEXTRA"
        test -d "$BITBAKEDIR" || BITBAKEDIR="$OEROOT/../bitbake$BBEXTRA"
    fi
  35.  
  36. BITBAKEDIR=$(readlink -f "$BITBAKEDIR")
    BUILDDIR=$(readlink -f "$BUILDDIR")
    BBPATH=$BUILDDIR
  37.  
  38. export BBPATH
  39.  
  40. 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环境变量:

  1. # Make sure our paths are at the beginning of $PATH
  2. for newpath in "$BITBAKEDIR/bin" "$OEROOT/scripts"; do
  3. # Remove any existences of $newpath from $PATH
  4. PATH=$(echo $PATH | sed -re "s#(^|:)$newpath(:|$)#\2#g;s#^:##")
  5.  
  6. # Add $newpath to $PATH
  7. PATH="$newpath:$PATH"
  8. done
  9. unset BITBAKEDIR newpath
  10.  
  11. # Used by the runqemu script
    export BUILDDIR
    export PATH
  12.  
  13. 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"
  14.  
  15. BB_ENV_EXTRAWHITE="$(echo $BB_ENV_EXTRAWHITE $BB_ENV_EXTRAWHITE_OE | tr ' ' '\n' | LC_ALL=C sort --unique | tr '\n' ' ')"
  16.  
  17. export BB_ENV_EXTRAWHITE

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

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

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

  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. 64位Windows的Dos中取消了edit命令

    前段时间在玩dos命令行的时候,用copy con创建了txt文件后想对其进行编辑,然后我又不想用记事本,所以去网上找命令行中对文本文件进行编辑的命令(纯属想装B),结果看到了edit命令. 一敲,就 ...

  2. 【12】python 栈型数据结构模拟、队列型数据结构模拟

    一.压栈操作模拟 #__author:"吉*佳" #date: 2018/10/21 0021 #function:栈 # 栈:即是先进后出的一种数据结构 # (1)模拟压栈操作 ...

  3. Post-installation steps for Chromium | Fedora

    Flash 插件安装 网址: https://fedora.pkgs.org/ 下载: chromium-pepper-flash-version.fc28.x86_64.rpm 安装后重启浏览器 解 ...

  4. jstl格式化日期

    <%@ page contentType="text/html" pageEncoding="GBK"%> <%@ page import=& ...

  5. angularjs ngRoute和ui.router对比

    ngRoute模块是angularjs自带的路由模块,ui.router是一个第三方路由模块,接下来将对两者进行一个对比: ng-router(angular-router.js) ng-view n ...

  6. 二、git版本回退

    查看历史版本提交记录 git log git log --pretty=oneline Git用 HEAD表示当前版本 commit id(版本号),也就是最新的提交e4aa53d...43ae6f6 ...

  7. node学习笔记_03 express框架

    express api地址:http://www.expressjs.com.cn/starter/static-files.html 一.安装依赖 npm i --save express npm ...

  8. python 爬取全量百度POI

    在网上找了很多关于爬取百度POI的文章,但是对“全量”的做法并没有得到最终的解决方案,自己写了一个,但还是不能实现全量POI抓取,能够达到至少50%的信息抓取.注意:这里所指“全量”是能够达到100% ...

  9. PAT B1030 完美数列 (25 分)

    给定一个正整数数列,和正整数 p,设这个数列中的最大值是 M,最小值是 m,如果 M≤mp,则称这个数列是完美数列. 现在给定参数 p 和一些正整数,请你从中选择尽可能多的数构成一个完美数列. 输入格 ...

  10. Tomcat主页404错误

    单独启动Tomcat正常,但是通过Eclipse启动(这时启动也是正常的)后,访问Tomcat主页报404错误. 在网上找到了解决办法:http://www.jb51.net/article/8283 ...