代码之家  ›  专栏  ›  技术社区  ›  flashburn

yocto d.getVar失败

  •  0
  • flashburn  · 技术社区  · 7 年前

    学习Yocto http://book.yoctoprojectbook.com/index . 第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) . 我真的不确定到底是什么导致了这个问题。有人愿意帮忙吗?我正在运行一个 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.
    

    DEBUG: Executing python function do_fetch
    Downloading source tarball from ${SRC_URI} ...
    DEBUG: Python function do_fetch finished
    ERROR: Function failed: do_fetch
    
    1 回复  |  直到 7 年前
        1
  •  2
  •   Richard Purdie    7 年前

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

    /media/build/poky/meta/recipes-core/base-files/test_1.0。bb型
    回溯(最近一次呼叫最后一次): 数据集市。expandWithRefs(s=“${SITE}/v${PV\u MAJOR}.${PV\u MINOR}/${PN}-${PV}.tar.gz”, varname='SRC\u URI'): 尝试: &燃气轮机;s= 展开\u var\u regexp try:File/media/build/poky/bitbake/lib/bb/data\u smart.py“,第111行,in 变量解析。var\u sub(match=<\u sre.sre\u match object;span=(9,20), 匹配=“${PV_MAJOR}”>): 其他: 自己参考文献。添加(键)文件“/media/build/poky/bitbake/lib/bb/data\u smart.py”,第794行,in 数据集市。getVarFlag(var='PV\u MAJOR',标志='\u content',expand=True, cachename=var+“[”+标志+“]” &燃气轮机;值=自身。展开(值,缓存名称) 文件“/media/build/poky/bitbake/lib/bb/data\u smart.py”,第436行,数据集市中。展开(s=“${@bb.data.getVar('PV',d, def expand(self,s,varname=None): &燃气轮机;返回自我。expandWithRefs(s,varname)。价值 文件“/media/build/poky/bitbake/lib/bb/data\u smart.py”,第426行,数据集市中。expandWithRefs(s=“${@bb.data.getVar('PV',d, 1).拆分('.')[0]},varname='PV\u MAJOR'): &燃气轮机;从exc引发ExpansionError(varname,s,exc) bb。data_智能。ExpansionError:扩展变量PV_MAJOR失败,表达式为${@bb.data.getVar('PV',d,1)。拆分('.)[0]} 这触发了异常AttributeError:module'bb。“数据”没有 属性“getVar”

    这是因为bb。数据getVar('PV',d,1)需要是d.getVar('PV',True)。如上所述,这个配方无法在rocko下解析,所以我认为你没有运行你认为是的配方?