yocto:do_validate_branches()使用SRCREV失败=" $ {AUTOREV}"在linux-yocto-custom中

时间:2015-04-16 14:10:14

标签: linux git linux-kernel yocto bitbake

我正在设置yocto v1.7.1“dizzy”,以便从检查到我本地git存储库的自定义Linux内核版本构建自定义Linux映像。

在完成构建过程时,它会在do_validate_branches()期间失败,并显示以下错误消息。

DEBUG: Executing shell function do_validate_branches
usage: git cat-file (-t|-s|-e|-p|<type>|--textconv) <object>
   or: git cat-file (--batch|--batch-check) < <list_of_objects>

<type> can be one of: blob, tree, commit, tag
    -t                    show object type
    -s                    show object size
    -e                    exit with zero when there's no error
    -p                    pretty-print object's content
    --textconv            for blob objects, run textconv on object's content
    --batch[=<format>]    show info and content of objects fed from the standard input
    --batch-check[=<format>]
                          show info about objects fed from the standard input

ERROR:  is not a valid commit ID.
ERROR: The kernel source tree may be out of sync
WARNING: exit code 1 from a shell command.
ERROR: Function failed: do_validate_branches (log file is located at etc..)

查看生成的do_validate_branches代码,问题似乎是因为它正在调用git cat-file -t ${machine_srcrev},但${machine_srcrev}是一个空字符串。此外,这似乎是因为我在 linux-yocto-custom.bb

中使用了以下内容
SRCREV="${AUTOREV}"

因为当我用修订号替换它时,我不再遇到问题,例如......

SRCREV="7035c2a67d964acbb5d917f470bcda42691a3d9c"

问题是我实际上想要从分支的HEAD构建这个配方,所以放一个特定的修订似乎不是我所追求的,SRCREV="${AUTOREV}"似乎是我真正想要的。但如上所述,这使得${SRCREV_machine}是一个空字符串,而不是我认为它应该评估的AUTOINC

任何人都可以向我提供任何有关如何使配方能够跟随头部而无需不断更新配方以包含正确的SRCREV并让它通过其do_validate_branches()的任何见解?我在这里缺少什么?

编辑:更多信息...

如果我按照以下方式修改 kernel-yocto.bbclass ,问题似乎也得到解决...... @ 285

-    machine_srcrev="${SRCREV_machine}" 
+    machine_srcrev="${@ get_machine_branch(d, "${SRCREV}" )}"

我对我的更改的理解是我明确地从我的机器分支中重新获取$SRCREV。原作似乎认为已经存储在${SRCREV_machine}中。虽然原始结果为空字符串,但我的更改会产生AUTOINC

虽然我仍然认为我必须遗漏一些东西,因为我不需要编辑基类。但我总是更倾向于认为我错过了一些东西,而不是这是一个错误。也许我应该把它发布到某处的yocto邮件列表中。

1 个答案:

答案 0 :(得分:0)

在yocto邮件列表上进行了一些小讨论...... http://thread.gmane.org/gmane.linux.embedded.yocto.general/24316

<强>要点:

似乎do_validate_branches()中的当前逻辑并非完全证明。

特别是SRCREV_machine似乎没有在到达do_validate_branches()时正确设置,至少在我使用 linux-yocto-custom.bb的情况下并尝试使用SRCREV="${AUTOREV}"跟踪源分支的头部。目前正在查看并重新编写,希望在1.8版本发布。

一个好的方法是在 linux-yocto-custom.bb 中设置SRCREV_machine。特别是在设置SRCREV变量后,您可以直接将其设置为与行中SRCREV变量相同的内容。所以它看起来像......

SRCREV="${AUTOREV}"
SRCREV_machine="${AUTOREV}"    # or SRCREV_machine="${SRCREV}"

请记住,最终当您锁定要构建的源版本并将"${AUTOREV}"替换为特定版本时,此问题就会消失。

因此,当您构建的源仍在进行时,这项工作只是开发构建的必要条件,因此您希望使用"${AUTOREV}"跟踪移动的头部。