Можно ли передать переменные командной строки в сборку bitbake?

У меня есть среда OpenEmbedded, использующая bitbake для некоторых сборок. Я хотел, чтобы происходило что-то «интерактивное», когда bitbake останавливался и запрашивал ввод, а затем продолжал сборку, но я обнаружил, что это невозможно.

Поскольку я не могу этого сделать, я ищу способ передать дополнительные флаги для сборки. Есть ли способ передать флаги в сборку bitbake вроде опции -D в gcc?

ie:

bitbake -Dfoo=bar oe-myimage

Таким образом, в процессе сборки oe-myimage для переменной foo будет установлено значение bar.


person Mike    schedule 28.06.2013    source источник


Ответы (5)


bitbake -Dfoo=bar oe-myimage

Флаг -D не распознается bitbake. Таким образом, использование вышеуказанного метода не будет работать. Вместо этого вы можете указать флаги из командной строки, выполнив следующие шаги:

Допустим, вы хотите экспортировать переменную foo и ожидать, что она будет распознана bitbake.

export foo="foobar"

Вам нужно будет экспортировать это и сообщить bitbake через переменную BB_ENV_EXTRAWHITE после получения oe-init-build-env. Это означает

. oe-init-build-env
export foo="foobar"
export BB_ENV_EXTRAWHITE="$BB_ENV_EXTRAWHITE foo"      

Это заносит в белый список переменную foo для bitbake и, таким образом, делает ее видимой для любого рецепта и подпроцесса во время сборки.

После этого вы можете вызывать любые операции bitbake, используя переменную foo внутри bitbake с помощью таких выражений, как -

${foo}
person mrvulcan    schedule 13.07.2013
comment
Можно ли добавить дополнительную постоянную переменную? В каких-то конфигурационных файлах или около того? Или мне нужно экспортировать BB_ENV_EXTRAWHITE после каждой перезагрузки системы? - person GAlexMES; 11.01.2019
comment
Да. Вам нужно только установить переменную там, где вам удобнее. например добавьте 2 строки экспорта, упомянутые выше, в oe-init-build-env. - person fabatera; 16.06.2020

Хотя в других ответах нет ничего плохого, bitbake принимает аргумент --postread, как задокументировано здесь. Это означает, что вы можете записать столько переменных bitbake, сколько хотите, во временный файл конфигурации и прочитать его после bitbake.conf, указав имя файла в командной строке. Например:

bitbake --postread=./extra.conf

Лично я считаю это более удобным, чем иметь дело с переменными среды.

person TaborKelly    schedule 07.02.2017

ты можешь сделать:

export foo="bar"
export BB_ENV_EXTRAWHITE="$BB_ENV_EXTRAWHITE foo"
bitbake oe-myimage
person KRiadh    schedule 28.01.2014

Также есть удобный способ сделать это из командной строки, который описан в руководстве по bitbake с использованием BB_ORIGENV:

Иногда полезно иметь возможность получать информацию из исходной среды выполнения. Bitbake сохраняет копию исходной среды в специальной переменной с именем BB_ORIGENV.

Для этого вы можете прочитать переменную точно так, как они предлагают (из функции Python):

 origenv = d.getVar("BB_ORIGENV", False)
 bar = origenv.getVar("BAR", False)

Затем способ передать это из командной строки просто:

BAR=somevalue bitbake myimage
person Brian    schedule 11.10.2019

Нет, я не верю, что такой механизм существует. Но вы могли бы сделать что-то вроде

"echo "foo = \"bar\"" >local.conf

Не уверен, что это решит вашу конкретную проблему или нет. Кроме того, существует механизм для локальных переменных всего сайта: если у вас есть файл «site.conf» в вашем домашнем каталоге в каталоге с именем .oe, bitbake прочитает его и применит эти переменные к глобальной среде для каждой сборки. Может быть, это помогло бы? Вы не указали, какую именно проблему вы пытаетесь решить, возможно, есть лучшие способы.

person challinan    schedule 30.06.2013