Работа с рецептом

Во время разработки часто приходится работать с одним рецептом. К примеру для внесения исправлений, добавления новой версии или создания нового рецепта. В предыдущей главе вы узнали что такое задачи и как они используются, эти знания помогут вам быстрее осуществлять разработку и отладку.

При помощи опции -b можно указать bitbake работать с одним рецептом. Эта опция принимает в качестве параметра имя рецепта и указывает на обработку только этого рецепта. Учтите что при этом игнорируются любые зависимости в рецепте, поэтому их требуется собрать заранее.

К примеру для очистки пакета (при помощи задачи clean ) и пересборки с отладочным выводом, запустите следующую команду:

~%> bitbake -b <bb-file> -c clean
~%> bitbake -b <bb-file> -D

Полезные опции bibake:

-b <bb-file>

Рецепт для обработки;

-c <action>

Выполняемое действие. Обычно имя одной из задача поддерживаемых рецептом;

-D

Отобразить отладочную информацию, используйте две -D для увеличения подробности вывода;

-f

Принудительно выполнить. Полезно когда bibake необходимо повторно выполнить завершенные задачи. К примеру повторный вызов задачи compile не сделает ничего так как задача уже завершена. Но добавление опции -f указывает на принудительно выполнение задачи, даже если она уже была завершена.

Часто употребимые действия (используются с -c):

fetch

Cкачивает все необходимые файлы, никаких действий с ними не производит.

unpack

Распаковывает архивы исходных кодов, но не применяет к ним патчей. Иногда может потребоваться посмотреть на распакованные исходные коды, до применения патчей. Может пригодиться при создании патчей.

patch

Накладывает патчи на исходный код.

configure

Выполняет настройку сборки приложения.

compile

Выполняет компиляцию приложения.

stage

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

install

Устанавливает приложение для формирования пакета.

package

Формирует пакет с приложением. Запомните в результате перемещаются файлы из каталога установки D, в каталог упаковки. Перед перепаковкой необходима переустановка.

clean

Удаляет каталог этой версии приложения. Обычно используется при тестовых сборках, для исключения влияния старых файлов на процесс.

Учитите что каждое действие соответствует запускаемой задаче. Если задача требует выполнения других задач и они не завершены, то сначала выполняются они. К примеру если вы запускаете compile, то сначала выполнятся fetch, unpack, pach и configure задачи.

Типичный процесс разработки включает в себя редактирование файлов в рабочем каталоге и пересборка, пока все не заработает:

[... тестирование ...]
~%> bitbake -b recipes/testapp/testapp_4.3.bb -c compile -D

[... сохранение копии main.c, внесение изменений...]
~%> vi tmp/work/testapp-4.3-r0/main.c
~%> bitbake -b recipes/testapp/testapp_4.3.bb -c compile -D -f

[... создание патча и добавление его в рецепт ...]
~%> vi recipes/testapp/testapp_4.3.bb

[... очистка затем повторное тестирование ...]
~%> bitbake -b recipes/testapp/testapp_4.3.bb -c clean
~%> bitbake -b recipes/testapp/testapp_4.3.bb

[... Примечание: Содание патчей тут не описывается ...]

Другой пример, о том как исправить упаковку в вашем рецепте:

~%> bitbake -b recipes/testapp/testapp_4.3.bb -c install -f
~%> bitbake -b recipes/testapp/testapp_4.3.bb -c stage -f
~%> find tmp/work/testapp_4.3/install
...
~%> vi recipes/testapp/testapp_4.3.bb

На этом этапе вы изменяете параметры PACKAGE_ и FILES_ и повторяете последовательность.

Отметьте как производится install и package. Понимание того, как выполняются эти задачи, значительно помогает при работе. Запомните что package перемещает файлы из каталога куда они были установлены в различные подкаталоги ${WORKDIR}/install для каждого пакета. Если вы запустите задачу package без предварительного запуска install задачи, то в результате в пакетах не будет файлов. Учтите, что package очищает все подкаталоги ${WORKDIR}/install, как результат никакие файлы не сохраняются. Кроме этого важно помнить, что если задача install не очищает каталог ${D}, то могут остаться файлы от предыдущей попытки упаковки, которые будут пропущены ( это нормально если вы позаботились об этом)