yocto d.getVar 失败
yocto d.getVar fails
从 http://book.yoctoprojectbook.com/index 学习 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_fetch()
任务中失败。经过一些打印语句调试后,我发现故障发生在这一行:src_uri = (d.getVar('SRC_URI', True) or "").split()
,特别是在 d.getVar('SRC_URI', True)
。我不太确定到底是什么导致了这个问题。有人愿意帮忙吗?我正在 运行 构建 yocto
。
的 rocko
这是我 运行 食谱时得到的终端输出:
$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.
这里是实际的日志文件:
DEBUG: Executing python function do_fetch
Downloading source tarball from ${SRC_URI} ...
DEBUG: Python function do_fetch finished
ERROR: Function failed: do_fetch
我不确定你在测试什么,但如果我尝试这个例子,它在解析过程中会失败:
ERROR: ExpansionError during parsing
/media/build/poky/meta/recipes-core/base-files/test_1.0.bb
Traceback (most recent call last):
File "/media/build/poky/bitbake/lib/bb/data_smart.py", line 412, in
DataSmart.expandWithRefs(s='${SITE}/v${PV_MAJOR}.${PV_MINOR}/${PN}-${PV}.tar.gz',
varname='SRC_URI'):
try:
> s = expand_var_regexp.sub(varparse.var_sub, s)
try: File "/media/build/poky/bitbake/lib/bb/data_smart.py", line 111, in
VariableParse.var_sub(match=<_sre.SRE_Match object; span=(9, 20),
match='${PV_MAJOR}'>):
else:
> var = self.d.getVarFlag(key, "_content")
self.references.add(key) File "/media/build/poky/bitbake/lib/bb/data_smart.py", line 794, in
DataSmart.getVarFlag(var='PV_MAJOR', flag='_content', expand=True,
noweakdefault=False, parsing=False):
cachename = var + "[" + flag + "]"
> value = self.expand(value, cachename)
File "/media/build/poky/bitbake/lib/bb/data_smart.py", line 436, in DataSmart.expand(s="${@bb.data.getVar('PV', d,
1).split('.')[0]}", varname='PV_MAJOR'):
def expand(self, s, varname = None):
> return self.expandWithRefs(s, varname).value
File "/media/build/poky/bitbake/lib/bb/data_smart.py", line 426, in DataSmart.expandWithRefs(s="${@bb.data.getVar('PV', d,
1).split('.')[0]}", varname='PV_MAJOR'):
except Exception as exc:
> raise ExpansionError(varname, s, exc) from exc
bb.data_smart.ExpansionError: Failure expanding variable PV_MAJOR, expression was ${@bb.data.getVar('PV', d, 1).split('.')[0]}
which triggered exception AttributeError: module 'bb.data' has no
attribute 'getVar'
这是因为 bb.data.getVar('PV', d, 1) 需要 d.getVar('PV', True)。如上所述,该食谱无法在 rocko 下解析,所以我认为您 运行 不是您认为的食谱?
从 http://book.yoctoprojectbook.com/index 学习 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_fetch()
任务中失败。经过一些打印语句调试后,我发现故障发生在这一行:src_uri = (d.getVar('SRC_URI', True) or "").split()
,特别是在 d.getVar('SRC_URI', True)
。我不太确定到底是什么导致了这个问题。有人愿意帮忙吗?我正在 运行 构建 yocto
。
rocko
这是我 运行 食谱时得到的终端输出:
$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.
这里是实际的日志文件:
DEBUG: Executing python function do_fetch
Downloading source tarball from ${SRC_URI} ...
DEBUG: Python function do_fetch finished
ERROR: Function failed: do_fetch
我不确定你在测试什么,但如果我尝试这个例子,它在解析过程中会失败:
ERROR: ExpansionError during parsing /media/build/poky/meta/recipes-core/base-files/test_1.0.bb
Traceback (most recent call last): File "/media/build/poky/bitbake/lib/bb/data_smart.py", line 412, in DataSmart.expandWithRefs(s='${SITE}/v${PV_MAJOR}.${PV_MINOR}/${PN}-${PV}.tar.gz', varname='SRC_URI'): try: > s = expand_var_regexp.sub(varparse.var_sub, s) try: File "/media/build/poky/bitbake/lib/bb/data_smart.py", line 111, in VariableParse.var_sub(match=<_sre.SRE_Match object; span=(9, 20), match='${PV_MAJOR}'>): else: > var = self.d.getVarFlag(key, "_content") self.references.add(key) File "/media/build/poky/bitbake/lib/bb/data_smart.py", line 794, in DataSmart.getVarFlag(var='PV_MAJOR', flag='_content', expand=True, noweakdefault=False, parsing=False): cachename = var + "[" + flag + "]" > value = self.expand(value, cachename) File "/media/build/poky/bitbake/lib/bb/data_smart.py", line 436, in DataSmart.expand(s="${@bb.data.getVar('PV', d, 1).split('.')[0]}", varname='PV_MAJOR'): def expand(self, s, varname = None): > return self.expandWithRefs(s, varname).value File "/media/build/poky/bitbake/lib/bb/data_smart.py", line 426, in DataSmart.expandWithRefs(s="${@bb.data.getVar('PV', d, 1).split('.')[0]}", varname='PV_MAJOR'): except Exception as exc: > raise ExpansionError(varname, s, exc) from exc bb.data_smart.ExpansionError: Failure expanding variable PV_MAJOR, expression was ${@bb.data.getVar('PV', d, 1).split('.')[0]} which triggered exception AttributeError: module 'bb.data' has no attribute 'getVar'
这是因为 bb.data.getVar('PV', d, 1) 需要 d.getVar('PV', True)。如上所述,该食谱无法在 rocko 下解析,所以我认为您 运行 不是您认为的食谱?