Добавление ПО в SDK

Материал из virt2real wiki
Перейти к: навигация, поиск

В данном руководстве будет описано добавление ПО в систему сборки buildroot для Virt2real SDK. Предполагается, что добавляемые пакеты используют autotools для конфигурирования сборки ПО, в противном случае эта процедура рискует быть весьма нетривиальной.

Попробуем это сделать на примере sox (особо нетерпеливые могут посмотреть эту дельту)

Добавление пакета

Для добавления ПО потребуются два файла - файл описания и файл правил сборки. Эти два файла должны располагаться в отдельной директории в каталоге package репозитория v2r_buildroot, который вы клонировали во время установки SDK.

Примечание: В нашем случае sox относится к мультимедиа-пакетам, поэтому он размещен в каталоге package/multimedia, а не просто в package. Если вы добавляете пакет в основную папку - обратите внимание на правильность всех файловых ссылок.

cd package/multimedia
mkdir sox
cd sox

Теперь разместим в полученном каталоге вышеупомянутые файлы. Файл Config.in с описанием будет выглядеть вот так:

config BR2_PACKAGE_SOX
	bool "sox"
	select BR2_PACKAGE_LIBMAD
	select BR2_PACKAGE_LIBID3TAG
	select BR2_PACKAGE_LIBVORBIS
	select BR2_PACKAGE_FLAC
	help
	 SoX is a command line utility that can convert various formats
	 of computer audio files in to other formats. It can also apply
	 various effects to these sound files during the conversion.
	 As an added bonus, SoX can play and record audio files on
	 several unix-style platforms.

	 http://sox.sourceforge.net/

где

  • BR2_PACKAGE_SOX - служебное название пакета (оно будет использоваться в файле конфигурации);
  • bool указывает на то, что пакет может быть либо включен в состав, либо нет;
  • select BR2_PACKAGE_... показывает, какие пакеты должны быть автоматически выбраны в случае выбора данного пакета для удовлетворения зависимостей (есть еще опция require, которая налагает условие включения данного пакета если выбраны все зависимые, но не включает их автоматически);
  • help - то, что отображается при выборе кнопки "Помощь" меню конфигурации на данном пакете.

Теперь добавим файл sox.mk, в котором опишем правила сборки пакета (комментарии опущены):

SOX_VERSION = 14.4.1
SOX_SITE = http://downloads.sourceforge.net/project/sox/sox/$(SOX_VERSION)
SOX_SOURCE = sox-$(SOX_VERSION).tar.bz2
SOX_CONF_OPT += --disable-external-gsm

$(eval $(autotools-package))

где полно переменных с префиксом SOX, а последняя строка определяет, что пакет будет собран при помощи autotools. Параметры имеют следующие назначения:

  • _VERSION - версия ПО, которая зачастую используется для получения архива с исходным кодом;
  • _SITE - URL (без имени файла), откуда будет скачан этот архив;
  • _SOURCE - имя архива;
  • _CONF_OPT - дополнительные параметры ./configure (дополнительные потому что используется +=).

Таким образом buildroot сформирует на основе переменных URL, откуда будет скачан архив с исходным текстом, распакован в каталог output/build и запущена система автонастройки и последующей сборки, а затем и установки в output/target.

Окей, файлы подготовлены, теперь осталось добавить ссылку на наш Config.in в такой же, но в родительском каталоге. Открываем его на редактирование и добавляем строчку

source "package/multimedia/sox/Config.in"

Однако, зачастую, пакет может не собраться напрямую из исходного кода. Причин тому может быть множество, одна из них - несовершенство этого мира. Так, в нашем случае даже при наличии обоих файлов и правильно поставленной ссылке на описание все равно во время компиляции будет выдана ошибка из-за несовместимости sox и ucLib, используемой в buildroot. Эта ситуация предусмотрена buildroot - если в каталоге с описанием пакета будут находится файлы с расширением .patch, то они будут применены к исходному коду после распаковки, но до компиляции. Таким образом итоговый пакет состоит из файла описания, файла правил сборки и набора патчей, позволяющих ПО нормально собираться и функционировать в рамках используемой системы. В нашем примере такой файл format_c_uclib.patch как раз устраняет вышеупомянутую ошибку.

Для создания патчей (только для настоящих индейцев) можно использовать команду

diff -rupN исходный_каталог каталог_с_исправленным_кодом > my_cool_patch.patch

Описание добавления пакетов Builroot

Официальная документация