Глава 7. Использование bitbake и OpenEmbedded

Содержание

Введение
Настройка
Рабочая область
Рабочий каталог (tmp/work)
Задачи
Работа с рецептом
Интерактивный bitbake
Devshell
devshell через подключение
devshell дополнение
Работа с devshell
Применение патчей и управление ими

Введение

Если вы дошли до этой главы, то, возможно, понимаете, что OpenEmbedded использует много различных инструментов для сборки приложений под платформу, отличную от вашей. Это требует множества действий, таких как загрузка исходных кодов, сборка, создание устрановочных пакетов (аналогичных .deb или .rpm) и загрузочных образов для записи в flash-память устройства. Дополнительную сложность вносит необходимость кросс-компиляции и поддержки множества различных платформ. Из-за этого дистрибутивы на базе OpenEmbedded более сложны, чем обычные дистрибутивы.

Большая часть работы OpenEmbedded касается сборки исходного кода приложений. Для каждого из них обычно необходимо выполнить следующие задачи:

  1. Загрузка исходного кода и дополнительных файлов (к примеру, init.d скриптов);

  2. Распаковка архивов с исходными кодами и применение необходимых патчей;

  3. Настройка сборки приложения, если это необходимо (к примеру запуск скрипта настройки);

  4. Сборка;

  5. Создание установочного пакета в формате .deb, .rpm, .ipk или в другом аналогичном.

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

  1. Кросс-компиляция. Многие приложения не поддерживают кросс-компиляцию, но все приложения включенные в репозиторий OpenEmbedded поддерживают ее;

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

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

OpenEmbedded позволяет существенно больше чем просто сборка приложений. К примеру OpenEmbedded включает в себя:

  • Поддержку сборки как с glibc, так и с uclibc библиотеками;

  • Поддержку сборки для множества различных платформ при помощи одной кодовой базы;

  • Автоматическую сборку необходимых приложению зависимостей для его сборки или запуска;

  • Создание образов в любом из доступных форматов (jffs2, ext2.gz, squashfs и прочие) для загрузки на целевой платформе;

  • Поддержку различных форматов установочных пакетов;

  • Автоматическую сборку необходимых для кросс-компиляции инструментариев сборки;

  • Поддержку "родных" пакетов для платформы сборки, используемых в процессе сборки приложений под целевую платформу;

Далее в главе подразумевается, что вы изучили главу "Первые шаги" и необходимое рабочее окружение настроено и необходимый инструментарий сборки кросс-компиляции собран и работоспособен.

Если вам незнакомы переменные, определяющие определенные каталоги или изменяющие поведение процесса сборки ознакомьтесь с главой Recipes chapter.