yocto-sumo源码解析(二): oe-buildenv-internal
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的更多相关文章
- Mybatis源码解析(二) —— 加载 Configuration
Mybatis源码解析(二) -- 加载 Configuration 正如上文所看到的 Configuration 对象保存了所有Mybatis的配置信息,也就是说mybatis-config. ...
- RxJava2源码解析(二)
title: RxJava2源码解析(二) categories: 源码解析 tags: 源码解析 rxJava2 前言 本篇主要解析RxJava的线程切换的原理实现 subscribeOn 首先, ...
- Sentinel源码解析二(Slot总览)
写在前面 本文继续来分析Sentinel的源码,上篇文章对Sentinel的调用过程做了深入分析,主要涉及到了两个概念:插槽链和Node节点.那么接下来我们就根据插槽链的调用关系来依次分析每个插槽(s ...
- iOS即时通讯之CocoaAsyncSocket源码解析二
原文 前言 本文承接上文:iOS即时通讯之CocoaAsyncSocket源码解析一 上文我们提到了GCDAsyncSocket的初始化,以及最终connect之前的准备工作,包括一些错误检查:本机地 ...
- jQuery 源码解析二:jQuery.fn.extend=jQuery.extend 方法探究
终于动笔开始 jQuery 源码解析第二篇,写文章还真是有难度,要把自已懂的表述清楚,要让别人听懂真的不是一见易事. 在 jQuery 源码解析一:jQuery 类库整体架构设计解析 一文,大致描述了 ...
- Common.Logging源码解析二
Common.Logging源码解析一分析了LogManager主入口的整个逻辑,其中第二步生成日志实例工厂类接口分析的很模糊,本随笔将会详细讲解整个日志实例工厂类接口的生成过程! (1).关于如何生 ...
- erlang下lists模块sort(排序)方法源码解析(二)
上接erlang下lists模块sort(排序)方法源码解析(一),到目前为止,list列表已经被分割成N个列表,而且每个列表的元素是有序的(从大到小) 下面我们重点来看看mergel和rmergel ...
- element-ui 源码解析 二
Carousel 走马灯源码解析 1. 基本原理:页面切换 页面切换使用的是 transform 2D 转换和 transition 过渡 可以看出是采用内联样式来实现的 举个栗子 <div : ...
- ArrayList源码解析(二)
欢迎转载,转载烦请注明出处,谢谢. https://www.cnblogs.com/sx-wuyj/p/11177257.html 自己学习ArrayList源码的一些心得记录. 继续上一篇,Arra ...
- React的Component,PureComponent源码解析(二)
1.什么是Component,PureComponent? 都是class方式定义的基类,两者没有什么大的区别,只是PureComponent内部使用shouldComponentUpdate(nex ...
随机推荐
- 64位Windows的Dos中取消了edit命令
前段时间在玩dos命令行的时候,用copy con创建了txt文件后想对其进行编辑,然后我又不想用记事本,所以去网上找命令行中对文本文件进行编辑的命令(纯属想装B),结果看到了edit命令. 一敲,就 ...
- 【12】python 栈型数据结构模拟、队列型数据结构模拟
一.压栈操作模拟 #__author:"吉*佳" #date: 2018/10/21 0021 #function:栈 # 栈:即是先进后出的一种数据结构 # (1)模拟压栈操作 ...
- Post-installation steps for Chromium | Fedora
Flash 插件安装 网址: https://fedora.pkgs.org/ 下载: chromium-pepper-flash-version.fc28.x86_64.rpm 安装后重启浏览器 解 ...
- jstl格式化日期
<%@ page contentType="text/html" pageEncoding="GBK"%> <%@ page import=& ...
- angularjs ngRoute和ui.router对比
ngRoute模块是angularjs自带的路由模块,ui.router是一个第三方路由模块,接下来将对两者进行一个对比: ng-router(angular-router.js) ng-view n ...
- 二、git版本回退
查看历史版本提交记录 git log git log --pretty=oneline Git用 HEAD表示当前版本 commit id(版本号),也就是最新的提交e4aa53d...43ae6f6 ...
- node学习笔记_03 express框架
express api地址:http://www.expressjs.com.cn/starter/static-files.html 一.安装依赖 npm i --save express npm ...
- python 爬取全量百度POI
在网上找了很多关于爬取百度POI的文章,但是对“全量”的做法并没有得到最终的解决方案,自己写了一个,但还是不能实现全量POI抓取,能够达到至少50%的信息抓取.注意:这里所指“全量”是能够达到100% ...
- PAT B1030 完美数列 (25 分)
给定一个正整数数列,和正整数 p,设这个数列中的最大值是 M,最小值是 m,如果 M≤mp,则称这个数列是完美数列. 现在给定参数 p 和一些正整数,请你从中选择尽可能多的数构成一个完美数列. 输入格 ...
- Tomcat主页404错误
单独启动Tomcat正常,但是通过Eclipse启动(这时启动也是正常的)后,访问Tomcat主页报404错误. 在网上找到了解决办法:http://www.jb51.net/article/8283 ...