2016-08-11 13 views
5

yocto project позволяет использовать относительный путь в большинстве своих файлов конфигурации, но не в файле ./build/conf/bblayers.conf. В чем причина блокирования использования чего-либо, кроме абсолютных путей для переменных BBLAYERS и BBLAYERS_NON_REMOVABLE?Почему файл yocto bblayers.conf использует абсолютные пути?

Я просмотрел BitBake user manual for yocto version 2.0 (текущая версия), но это не объясняет причины. Я также проверил некоторые из старых версий руководства, но они, похоже, не упоминают рассуждений, когда говорят о файле bblayers.conf или переменной BBLAYERS. Тот же файл также содержит BBPATH = "${TOPDIR}", который, по крайней мере, динамически назначен и не находится далеко от корневого каталога yotco.

Мое лучшее предположение состоит в том, что файл bblayers.conf специфичен для системы, в которой он выполняется. Это сделало бы его непригодным для совместного использования между разработчиками через исходный контроль, и абсолютные пути заставили бы людей редактировать файл всякий раз, когда они получали копию. Это, однако, не очень хорошая причина, поэтому вопрос.

+0

Вы когда-нибудь задумывались, как это сделать? Сидеть в той же лодке прямо сейчас :) –

+0

@MarioTacke нет, я этого не делал. Я думаю, что ответ заключается в том, что файл 'bblayers.conf' предназначен для конкретного пользователя на машине и только временного. После того, как вы разобрали слои, которые вы хотите, вы должны сделать рецепт, который заменяет большинство содержимого 'bblayers.conf'. Вы можете использовать '$ {HOME}', '$ {TOPDIR}' и несколько других подстановок, но не относительные пути. – TafT

+0

Никто не отвечает на вопрос. Я не спрашиваю: «Как использовать относительные пути». Я спрашиваю: «Почему их использование заблокировано». Оглядываясь на это сейчас, я предполагаю, что ответ за эффективность. Для абсолютного пути вы можете перейти непосредственно к целевому файлу. Для относительного пути вам нужно разработать действующий рабочий каталог, выяснить, что такое N много '../' над ним и переместить туда, а затем вернуться назад по другому пути к каталогу. Это звучит больше, чем в/home/TafT/yocto/meta. – TafT

ответ

3

Вы можете использовать относительные пути в bblayers.conf.

Существует, вероятно, эта строка в вашем bblayers.conf:

BBPATH = "${TOPDIR}" 

Если вы хотите, чтобы узнать содержимое этой переменной, вы, вероятно, найти каталог верхнего уровня вашего каталога сборки:

bitbake -e | grep ^TOPDIR 
# searches for bitbake variables 

В этом каталоге вы можете создать слой meta-test и добавить его в bblayers.conf с относительным путем:

BBLAYERS ?= " \ 
    meta-test \ 
    [...] 
    " 

Таким образом, ответ на ваш вопрос, почему существуют абсолютные пути в bblayers.conf, заключается в том, что вы можете разместить свой каталог сборки в любом месте системы и не зависеть от Yocto.

Относительные пути к слоям должны всегда относиться к каталогу сборки.

+0

В вашем ответе указывается, что возможны пути относительно каталога сборки. Ничто не говорит, что относительные пути действительно могут быть использованы. Если система Yocto (или bitbake) принимает только Абсолютный путь для $ {TOPDIR}, а затем использует строковые манипуляции для добавления путей BBLAYERS, которые все еще используют только абсолютные пути. Вы говорите, что способность размещать каталог сборки в любом месте поддерживается требованием абсолютного пути к нему? Есть ли источник этих утверждений. – TafT

+0

Я этого не понимаю. Относительный путь всегда требует контрольной точки. Это относится к термину «относительный». В этом случае это будет BBPATH. Вы можете получить доступ к любому файлу в вашей файловой системе с помощью относительного пути при условии, что параметры безопасности подходят. – h0ch5tr4355

+0

Если я вхожу в '. /' Или '../../' в пути, которые я использую, они терпят неудачу. Это такой относительный путь, о котором я прошу. Я вижу, что с использованием системы битбокса можно иметь несколько раз в пути по отношению к другим вещам в экосистеме битбокса. Я спрашиваю, почему у меня не может быть пути, определенного как '../ foo/bar.txt' внутри файла bblayers.conf, когда это кажется возможным в большинстве других файлов, в которые я его пытаюсь. – TafT

4

Я нашел способ использования относительных путей.

Вы можете использовать inline python для перемещения по файловой системе. Следующий сценарий использует предоставленную переменную TOPDIR, а затем переходит к ее родительскому элементу с помощью api python os.path.

# LAYER_CONF_VERSION is increased each time build/conf/bblayers.conf 
# changes incompatibly 
LCONF_VERSION = "6" 

BBPATH = "${TOPDIR}" 
BBFILES ?= "" 

YOCTOROOT = "${@os.path.abspath(os.path.join("${TOPDIR}", os.pardir))}" 

BBLAYERS ?= " \ 
    ${YOCTOROOT}/poky/meta \ 
    ${YOCTOROOT}/poky/meta-yocto \ 
    ${YOCTOROOT}/poky/meta-yocto-bsp \ 
" 

BBLAYERS_NON_REMOVABLE ?= " \ 
    ${YOCTOROOT}/poky/meta \ 
    ${YOCTOROOT}/poky/meta-yocto \ 
" 

Ссылки
+0

Как YOCTOROOT отличается от BBPATH или TOPDIR? Я думаю, это дает вам эффективную операцию ../, которая решила бы проблему и позволила бы вам выполнить '$ {YOCTOROOT}/my-layer /'. – TafT

+0

Да, это правильно. –

1

мне удалось получить "относительные пути" в bblayers.conf файлов работает путем замены

BBLAYERS ?= " \ 
    /home/username/poky/meta \ 
    ... 

с

BBLAYERS ?= " \ 
    ${TOPDIR}/../meta \ 
    ... 

Я думаю, один нюанс такого подхода заключается в том, что я полагаться на каталогах meta-XXX слоя всегда находящихся в родительской папке TOPDIR. Это похоже на способ использования yocto по умолчанию, но, возможно, это не так для более настраиваемых настроек сборки.

+1

Похоже, вам удалось получить то, что я, вероятно, не смог сделать, чтобы работать. Возможно, инструменты обновлены, чтобы позволить это поведение сейчас. Спасибо за ваш ответ, но он не затрагивает вопрос о том, почему они были заблокированы. Хотя, я полагаю, это демонстрирует, что теперь они больше не могут быть заблокированы, поэтому ответ может заключаться в том, что это было ошибкой без причины. – TafT