yocto d.getVar失败

yocto d.getVar失败,yocto,bitbake,Yocto,Bitbake,向我学习Yocto。第4章有以下代码 SUMMARY = "Recipe to build the 'nano' editor" PN = "nano" PV = "2.2.6" SITE = "http://www.nano-editor.org/dist" PV_MAJOR = "${@bb.data.getVar('PV', d, 1).split('.')[0]}" PV_MINOR = "${@bb.data.getVar('PV', d, 1).split('.')[1]}"

向我学习Yocto。第4章有以下代码

SUMMARY = "Recipe to build the 'nano' editor"

PN = "nano"
PV = "2.2.6"

SITE = "http://www.nano-editor.org/dist"
PV_MAJOR = "${@bb.data.getVar('PV', d, 1).split('.')[0]}"
PV_MINOR = "${@bb.data.getVar('PV', d, 1).split('.')[1]}"

SRC_URI = "${SITE}/v${PV_MAJOR}.${PV_MINOR}/${PN}-${PV}.tar.gz"
SRC_URI[md5sum] = "03233ae480689a008eb98feb1b599807"
SRC_URI[sha256sum] = \
"be68e133b5e81df41873d32c517b3e5950770c00fc5f4dd23810cd635abce67a"

python do_fetch() {
    bb.plain("Downloading source tarball from ${SRC_URI} ...")
    src_uri = (d.getVar('SRC_URI', True) or "").split()
    if 0 == len(src_uri):
        bb.fatal('Empty URI')
    try:
        fetcher = bb.fetch2.Fetch(src_uri, d)
        fetcher.download()
    except bb.fetch2.BBFetchException:
        bb.fatal('Could not fetch source tarball.')
    bb.plain("Download successful.")
}

addtask fetch before do_build

python do_unpack() {
    bb.plain("Unpacking source tarball ...")
    os.system("tar x -C ${WORKDIR} -f ${DL_DIR}/${P}.tar.gz")
    bb.plain("Unpacked source tarball.")
}

addtask unpack before do_build after do_fetch

python do_configure() {
    bb.plain("Configuring source package ...")
    os.system("cd ${WORKDIR}/${P} && ./configure")
    bb.plain("Configured source package.")
}

addtask configure before do_build after do_unpack

python do_compile() {
    bb.plain("Compiling package ...")
    os.system("cd ${WORKDIR}/${P} && make")
    bb.plain("Compiled package.")
}

addtask compile before do_build after do_configure

do_clean[nostamp] = "1"
do_clean() {
    rm -rf ${WORKDIR}/${P}
    rm -f ${TMPDIR}/stamps/*
}

addtask clean
配方位于meta hello/recipes editor/nano中。基本上,它试图构建一个
nano
文本编辑器包。它在执行
do\u fetch()
任务时失败。在一些print语句调试之后,我发现失败发生在这一行:
src_uri=(d.getVar('src_uri',True)或“).split()
,特别是在
d.getVar('src_uri',True)
。我真的不确定到底是什么导致了这个问题。有人愿意帮忙吗?我正在运行一个
rocko
构建的
yocto

以下是我运行配方时得到的终端输出:

$bitbake nano
NOTE: Not using a cache. Set CACHE = <directory> to enable.
Parsing recipes: 100% |#################################################################################################################| Time: 0:00:00
Parsing of 2 .bb files complete (0 cached, 2 parsed). 2 targets, 0 skipped, 0 masked, 0 errors.
NOTE: Resolving any missing task queue dependencies
Initialising tasks: 100% |##############################################################################################################| Time: 0:00:00
NOTE: Executing RunQueue Tasks
Downloading source tarball from ${SRC_URI} ...
ERROR: nano-2.2.6-r0 do_fetch: Function failed: do_fetch
ERROR: Logfile of failure stored in: /home/some-user/projects/bbhello/tmp/work/nano-2.2.6-r0/temp/log.do_fetch.14350
ERROR: Task (/home/some-user/projects/bbhello/meta-hello/recipes-editor/nano/nano.bb:do_fetch) failed with exit code '1'
NOTE: Tasks Summary: Attempted 1 tasks of which 0 didn't need to be rerun and 1 failed.

Summary: 1 task failed:
  /home/some-user/projects/bbhello/meta-hello/recipes-editor/nano/nano.bb:do_fetch
Summary: There was 1 ERROR message shown, returning a non-zero exit code.

我不确定您正在测试什么,但如果我尝试此示例,它在解析过程中会失败,原因是:

错误:分析期间ExpansionError /media/build/poky/meta/recipes核心/基本文件/test_1.0.bb
回溯(最近一次呼叫最后一次): 文件“/media/build/poky/bitbake/lib/bb/data_smart.py”,第412行,在 DataSmart.expandWithRefs(s='${SITE}/v${PV_MAJOR}.${PV_MINOR}/${PN}-${PV}.tar.gz', varname='SRC_URI'): 尝试: >s=展开变量regexp.sub(varparse.var\u sub,s) 尝试:文件“/media/build/poky/bitbake/lib/bb/data_smart.py”,第111行,在 VariableParse.var_sub(匹配=): 其他: >var=self.d.getVarFlag(键“\u内容”) self.references.add(key)文件“/media/build/poky/bitbake/lib/bb/data_smart.py”,第794行,在 DataSmart.getVarFlag(var='PV'u MAJOR',flag=''u content',expand=True, noweakdefault=False,parsing=False): cachename=var+“[”+标志+“]” >value=self.expand(值、缓存名) 文件“/media/build/poky/bitbake/lib/bb/data_smart.py”,第436行,在DataSmart.expand(s=“${@bb.data.getVar('PV',d, 1) .split('.')[0]},varname='PV_MAJOR'): def扩展(self、s、varname=None): >返回self.expandWithRefs(s,varname).value 文件“/media/build/poky/bitbake/lib/bb/data_smart.py”,第426行,在DataSmart.expandWithRefs(s=“${@bb.data.getVar('PV',d, 1) .split('.')[0]},varname='PV_MAJOR'): 除作为exc的例外情况外: >从exc引发ExpansionError(varname、s、exc) bb.data_smart.ExpansionError:扩展变量PV_MAJOR失败,表达式为${@bb.data.getVar('PV',d,1).split('.')[0]} 哪个触发了异常AttributeError:模块“bb.data”没有 属性“getVar”


这是因为bb.data.getVar('PV',d,1)需要是d.getVar('PV',True)。如上所述,此配方无法在rocko下解析,因此我不认为您正在运行您认为您正在运行的配方?

我不确定您正在测试的是什么,但如果我尝试此示例,它在解析过程中会失败:

错误:分析期间ExpansionError /media/build/poky/meta/recipes核心/基本文件/test_1.0.bb
回溯(最近一次呼叫最后一次): 文件“/media/build/poky/bitbake/lib/bb/data_smart.py”,第412行,在 DataSmart.expandWithRefs(s='${SITE}/v${PV_MAJOR}.${PV_MINOR}/${PN}-${PV}.tar.gz', varname='SRC_URI'): 尝试: >s=展开变量regexp.sub(varparse.var\u sub,s) 尝试:文件“/media/build/poky/bitbake/lib/bb/data_smart.py”,第111行,在 VariableParse.var_sub(匹配=): 其他: >var=self.d.getVarFlag(键“\u内容”) self.references.add(key)文件“/media/build/poky/bitbake/lib/bb/data_smart.py”,第794行,在 DataSmart.getVarFlag(var='PV'u MAJOR',flag=''u content',expand=True, noweakdefault=False,parsing=False): cachename=var+“[”+标志+“]” >value=self.expand(值、缓存名) 文件“/media/build/poky/bitbake/lib/bb/data_smart.py”,第436行,在DataSmart.expand(s=“${@bb.data.getVar('PV',d, 1) .split('.')[0]},varname='PV_MAJOR'): def扩展(self、s、varname=None): >返回self.expandWithRefs(s,varname).value 文件“/media/build/poky/bitbake/lib/bb/data_smart.py”,第426行,在DataSmart.expandWithRefs(s=“${@bb.data.getVar('PV',d, 1) .split('.')[0]},varname='PV_MAJOR'): 除作为exc的例外情况外: >从exc引发ExpansionError(varname、s、exc) bb.data_smart.ExpansionError:扩展变量PV_MAJOR失败,表达式为${@bb.data.getVar('PV',d,1).split('.')[0]} 哪个触发了异常AttributeError:模块“bb.data”没有 属性“getVar”


这是因为bb.data.getVar('PV',d,1)需要是d.getVar('PV',True)。如上所述,此配方无法在rocko下解析,因此我不认为您正在运行您认为是的配方?

谢谢。成功了。我没有测试任何东西。正在学习Yocto,这是书中提供的代码。谢谢。成功了。我没有测试任何东西。只是学习Yocto,这是书中提供的代码。
DEBUG: Executing python function do_fetch
Downloading source tarball from ${SRC_URI} ...
DEBUG: Python function do_fetch finished
ERROR: Function failed: do_fetch