2015-04-16 3 views
0

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

дело в том, я на самом деле хочу этот рецепт, чтобы построить из руководителя филиала, поэтому поставив конкретную ревизию не кажется, что я после и SRCREV="${AUTOREV}", казалось бы, что я на самом деле хочу. Но, как упоминалось выше, ${SRCREV_machine} - это пустая строка, а не AUTOINC, как я думаю, она должна оцениваться.

Может ли кто-нибудь предложить мне какое-либо представление о том, как я могу получить рецепт для обоих, следуя за головой, не постоянно обновляя рецепт, чтобы содержать правильный SRCREV и передать его do_validate_branches()? Что мне здесь не хватает?

Edit: Подробнее ...

Проблема также, кажется, фиксируется, если я изменить мой ядро-yocto.bbclass следующим образом ... @ 285

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

Мое понимание мое изменение заключается в том, что я делаю это явно для того, чтобы вернуть $SRCREV из моей ветви машины. Кажется, что оригинал, кажется, уже сохранен в ${SRCREV_machine}. Хотя исходные результаты в пустой строке и мое изменение приводит к AUTOINC.

Хотя я все еще думаю, что мне что-то не хватает, потому что мне не нужно редактировать базовые классы. Но я всегда склонен думать, что я что-то упустил, чем это ошибка. Возможно, я должен разместить это в списках рассылки yocto.

+0

Не уверен, что это необходимо для вашего случая, но вы добавили 'SRCPV' в' PV' за http://www.yoctoproject.org/docs/1.6/dev-manual/dev-manual.html#platdev -appdev-srcrev? – lnmx

+0

У меня есть 'PV =" $ {LINUX_VERSION} + git $ {SRCPV} ", который был включен в оригинал, который я получил от запуска yocto-bsp create. Это, по-видимому, подтверждается структурой каталогов, созданной во время сборки, которая содержит директорию '3.14.28 + gitAUTOINC + 7035c2a67d-r0'. –

ответ

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}". В настоящее время он рассматривается и перерабатывается, надеюсь, для версии v1.8.

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

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

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

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