Задачи

Во время сборки и устрановки для большинства приложений выполняются схожие задачи. К примеру, может потребоваться скачать и распаковать исходный код, наложить патчи, запустить настройку параметров сборки, запустить "make install" для устрановки приложения. Если потребуется упаковка приложения в .deb или .rpm пакет, то необходимо выполнить дополнительные задачи.

Заметим, что сборка в OpenEmbedded выполняется аналогично. Для каждого рецепта выполняется ряд задач в определенном порядке. Каждая из задач соответствует выше перечисленным, к примеру "скачать архив исходных кодов". Вероятно вы уже видели выполнение этих задач, во время своой работы bitbake выводит их:

~%> bitbake lzo
NOTE: Psyco JIT Compiler (http://psyco.sf.net) not available. Install it to increase performance.
NOTE: Handling BitBake files: \ (4541/4541) [100 %]
NOTE: Parsing finished. 4325 cached, 0 parsed, 216 skipped, 0 masked.
NOTE: build 200705041709: started

OE Build Configuration:
BB_VERSION     = "1.8.2"
OE_REVISION    = "<unknown>"
TARGET_ARCH    = "sh4"
TARGET_OS      = "linux"
MACHINE        = "titan"
DISTRO         = "erouter"
DISTRO_VERSION = "0.1-20070504"
TARGET_FPU     = ""

NOTE: Resolving missing task queue dependencies
NOTE: preferred version 2.5 of glibc not available (for item virtual/sh4-linux-libc-for-gcc)
NOTE: Preparing Runqueue
NOTE: Executing runqueue
NOTE: Running task 208 of 226 (ID: 11, /home/lenehan/devel/oe/build/titan-glibc-25/recipes/lzo/lzo_1.08.bb, do_fetch)
NOTE: package lzo-1.08: started
NOTE: package lzo-1.08-r14: task do_fetch: started
NOTE: package lzo-1.08-r14: task do_fetch: completed
NOTE: package lzo-1.08: completed
NOTE: Running task 209 of 226 (ID: 2, /home/lenehan/devel/oe/build/titan-glibc-25/recipes/lzo/lzo_1.08.bb, do_unpack)
NOTE: package lzo-1.08: started
NOTE: package lzo-1.08-r14: task do_unpack: started
NOTE: Unpacking /home/lenehan/devel/oe/sources/lzo-1.08.tar.gz to /home/lenehan/devel/oe/build/titan-glibc-25/tmp/work/lzo-1.08-r14/
NOTE: package lzo-1.08-r14: task do_unpack: completed
NOTE: package lzo-1.08: completed
NOTE: Running task 216 of 226 (ID: 3, /home/lenehan/devel/oe/build/titan-glibc-25/recipes/lzo/lzo_1.08.bb, do_patch)
NOTE: package lzo-1.08: started
NOTE: package lzo-1.08-r14: task do_patch: started
NOTE: package lzo-1.08-r14: task do_patch: completed
NOTE: package lzo-1.08: completed
NOTE: Running task 217 of 226 (ID: 4, /home/lenehan/devel/oe/build/titan-glibc-25/recipes/lzo/lzo_1.08.bb, do_configure)
NOTE: package lzo-1.08: started
NOTE: package lzo-1.08-r14: task do_configure: started
NOTE: package lzo-1.08-r14: task do_configure: completed
NOTE: package lzo-1.08: completed
NOTE: Running task 218 of 226 (ID: 12, /home/lenehan/devel/oe/build/titan-glibc-25/recipes/lzo/lzo_1.08.bb, do_qa_configure)
NOTE: package lzo-1.08: started
NOTE: package lzo-1.08-r14: task do_qa_configure: started
NOTE: Checking sanity of the config.log file
NOTE: package lzo-1.08-r14: task do_qa_configure: completed
NOTE: package lzo-1.08: completed
NOTE: Running task 219 of 226 (ID: 0, /home/lenehan/devel/oe/build/titan-glibc-25/recipes/lzo/lzo_1.08.bb, do_compile)
NOTE: package lzo-1.08: started
NOTE: package lzo-1.08-r14: task do_compile: started
NOTE: package lzo-1.08-r14: task do_compile: completed
NOTE: package lzo-1.08: completed
NOTE: Running task 220 of 226 (ID: 1, /home/lenehan/devel/oe/build/titan-glibc-25/recipes/lzo/lzo_1.08.bb, do_install)
NOTE: package lzo-1.08: started
NOTE: package lzo-1.08-r14: task do_install: started
NOTE: package lzo-1.08-r14: task do_install: completed
NOTE: package lzo-1.08: completed
NOTE: Running task 221 of 226 (ID: 5, /home/lenehan/devel/oe/build/titan-glibc-25/recipes/lzo/lzo_1.08.bb, do_package)
NOTE: package lzo-1.08: started
NOTE: package lzo-1.08-r14: task do_package: started
NOTE: DO PACKAGE QA
NOTE: Checking Package: lzo-dbg
NOTE: Checking Package: lzo
NOTE: Checking Package: lzo-doc
NOTE: Checking Package: lzo-dev
NOTE: Checking Package: lzo-locale
NOTE: DONE with PACKAGE QA
NOTE: package lzo-1.08-r14: task do_package: completed
NOTE: package lzo-1.08: completed
NOTE: Running task 222 of 226 (ID: 8, /home/lenehan/devel/oe/build/titan-glibc-25/recipes/lzo/lzo_1.08.bb, do_package_write)
NOTE: package lzo-1.08: started
NOTE: package lzo-1.08-r14: task do_package_write: started
Packaged contents of lzo-dbg into /home/lenehan/devel/oe/build/titan-glibc-25/tmp/deploy/ipk/sh4/liblzo-dbg_1.08-r14_sh4.ipk
Packaged contents of lzo into /home/lenehan/devel/oe/build/titan-glibc-25/tmp/deploy/ipk/sh4/liblzo1_1.08-r14_sh4.ipk
NOTE: Not creating empty archive for lzo-doc-1.08-r14
Packaged contents of lzo-dev into /home/lenehan/devel/oe/build/titan-glibc-25/tmp/deploy/ipk/sh4/liblzo-dev_1.08-r14_sh4.ipk
NOTE: Not creating empty archive for lzo-locale-1.08-r14
NOTE: package lzo-1.08-r14: task do_package_write: completed
NOTE: package lzo-1.08: completed
NOTE: Running task 223 of 226 (ID: 6, /home/lenehan/devel/oe/build/titan-glibc-25/recipes/lzo/lzo_1.08.bb, do_populate_staging)
NOTE: package lzo-1.08: started
NOTE: package lzo-1.08-r14: task do_populate_staging: started
NOTE: package lzo-1.08-r14: task do_populate_staging: completed
NOTE: package lzo-1.08: completed
NOTE: Running task 224 of 226 (ID: 9, /home/lenehan/devel/oe/build/titan-glibc-25/recipes/lzo/lzo_1.08.bb, do_qa_staging)
NOTE: package lzo-1.08: started
NOTE: package lzo-1.08-r14: task do_qa_staging: started
NOTE: QA checking staging
NOTE: package lzo-1.08-r14: task do_qa_staging: completed
NOTE: package lzo-1.08: completed
NOTE: Running task 225 of 226 (ID: 7, /home/lenehan/devel/oe/build/titan-glibc-25/recipes/lzo/lzo_1.08.bb, do_distribute_sources)
NOTE: package lzo-1.08: started
NOTE: package lzo-1.08-r14: task do_distribute_sources: started
NOTE: package lzo-1.08-r14: task do_distribute_sources: completed
NOTE: package lzo-1.08: completed
NOTE: Running task 226 of 226 (ID: 10, /home/lenehan/devel/oe/build/titan-glibc-25/recipes/lzo/lzo_1.08.bb, do_build)
NOTE: package lzo-1.08: started
NOTE: package lzo-1.08-r14: task do_build: started
NOTE: package lzo-1.08-r14: task do_build: completed
NOTE: package lzo-1.08: completed
NOTE: Tasks Summary: Attempted 226 tasks of which 213 didn't need to be rerun and 0 failed.
NOTE: build 200705041709: completed

Замечание

Учтите, что вывод может отличаться в зависимости от используемой версии bibake. К тому же некоторые задачи запускаются только при включении определенных параметров в вашем дистрибутиве. Важно заметить, что bitbake при запуске различных заданий показывает когда они начинаются и когда завершаются.

Для создания пакета требуется выполнить ряд задач. Они аналогичны для каждого рецепта (хотя некоторые рецепты могут запускать дополнительные задачи, но это будет рассмотрено поздже) и обычно это следующие задачи:

fetch

Задача fetch осуществляет получение исходного кода при помощи скачивания архивов и получения из репозиториев исходного кода git, svn и тому подобных.

unpack

Задача unpack осуществляет распаковку файлов из архивов (к примеру из .tar.gz) и копирование дополнительных файлов (к примеру init скриптов) в рабочую область.

patch

Задача patch осуществляет наложение патчей на распакованный исходный код.

configure

Задача configure осуществляет настройку сборки приложения. Запуск скрипта настройки ("./configure <options>") является одной из самой часто используемых, но возможны и другие варианты.

compile

Задача compile осуществляет компиляцию приложения. Обычно просто запускает команду make.

populate_staging (stage)

Задача populate_staging (для обращения можно пользоваться коротким псеводонимом stage) обеспечивает доступность библиотек и заголовочных файлов (при их наличии) если они потребуются другим приложениям для сборки. К примеру если вы собрали рецепт zlib, то его библиотеки и заголовочные файлы должны быть доступны при сборке других приложений.

Замечание

Эта задача отличается от задачи install тем что делает доступными библиотеки и заголовочные файлы, для использования на платформе сборки. Поэтому библиотеки обычно включают ее, а обычные приложения не включают. Задача install подготавливает файлы к упаковке и последующей установке на целевой платформе.

install

Задача install осуществляет установку приложения. Установка производится в каталог назначения (D). Этот каталог не включается в установочный пакет. Другими словами если вы устанавливаете что-то в ${D}/bin, то в пакете и затем на целевой платформе, будет находиться в каталоге /bin,

package

Задача package осуществляет разбиение и перемешение установленных файлов из каталога назначения (${D}) по отдельным подкаталогам пакетов, внутри каталога ${WORKDIR}/install. Обычно имеется основной пакет, пакет документации (-doc), разработки (-dev) и отладочный пакет (-dbg).

package_write

Задача package_write осуществляет упаковку каждого из подкаталога пакетов в необходимый формат пакета установки, к примеру .ipk, .deb или .rpm. На данный момент поддерживается полностью только .ipk, над поддержкой .deb ведется активная работа. Но опытный разработчик OpenEmbedded может легко добавить новый формат пакетов.

Замечание

Возможно вы заметили что bibake при выводе добавляет перфикс do_ к задачам. К примеру к install - do_install. Это происходит из-за того что задача x определена как функция do_x в классе или в рецепте. Местами обращение к задачам может производится по их имени, местами с префиксом do_.

Кроме описанных выше задач есть и другие. Добавить их в цепочку выполняемых задач можно разными способами способами. К примеру insane.bbclass, отвечающий за различные QA проверки, выполняет их через добавление задачи qa_configure между задачами configure и compile. Другая новая задача qa_staging добавляется между задачами populate_staging и build. В результате чего сначала проверяется результат выполнения задачи configure, а далее результат задачи populate_staging.

Для определения полного списка доступных для рецепта задач, запустите bibake следующим образом:

~%> bitbake -b recipes/perl/perl_5.8.8.bb -c listtasks
NOTE: package perl-5.8.8: started
NOTE: package perl-5.8.8-r11: task do_listtasks: started
do_fetchall
do_listtasks
do_rebuild
do_compile
do_build
do_populate_staging
do_mrproper
do_fetch
do_configure
do_clean
do_package
do_unpack
do_install
do_package_write
do_distribute_sources
do_showdata
do_qa_configure
do_qa_staging
do_patch
NOTE: package perl-5.8.8-r11: task do_listtasks: completed
NOTE: package perl-5.8.8: completed
~%> 

listtasks тоже является задачей, а опция bitbake -c позволяет запускать указанную задачу. Эта возможность будет использоваться в следующием разделе посвещенному работе с рецептом.