Я настраиваю yocto v1.7.1 «dizzy» для создания пользовательского образа Linux из настроенной версии ядра Linux, зарегистрированной в моем локальном репозитории git.
При прохождении процесса сборки происходит сбой во время 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.
SRCPV
кPV
на yoctoproject.org/docs/1.6/dev-manual/ ? - person lnmx   schedule 16.04.2015PV = "${LINUX_VERSION}+git${SRCPV}"
, который был включен в оригинал, который я получил от запуска yocto-bsp create. Кажется, это подтверждается структурой каталогов, созданной во время сборки, которая содержит каталог3.14.28+gitAUTOINC+7035c2a67d-r0
. - person Clayton Mills   schedule 16.04.2015