Рабочая область

Под рабочей областью в OpenEmbedded подразумевается каталог, на который указывает TMPDIR. По умолчанию он создается там где запускается bitbake (обычно это build/tmp ), но его расположение может быть изменено при при помощи настройки параметра TMPDIR в файле local.conf. Для просмотра вашей рабочей области запустите в базовом каталоге OpenEmbedded следующую команду:

~%> find tmp -maxdepth 2 -type d
tmp
tmp/stamps
tmp/cross
tmp/cross/bin
tmp/cross/libexec
tmp/cross/lib  
tmp/cross/share
tmp/cross/sh4-linux
tmp/cache
tmp/cache/titan
tmp/work
tmp/work/busybox-1.2.1-r13
tmp/work/libice-1_1.0.3-r0 
tmp/work/arpwatch-2.1a15-r2
...
tmp/rootfs
tmp/rootfs/bin
tmp/rootfs/usr
tmp/rootfs/media
tmp/rootfs/dev  
tmp/rootfs/var  
tmp/rootfs/lib  
tmp/rootfs/sbin 
tmp/rootfs/mnt  
tmp/rootfs/boot 
tmp/rootfs/sys  
tmp/rootfs/proc 
tmp/rootfs/etc  
tmp/rootfs/home 
tmp/rootfs/tmp  
tmp/staging     
tmp/staging/man 
tmp/staging/x86_64-linux
tmp/staging/pkgdata
tmp/staging/pkgmaps
tmp/staging/var
tmp/staging/sh4-linux
tmp/staging/local
tmp/staging/etc  
tmp/deploy
tmp/deploy/addons
tmp/deploy/ipk   
tmp/deploy/sources
tmp/deploy/images

Рабочая область включает в себя следующие каталоги:

stamps

Содержит временные метки. Используется bitibake для отслеживания статуса задач: завершены, в процессе, не запускались. Это позволяет определять что уже завершено и не требует перезапуска.

cross

Содержит инструментарий сборки для кросс-компиляции. Запускается на платформе сборки, но создает исполняемые файлы для целевой платформы.

cache

Содержит кеш используемый для ускорения работы bitbake за счет предотвращения обработки всех рецептов при старте. Делает повторный запуск bitbake быстрее.

work

Рабочий каталог, используемый при сборке приложений. В нем прозводится распаковка архивов исходных кодов, наложение патчей, настройка, сборка, установка и формирование пакетов установки приложений. Самый активно используемый каталог OpenEmbedded.

rootfs

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

staging

Содержит инструменты, библиотеки и заголовки собранных для платформы сборки, используемые при сборки приложений для целевой платформы.

deploy

Содержит готовые установочные пакеты (обычно в формате .ipkg) и готовые загрузочные образы для записи в флеш-память или диск.

Для перезапуска сборки с нуля достаточно переименовать или удалить каталог tmp и по новой запустить процесс сборки. Рекомендуется сохранять старую версию каталога, так-как в случае возникнования проблем с новой сборкой, можно сравить старую и новую версию.

%> rm -fr tmp.OLD
$> mv tmp tmp.OLD
%> bitbake bootstrap-image

Рабочий каталог (tmp/work)

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

Рассмотрим содержимое рабочего каталога более подробно:

          ~%> find tmp/work -maxdepth 1 -type d | head -4
tmp/work
tmp/work/busybox-1.2.1-r13
tmp/work/libice-1_1.0.3-r0
tmp/work/arpwatch-2.1a15-r2

Как видите, этим каталогам соответствуют следющие рецепты: 13 релиз busybox версии 1.2.1, 0 релиз libice версии 1.1.0.3 и 2 релиз arpwatch версии 2.1.a15. Стоит учесть что каталоги могут находиться не в рабочем каталоге, а в его подкаталоге, имя которого состоит из имени целевой архитектуры и операционной системы. В этом случае просмотреть их можно следующей командой:

~%> find tmp/work -maxdepth 2 -type d | head -4
tmp/work
tmp/work/sh4-linux
tmp/work/sh4-linux/busybox-1.2.1-r13
tmp/work/sh4-linux/libice-1_1.0.3-r0
tmp/work/sh4-linux/arpwatch-2.1a15-r2

Каталог sh4-linux указывает на использование целевой архитектуры sh4 и операционной системы linux. Этот каталог добавляется при использовании multimachine возможности OpenEmbedded. Эта возможность позволяет использовать один рабочий каталог при сборке под множество целевых платформ и "родные" пакеты, пакеты нейтральные к архитектуре и пакеты совпадающих по архитектуре ( к примеру разные целевые платформы, с одинаковой архитектурой процессора). Ее подключение производится на уровне дистрибутива. Хотя в этой главе эта возможность не используется, но стоит помнить о ней если ее использует используемый вами дистрибутив.

Рассмотрим каталог lzo 1.08 в качестве примера содержимого рабочего каталога типичного рецепта:

~%> find tmp/work/lzo-1.08-r14 -maxdepth 1
tmp/work/lzo-1.08-r14
tmp/work/lzo-1.08-r14/temp
tmp/work/lzo-1.08-r14/lzo-1.08
tmp/work/lzo-1.08-r14/install
tmp/work/lzo-1.08-r14/image

Каталог, tmp/work/lzo-1.08-r14, это "рабочий каталог" рецепта, он указывается в параметре WORKDIR bitbake. В некоторых рецептах этот параметр используется напрямую для обращения к рабочему каталогу. Как было сказано выше 1.08 это версия приложения lzo, а r14 номер релиза определяемый в рецепте параметром PR

Рабочий каталог(WORKDIR) включает в себя следующие подкаталоги:

temp

Каталог содержит логи и иногда скрипты для решения специфических задач. К примеру скрипт настройки или скрипт компиляции исходных файлов.

Если что-то при сборке пойдет не так, то первым делом стоит просмотреть логи в этом каталоге.

Скрипты можно использовать для просмотра того как производится настройка или сборка.

lzo-1.08

Каталог с исходными кодами, создается в момент распаковки архива. Его имя и содержимое зависит от того каким образом упакован исходный код. В рецептах к этому каталогу можно обратиться через параметр S, обычно он выглядит как "<name>-<version>". Если исходный код распаковывается в отличный от такого именования каталог, то для соответствия необходимо изменить параметр S.

image

Каталог image (или каталог назначения) используется для установки приложения и дальнейшей его упаковки в пакет. К этому каталогу в рецепте можно обратиться через параметр D. К примеру если установка исполняемых файлов идет в /usr/bin, а библиотек в /usr/lib, то вместо этого необходимо произвести установку в ${D}/usr/bin и ${D}/usr/lib. При установке на целевой платформе ${D} не учитывается и в результате установка производится корректно.

install

Каталог install используется для разделения установленных файлов в разные пакеты. Создается по одному подкаталогу на пакет, в каждый из которых размещаются файлы из каталога image (D) для последующей упаковки. По умолчанию автоматически создаются следующие пакеты: пакет документации (-doc), отладочный (-dbg) пакет, пакет для разработки (-dev). В рецепте используются параметры FILES_ и PACKAGES для указания каким образом произвести разделение приложения на отдельные пакеты.

Несколько примеров работы с рабочим каталогом рецепта.

Как проверить что случилось при настройке сборки lzo? Для этого необходимо проверить лог настройки в каталоге temp:

~%> less tmp/work/lzo-1.08-r14/temp/log.do_configure.*
...
checking whether ccache sh4-linux-gcc -ml -m4 suffers the -fschedule-insns bug... unknown
checking whether ccache sh4-linux-gcc -ml -m4 suffers the -fstrength-reduce bug... unknown
checking whether ccache sh4-linux-gcc -ml -m4 accepts -fstrict-aliasing... yes
checking the alignment of the assembler... 0
checking whether to build assembler versions... no
configure: creating ./config.status
config.status: creating Makefile
config.status: creating examples/Makefile
config.status: creating include/Makefile
config.status: creating ltest/Makefile
config.status: creating minilzo/Makefile
config.status: creating src/Makefile
config.status: creating tests/Makefile
config.status: creating config.h
config.status: executing depfiles commands

Как проверить распределение файлов в пакеты упаковкой? Просмотреть разделение в каталоге install:

~%> find tmp/work/lzo-1.08-r14/install                
tmp/work/lzo-1.08-r14/install
tmp/work/lzo-1.08-r14/install/lzo-doc
tmp/work/lzo-1.08-r14/install/lzo-dbg
tmp/work/lzo-1.08-r14/install/lzo-dbg/usr
tmp/work/lzo-1.08-r14/install/lzo-dbg/usr/lib
tmp/work/lzo-1.08-r14/install/lzo-dbg/usr/lib/.debug
tmp/work/lzo-1.08-r14/install/lzo-dbg/usr/lib/.debug/liblzo.so.1.0.0
tmp/work/lzo-1.08-r14/install/lzo-dev
tmp/work/lzo-1.08-r14/install/lzo-dev/usr
tmp/work/lzo-1.08-r14/install/lzo-dev/usr/include
tmp/work/lzo-1.08-r14/install/lzo-dev/usr/include/lzo2a.h
tmp/work/lzo-1.08-r14/install/lzo-dev/usr/include/lzo1y.h
tmp/work/lzo-1.08-r14/install/lzo-dev/usr/include/lzo1.h
tmp/work/lzo-1.08-r14/install/lzo-dev/usr/include/lzo1b.h
tmp/work/lzo-1.08-r14/install/lzo-dev/usr/include/lzo1f.h
tmp/work/lzo-1.08-r14/install/lzo-dev/usr/include/lzoconf.h
tmp/work/lzo-1.08-r14/install/lzo-dev/usr/include/lzo1x.h
tmp/work/lzo-1.08-r14/install/lzo-dev/usr/include/lzo16bit.h
tmp/work/lzo-1.08-r14/install/lzo-dev/usr/include/lzo1a.h
tmp/work/lzo-1.08-r14/install/lzo-dev/usr/include/lzo1z.h
tmp/work/lzo-1.08-r14/install/lzo-dev/usr/include/lzoutil.h
tmp/work/lzo-1.08-r14/install/lzo-dev/usr/include/lzo1c.h
tmp/work/lzo-1.08-r14/install/lzo-dev/usr/lib
tmp/work/lzo-1.08-r14/install/lzo-dev/usr/lib/liblzo.a
tmp/work/lzo-1.08-r14/install/lzo-dev/usr/lib/liblzo.so
tmp/work/lzo-1.08-r14/install/lzo-dev/usr/lib/liblzo.la
tmp/work/lzo-1.08-r14/install/lzo.shlibdeps
tmp/work/lzo-1.08-r14/install/lzo-locale
tmp/work/lzo-1.08-r14/install/lzo
tmp/work/lzo-1.08-r14/install/lzo/usr
tmp/work/lzo-1.08-r14/install/lzo/usr/lib
tmp/work/lzo-1.08-r14/install/lzo/usr/lib/liblzo.so.1
tmp/work/lzo-1.08-r14/install/lzo/usr/lib/liblzo.so.1.0.0