yocto: ошибка do_validate_branches() при использовании SRCREV=${AUTOREV} в linux-yocto-custom

Я настраиваю 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.


person Clayton Mills    schedule 16.04.2015    source источник
comment
Не уверен, что это необходимо для вашего случая, но добавили ли вы SRCPV к PV на yoctoproject.org/docs/1.6/dev-manual/ ?   -  person lnmx    schedule 16.04.2015
comment
Да, у меня есть PV = "${LINUX_VERSION}+git${SRCPV}", который был включен в оригинал, который я получил от запуска yocto-bsp create. Кажется, это подтверждается структурой каталогов, созданной во время сборки, которая содержит каталог 3.14.28+gitAUTOINC+7035c2a67d-r0.   -  person Clayton Mills    schedule 16.04.2015


Ответы (1)


После небольшого обсуждения в списке рассылки 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.

Хорошим решением будет просто установить SRCREV_machine в файле linux-yocto-custom.bb. В частности, вы можете установить то же самое, что и ваша переменная SRCREV в строке сразу после установки вашей переменной SRCREV. Чтобы было похоже...

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

Имейте в виду, что в конечном итоге, когда вы заблокируете исходную версию, из которой вы создаете, и замените "${AUTOREV}" определенной версией, эта проблема исчезнет.

Таким образом, этот обходной путь необходим только для сборок разработки, когда исходный код, из которого вы строите, все еще прогрессирует, поэтому вы хотите отслеживать движущуюся голову с помощью "${AUTOREV}".

person Clayton Mills    schedule 22.04.2015