900字范文,内容丰富有趣,生活中的好帮手!
900字范文 > yocto-poky

yocto-poky

时间:2021-01-27 13:03:33

相关推荐

yocto-poky

yocto-poky

关键词:yocto poky

poky工程,结构分析,源码分析

主要内容:

pokypoky 环境配置脚本

文档参考:

最新文档https://taotaodiy-yocto.readthedocs.io/en/latest/yocto/yocto-demo.html

官方工程

源码分析 - 环境配置脚本

oe-init-build-env脚本

在这个脚本中,检查了脚本的启动,并运行oe-buildenv-internal和oe-setup-builddir。

# 检查脚本启动if [ -n "$BASH_SOURCE" ]; thenTHIS_SCRIPT=$BASH_SOURCEelif [ -n "$ZSH_NAME" ]; thenTHIS_SCRIPT=$0elseTHIS_SCRIPT="$(pwd)/oe-init-build-env"if [ ! -e "$THIS_SCRIPT" ]; thenecho "Error: $THIS_SCRIPT doesn't exist!" >&2echo "Please run this script in oe-init-build-env's directory." >&2exit 1fifiif [ -n "$BBSERVER" ]; thenunset BBSERVERfiif [ -z "$ZSH_NAME" ] && [ "$0" = "$THIS_SCRIPT" ]; thenecho "Error: This script needs to be sourced. Please run as '. $THIS_SCRIPT'" >&2exit 1fiif [ -z "$OEROOT" ]; thenOEROOT=$(dirname "$THIS_SCRIPT")OEROOT=$(readlink -f "$OEROOT")fiunset THIS_SCRIPT# 运行脚本 oe-buildenv-internal 和 oe-setup-builddirexport OEROOT. $OEROOT/scripts/oe-buildenv-internal &&TEMPLATECONF="$TEMPLATECONF" $OEROOT/scripts/oe-setup-builddir || {unset OEROOTreturn 1}unset OEROOT[ -z "$BUILDDIR" ] || cd "$BUILDDIR"

oe-buildenv-internal

在这个脚本中进行变量检查,python版本检查,设置BUILDDIR、PATH、BB_ENV_EXTRAWHITE等变量

#检查变量if ! $(return >/dev/null 2>&1) ; thenecho '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 2fi# 当调用此函数时,假定已经定义了oelootif [ -z "$OEROOT" ]; thenecho >&2 "Error: OEROOT is not defined!"return 1fiif [ -z "$OE_SKIP_SDK_CHECK" ] && [ -n "$OECORE_SDK_VERSION" ]; thenecho >&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 1fi# 检查python版本# 我们可能有一些代码在Python的旧版本中无法正确解析,与其修复它,并永远警惕任何其他新特性的使用,只需检查一下这里的版本。py_v35_check=$(python3 -c 'import sys; print(sys.version_info >= (3,5,0))')if [ "$py_v35_check" != "True" ]; thenecho >&2 "BitBake requires Python 3.5.0 or later as 'python3 (scripts/install-buildtools can be used if needed)'"return 1fiunset py_v35_check#设置BUILDDIR 默认buildif [ -z "$BDIR" ]; thenif [ -z "$1" ]; thenBDIR="build"elseBDIR="$1"if [ "$BDIR" = "/" ]; thenecho >&2 "Error: / is not supported as a build directory."return 1fi# 删除任何可能的尾部斜杠。这是用来解决ubuntu10.04中错误的readlink,它不忽略后面的斜杠,# 因此“readlink-f new_dir_to_be_created/”返回空值。BDIR=$(echo $BDIR | sed -re 's|/+$||')BDIR=$(readlink -f "$BDIR")if [ -z "$BDIR" ]; thenPARENTDIR=$(dirname "$1")echo >&2 "Error: the directory $PARENTDIR does not exist?"return 1fifiif [ -n "$2" ]; thenBITBAKEDIR="$2"fifiif [ "${BDIR#/}" != "$BDIR" ]; thenBUILDDIR="$BDIR"elseBUILDDIR="$(pwd)/$BDIR"fiunset BDIRif [ -z "$BITBAKEDIR" ]; thenBITBAKEDIR="$OEROOT/bitbake$BBEXTRA"test -d "$BITBAKEDIR" || BITBAKEDIR="$OEROOT/../bitbake$BBEXTRA"fiBITBAKEDIR=$(readlink -f "$BITBAKEDIR")BUILDDIR=$(readlink -f "$BUILDDIR")BBPATH=$BUILDDIRexport BBPATHif [ ! -d "$BITBAKEDIR" ]; thenecho >&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 1fi# 确保我们的路径在 $PATHfor newpath in "$BITBAKEDIR/bin" "$OEROOT/scripts"; do# 移除任何$PATH中的$newpathPATH=$(echo $PATH | sed -re "s#(^|:)$newpath(:|$)#\2#g;s#^:##")# Add $newpath to $PATHPATH="$newpath:$PATH"doneunset BITBAKEDIR newpath# 导出变量 这些变量在runqemu脚本中使用export BUILDDIRexport PATHBB_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_LOGCONFIG"BB_ENV_EXTRAWHITE="$(echo $BB_ENV_EXTRAWHITE $BB_ENV_EXTRAWHITE_OE | tr ' ' '\n' | LC_ALL=C sort --unique | tr '\n' ' ')"export BB_ENV_EXTRAWHITE

oe-setup-builddir

这个脚本主要是创建、配置/build/conf中的内容。

比如第一次会根据poky/meta-poky下的local.conf.sample生成/build/conf/local.conf。

我们可以将local.conf中DL_DIR ?= “${TOPDIR}/downloads”

打开或者修改其内容,已配置编译时下载文件的目录,当我们有几个yocto工程时,就能共用一个downloads文件夹。

#检查目录if [ -z "$BUILDDIR" ]; thenecho >&2 "Error: The build directory (BUILDDIR) must be set!"exit 1fiif [ "$1" = '--help' -o "$1" = '-h' ]; thenecho 'Usage: oe-setup-builddir'echo ''echo "OpenEmbedded setup-builddir - setup build directory $BUILDDIR"echo ''exit 2fi#创建confmkdir -p "$BUILDDIR/conf"#检查BUILDDIRif [ ! -d "$BUILDDIR" ]; thenecho >&2 "Error: The builddir ($BUILDDIR) does not exist!"exit 1fiif [ ! -w "$BUILDDIR" ]; thenecho >&2 "Error: Cannot write to $BUILDDIR, perhaps try sourcing with a writable path? i.e. . oe-init-build-env ~/my-build"exit 1fi#正在尝试从BUILDDIR,BUILDDIR/conf中删除粘性setuid位chmod -st "$BUILDDIR" 2>/dev/null || echo "WARNING: unable to chmod $BUILDDIR"chmod -st "$BUILDDIR/conf" 2>/dev/null || echo "WARNING: unable to chmod $BUILDDIR/conf"cd "$BUILDDIR"#创建配置模板if [ -f "$BUILDDIR/conf/templateconf.cfg" ]; thenTEMPLATECONF=$(cat "$BUILDDIR/conf/templateconf.cfg")fi. $OEROOT/.templateconfif [ ! -f "$BUILDDIR/conf/templateconf.cfg" ]; thenecho "$TEMPLATECONF" >"$BUILDDIR/conf/templateconf.cfg"fi# # $TEMPLATECONF可以指向模板的目录 local.conf & bblayers.conf#if [ -n "$TEMPLATECONF" ]; thenif [ ! -d "$TEMPLATECONF" ]; then# 允许TEMPLATECONF=meta xyz/conf作为快捷方式if [ -d "$OEROOT/$TEMPLATECONF" ]; thenTEMPLATECONF="$OEROOT/$TEMPLATECONF"fiif [ ! -d "$TEMPLATECONF" ]; thenecho >&2 "Error: TEMPLATECONF value points to nonexistent directory '$TEMPLATECONF'"exit 1fifiOECORELAYERCONF="$TEMPLATECONF/bblayers.conf.sample"OECORELOCALCONF="$TEMPLATECONF/local.conf.sample"OECORENOTESCONF="$TEMPLATECONF/conf-notes.txt"fi#检查conf下文件,生成(复制)local.conf bblayers.confunset SHOWYPDOCif [ -z "$OECORELOCALCONF" ]; thenOECORELOCALCONF="$OEROOT/meta/conf/local.conf.sample"fiif [ ! -r "$BUILDDIR/conf/local.conf" ]; thencat <<EOMYou had no conf/local.conf file. This configuration file has therefore beencreated for you with some default values. You may wish to edit it to, forexample, select a different MACHINE (target hardware). See conf/local.conffor more information as common configuration options are commented.EOMcp -f $OECORELOCALCONF "$BUILDDIR/conf/local.conf"SHOWYPDOC=yesfiif [ -z "$OECORELAYERCONF" ]; thenOECORELAYERCONF="$OEROOT/meta/conf/bblayers.conf.sample"fiif [ ! -r "$BUILDDIR/conf/bblayers.conf" ]; thencat <<EOMYou had no conf/bblayers.conf file. This configuration file has therefore beencreated for you with some default values. To add additional metadata layersinto your configuration please add entries to conf/bblayers.conf.EOM#把abocolute路径放到bblayers.conf,以便我们可以在第一次运行后运行bitbake而不使用init脚本#COREBASE已弃用,因为它的含义不一致,但为了兼容性,请继续替换它。sed -e "s|##OEROOT##|$OEROOT|g" \-e "s|##COREBASE##|$OEROOT|g" \$OECORELAYERCONF > "$BUILDDIR/conf/bblayers.conf"SHOWYPDOC=yesfi# 防止在同一控制台中干扰新的GIT克隆unset OECORELOCALCONFunset OECORELAYERCONF# 正在结束首次运行消息。显示YP文档横幅。if [ ! -z "$SHOWYPDOC" ]; thencat <<EOMThe Yocto Project has extensive documentation about OE including a referencemanual which can be found at:/documentationFor more information about OpenEmbedded see their website:/EOM# unset SHOWYPDOCfiif [ -z "$OECORENOTESCONF" ]; thenOECORENOTESCONF="$OEROOT/meta/conf/conf-notes.txt"fi[ ! -r "$OECORENOTESCONF" ] || cat $OECORENOTESCONFunset OECORENOTESCONF

初始化相关的三个脚本主要是设置变量和配置,然后我们就可以开始构建系统了。

源码分析 - bitbake源码

bitbake core-image-sato 之后都做了些什么

/bitbake/bitbake-user-manual/bitbake-user-manual-execution.html

BitBake首先在当前工作目录中搜索可选的conf/bblayers.conf配置文件,使用BBPATH变量定位文件。

该配置文件通常包含用于拉入任何其他元数据的指令,例如特定于体系结构、计算机、本地环境等的文件。

在解析配置文件之后,BitBake使用其基本的继承机制,即通过类文件来继承(include

INHERIT)一些标准类。

BitBake按顺序解析在中找到的任何附加文件BBFILES并制作一个基本配置的新副本,然后逐行分析配方。

食谱的解析完成时,BitBake产生该食谱定义的任务列表以及一组由键和值以及有关任务的依赖关系信息组成的数据,既由PN_PV组成的PROVIDES列表,

当BitBake开始构建时,会根据存储库中包含的软件包的PN_PV值在PROVIDES列表中找到该软件的软件包,再次解析该软件包的元数据(如计算校验和等)。

BitBake会根据首选项和依赖关系来准确计算该软件包需要运行哪些任务以及以什么顺序运行它们。

再然后BitBake会开启多个线程,交叉构建。

任务运行完毕,就会产生我们需要的image

源码分析 - bitbake函数

yocto tips

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。
相关阅读
扩展阅读