
- •Реферат
- •Содержание
- •Введение
- •Базовые инструменты Linux Shell и Make
- •1.1 Скриптовый язык Shell
- •1.2 Утилита Make
- •2.Встраиваемые системы на базе Linux
- •3. Описание структуры пакета Buildroot
- •3.1 Переменные BuildPackage
- •Блоки define BuildPackage
- •4. Пример пакета Openwrt
- •Заключение
- •Список использованных источников
- •Пример package/bridge/Makefile
- •Шаблон сценария makefile
3. Описание структуры пакета Buildroot
Одну из целей, которую можно достичь с помощью системы шаблонов OpenWrt, было желание сделать процесс портирования программного обеспечения под OpenWrt максимально простым. Посмотрите на обычный каталог пакета в OpenWrt можно найти две составляющие:
package/Makefile
package/patches
Каталог patches не является обязательным и обычно содержит исправления ошибок или оптимизацию размера исполняемого файла. Makefile пакета является важной составляющей и описывает шаги необходимые чтобы получить исходный код и скомпилировать пакет.
Глядя на Makefile из какого либо пакета, вряд ли можно узнать в нем обычный Makefile. Это может быть охарактеризовано как вопиющее пренебрежение и жестокое обращение с традиционным форматом make, однако, преобразование Makefile пакета в объектно-ориентированный шаблон позволило упростить весь процесс портирования приложений.
Приведем пример package/bridge/Makefile: (См. Приложение 1)
3.1 Переменные BuildPackage
Как можно заметить, необходимо сделать совсем не много. Все скрыто в других make-файлах и нужно только определить несколько переменных.
PKG_NAME -Название пакета, которое будет видно в конфигурационном меню и ipkg
PKG_VERSION -Версия пакета, которую необходимо загрузить из репозитория проекта
PKG_RELEASE -Версия данного Makefile
PKG_BUILD_DIR -Каталог для сборки пакета
PKG_SOURCE -Названия архива с исходным кодом
PKG_SOURCE_URL -Адрес, с которого необходимо загрузить архив с исходным кодом
PKG_MD5SUM -Контрольная сумма архива с исходным кодом
PKG_CAT -Метод разархивирования исходного кода (zcat, bzcat, unzip)
PKG_BUILD_DEPENDS -Пакеты, которые необходимо собрать перед сборкой данного пакета (не используются во время работы на устройстве).
Переменные PKG_* определяют откуда загружать исходный код; @SF - это ключевое слово для загрузки исходников с sourceforge. Контрольная сумма md5sum используется для проверки корректности загрузки архива, а PKG_BUILD_DIR определяет где находится исходный код после разархивирования полученного архива в $(BUILD_DIR).
В конце файла происходит настоящее волшебство: функция "BuildPackage" настраивает процесс сборки пакета на основании ранее определенных переменных. BuildPackage принимает только один аргумент напрямую - имя пакета, который будет собран, в данном случае "bridge". Вся остальная информация берется из блоков define. Это способ позволяет обеспечить необходимый уровень читаемости кода, как следствие остается ясным значение переменной DESCRIPTION в Package/bridge, а не теряется как в случае, если бы мы передали эту информацию непосредственно в N-ый аргумент BuildPackage.
Блоки define BuildPackage
Package/
соответствует аргументу передоваемому в buildroot, описание пакета
для menuconfig и ipkg. В блоке Package/ вы можете определить
следующие переменные:
SECTION - Тип пакета (в данный момент не используется)
CATEGORY - В каком пункте menuconfig отображать данный пакет
TITLE - Краткое описание пакета
DESCRIPTION - (устарело) Полное описание пакета
URL - Ссылка на сайт пакета
MAINTAINER - (опционально) Кто поддерживает пакет
DEPENDS - (опционально) Какие пакеты должны быть собраны и установлены перед текущим пакетом
Package/conffiles
Перечень конфигурационных файлов устанавливаемых данным пакетом, каждый файл на отдельной строке.
Package/description
Полное описание пакета
Build/Prepare
Перечень команд необходимых для разархивирования и наложения патчей на исходный код. Можно не определять.
Build/Configure
Можно не определять, если не используется configure или есть
стандартный конфигурационный скрипт, иначе можно прописать необходимые команды или использовать
"$(call Build/Configure/Default,)" чтобы передать дополнительные
параметры стандартному конфигурационному скрипту.
Build/Compile
Перечень команд необходимых для компиляции исходного кода; в большинстве случаев не нужно определять.
Package/install
Перечень команд необходимых для копирования собранных файлов в ipkg,
который представлен как директория $(1).
Package/preinst
Текст скрипта выполняемого перед установкой. Не забудьте
написать #!/bin/sh. Если необхомо прервать установку, скрипт должен вернуть false.
Package/postinst
Текст скрипта выполняемого после установки. Не забудьте
написать #!/bin/sh.
Package/prerm
Текст скрипта выполняемого перед удалением. Не забудьте
написать #!/bin/sh. Если необхомо прервать удаление, скрипт должен вернуть false.
Package/postrm
Текст скрипта выполняемого после удаления. Не забудьте
написать #!/bin/sh . /7/