Краткий обзор
Yocto Project – это совместный Open Source-проект разработки шаблонов, инструментов и методов для создания специальных дистрибутивов Linux для встраиваемых систем на базе различных аппаратных архитектур (yocto означает наименьшую единицу измерения в системе СИ, равную 10^-24).
В этой статье даются пошаговые инструкции для начала работы с инструментами Yocto Project, соответствующими промышленным стандартам и позволяющими создавать собственные дистрибутивы Linux для встроенных устройств и запустить операционную систему на виртуальной машине при помощи QEMU. Проект Yocto Project поддерживается организацией Linux Foundation и финансируется многими известными компаниями-производителями оборудования и программного обеспечения; этот проект развивает инструменты, методы и метаданные для создания Linux-систем, соответствующие промышленным стандартам.
В связке с проектом OpenEmbedded поддерживаются два основных компонента проекта Yocto: система сборки BitBake и ядро OpenEmbedded-Core, состоящее из наборов команд ("рецептов"), необходимых в процессе сборки. Все компоненты проекта описываются в следующем разделе.
Знакомство с Yocto Project
Будучи проектом совместного сотрудничества (иногда такие проекты называются "зонтичными"), Yocto Project охватывает различные составляющие процесса разработки. Эти составляющие именуются проектамив рамках общего проекта Yocto Project и включают в себя инструменты для сборки, метаданные инструкций по сборке (называемые рецептами), библиотеки, утилиты и графические интерфейсы.
Poky
Poky – это эталонная система сборки в рамках проекта Yocto Project. Она включает в себя BitBake, OpenEmbedded-Core, пакет поддержки платформы (Board Support Package, BSP), а также прочие пакеты и компоненты, объединенные в единую сборку. Название Poky также относится к эталонному дистрибутиву Linux, который создается этой системой сборки и может быть чрезвычайно минималистичным (core-image-minimal) или же представлять собой полноценную систему Linux с графической оболочкой (core-image-sato).
Систему сборки Poky можно рассматривать как эталонную систему для всего проекта – рабочий пример реального процесса. При загрузке Yocto Project фактически вы получаете экземпляр этих инструментов, утилит, библиотек, вспомогательных средств и метаданных, которые можно использовать для создания системы по умолчанию, как это описывается в нашей статье. Как эталонная система, так и эталонный дистрибутив, который она создает, называются Poky. Вы можете использовать Poky как начальную точку для создания ваших собственных дистрибутивов, которые, конечно же, могут называться как угодно.
Для всех систем сборки требуется наличие инструментария toolchain, состоящего из компилятора, ассемблера, линковщика и прочих двоичных утилит, необходимых для создания исполняемых файлов для той или иной архитектуры. Poky использует набор GNU Compiler Collection (GCC), но вы можете указать и другие наборы компиляторов. В Poky используется механизм кросс-компиляции: использование набора компиляторов одной архитектуры для создания исполняемых файлов другой архитектуры (например, сборка ARM-дистрибутива, выполняемая на компьютере с x86-архитектурой). Разработчики часто используют кросс-компиляцию при разработке встраиваемых систем, поскольку их рабочие компьютеры намного мощнее, чем типичная встраиваемая система.
Набор метаданных
Набор метаданных разделен на слои, каждый из которых обладает дополнительной функциональностью по отношению к нижележащим слоям. Базовый слой называется OpenEmbedded-Core (или oe-core
) и содержит общие рецепты, классы и связанные с ними функции, необходимые для любой сборки. Эти сборки впоследствии можно настраивать под собственные нужды, добавляя новые слои поверх слоя oe-core
.
OpenEmbedded-Core совместно поддерживается проектами Yocto Project и OpenEmbedded. Слой, отделяющий проект Yocto Project от проекта OpenEmbedded, называется meta-yocto
и содержит конфигурацию дистрибутива Poky, а также базовый набор эталонных BSP-пакетов.
Сам по себе проект OpenEmbedded является отдельным Open Source-проектом, обладающим собственными схожими рецептами и задачами, но со своей отдельной командой руководителей и областью применения.
Пакеты поддержки платформы (BSP)
Пакет поддержки платформы содержит пакеты и драйверы, необходимые для создания Linux-дистрибутива для определенной платформы или архитектуры. Эти пакеты часто поддерживаются производителями компьютерного оборудования. BSP-пакеты являются интерфейсом между операционной системой Linux и аппаратной частью, на которой она запускается. Заметим, что можно также создавать BSP для виртуальных машин.
BitBake
BitBake – это система сборки. Она считывает рецепты (определенные наборы инструкций) и следует им – скачивает необходимые пакеты, компилирует их и создает результирующие загрузочные образы. BitBake совместно поддерживается проектами Yocto Project и OpenEmbedded.
Hob
Для упрощения процесса разработки Linux для встраиваемых устройств в проекте Yocto Project было реализовано несколько различных методов, позволяющих работать с графической средой. Относительно новым дополнением к проекту является Hob. Это дополнение предоставляет в распоряжение разработчиков графический пользовательский интерфейс для BitBake, т. е. для процесса сборки. Оба этих компонента постоянно развиваются с учетом отзывов пользователей.
Соответствие условиям лицензирования Open Source
Соответствие лицензиям Open Source является чрезвычайно важной частью любой разработки Linux. Одна из целей проекта Yocto Project заключается в том, чтобы максимально упростить это соответствие. С помощью Yocto Project можно довольно просто создавать манифесты и даже целые репозитории исходных кодов, а также исключать в процессе создания дистрибутивов те пакеты, которые требуют использования отдельных лицензий. Проект работает с организацией Linux Foundation по ее программе Open Compliance Program в соответствии со спецификацией Software Package Data Exchange® (SPDX™).
EGLIBC
Embedded GLIBC (EGLIBC) – это вариант библиотеки GNU C Library (GLIBC), который был разработан для использования во встраиваемых системах. Особенностями EGLIBC являются меньший объем, настраиваемые компоненты и улучшенная поддержка кросс-компиляции и кросс-тестирования. EGLIBC входит в состав Yocto Project, но поддерживается своей собственной руководящей командой.
Инструментарий для разработки приложений
Инструментарий для разработки приложений (Application Development Toolkit, ADT) позволяет разработчикам систем включать наборы SDK в создаваемые ими дистрибутивы с помощью инструментов Yocto Project. Впоследствии эти наборы SDK могут использовать сторонние разработчики для создания приложений для этих дистрибутивов. В состав ADT входят инструменты кросс-компиляции, утилиты для отладки и анализа производительности, а также сценарии эмуляции и поддержки QEMU. Кроме того в ADT включен подключаемый модуль Eclipse, который могут использовать те, кто предпочитает работать в интегрированной среде разработки (IDE).
Другие утилиты из состава проекта Yocto Project
В состав Yocto Project также входят следующие инструменты:
- Autobuilder: предназначен для автоматизации тестов и оценки качества продуктов, развиваемых на базе Yocto Project.
- Cross-Prelink: предназначен для предварительной компоновки в средах, использующих кросс-компиляцию, что позволяет повысить производительность программ.
- Pseudo: эмулирует доступ от имени пользователя root, что необходимо при создании конечного загрузочного образа.
- Swabber: определяет, не содержит ли сборка, выполненная с использованием кросс-компиляции, компоненты хостовой системы.
- Build Appliance: это виртуальная машина, в которой запущен Hob; позволяет получить представление о Yocto Project из первых рук тем, кто создает сборки на компьютерах под управлением операционной системы, отличной от Linux (Примечание: на сегодняшний день инструменты сборки Yocto Project можно использовать только в ОС Linux).
Руководство и сообщество проекта
Одним из жизненно важных составляющих любого Open Source-проекта является сообщество пользователей, которое разрабатывает и поддерживает этот проект. Сообщество Yocto Project состоит из организаций, включая производителей оборудования и операционных систем, а также разработчиков электроники (это означает, что в проекте задействованы все разработчики встраиваемых систем), и из отдельных людей, в том числе, сотрудников этих организаций.
Руководство проектом осуществляется главным архитектором, а также ключевыми специалистами по поддержке и техническими специалистами, принимающими все технические решения. Компании-участники проекта, которые зачастую конкурируют между собой, объединены в совместный консультативный совет проекта, задачей которого, как следует из названия, являются совещательные и консультативные функции. Совет управляет всеми ресурсами проекта, включая инфраструктуру, продвижение и поддержку, а также финансирование.
Создание дистрибутива Linux
В этом разделе рассказывается, как создать базовый дистрибутив встраиваемой Linux-системы (эталонную сборку системы) с помощью Poky. Будут рассмотрены создание эталонного дистрибутива, а также все необходимые для этого инструменты. Если вы не хотите самостоятельно выполнять компиляцию, то загрузите предварительно собранные двоичные файлы. Детальную информацию вы найдете в руководстве Yocto Project Quick Start Guide (см. раздел Ресурсы).
Сами инструменты доступны только для платформы Linux, в частности, для Ubuntu, Fedora, CentOS и openSUSE. Заметим, что официальная поддержка инструментов в некоторых из этих дистрибутивов еще не заявлена, хотя обычно все хорошо работает, причем не только в этих дистрибутивах.
Если на вашем компьютере не установлена ОС Linux или если вы просто хотите попробовать поработать с Yocto Project, ничего не устанавливая, то загрузите виртуальную машину Yocto Project Build Appliance. Эта виртуальная машина содержит готовую к работе последнюю официальную версию Yocto Project и может запускаться в среде VMWare Player или VirtualBox; при загрузке образа вы сразу получите доступ к графическому интерфейсу HOB. При использовании Build Appliance большинство описываемых здесь действий выполнять не требуется, и можно сразу перейти к разделу Приступаем к работе с Hob. Однако я рекомендую прочесть предыдущие разделы, чтобы лучше разобраться, как работает Hob. Документацию по Hob вы также можете найти на Web-сайте Yocto Project (см. раздел Ресурсы).
Загрузка инструментов Yocto Project
Загрузить инструменты Yocto Project можно одним из следующих способов. Убедитесь, что на жестком диске вашего компьютера свободно, как минимум, 50 Гбайт (рекомендуется 100 Гбайт).
- Можно загрузить
tar
файл с последней протестированной версией Yocto Project со страницы загрузки проекта. Загрузитеtar
файл и распакуйте его в отдельную директорию, как показано в листинге 1.Листинг 1. Загрузка poky
$ wget \ http://downloads.yoctoproject.org/releases/yocto/yocto-1.2/poky-denzil-7.0.tar.bz2 $ tar xjf poky-denzil-7.0.tar.bz2 $ cd poky-denzil-7.0
- Можно получить последнюю версию (или любую отдельную ветку) при помощи
git
, хотя главная ветка разработки может оказаться менее стабильной по сравнению с протестированной версией, содержащейся вtar
файле. В листинге 2 показано, как загрузить последнюю версию poky при помощиgit
.Листинг 2. Загрузка poky при помощи git
$ git clone git://git.yoctoproject.org/poky.git $ cd poky
Заметим, что в этом случае поддиректория называется просто
poky
и не содержит номера версии, поскольку она может быть обновлена с помощьюgit
в любое время.
Инициализация рабочего окружения
Для инициализации рабочего окружения выполните следующие действия:
Сначала инсталлируйте все необходимые пакеты из репозитория программного обеспечения вашего компьютера. Если вы уже занимались разработкой программного обеспечения, то основная часть требуемых пакетов может быть уже инсталлирована. В листингах 3-6 показано, как инсталлировать требуемые пакеты в различных дистрибутивах.
Листинг 3. Установка зависимостей в Ubuntu
$ sudo apt-get install sed wget subversion git-core coreutils \ unzip texi2html texinfo libsdl1.2-dev docbook-utils fop gawk \ python-pysqlite2 diffstat make gcc build-essential xsltproc \ g++ desktop-file-utils chrpath libgl1-mesa-dev libglu1-mesa-dev \ autoconf automake groff libtool xterm libxml-parser-perl
Листинг 4. Установка зависимостей в Fedora
$ sudo yum groupinstall "development tools" $ sudo yum install python m4 make wget curl ftp tar bzip2 gzip \ unzip perl texinfo texi2html diffstat openjade \ docbook-style-dsssl sed docbook-style-xsl docbook-dtds fop xsltproc \ docbook-utils sed bc eglibc-devel ccache pcre pcre-devel quilt \ groff linuxdoc-tools patch cmake \ perl-ExtUtils-MakeMaker tcl-devel gettext chrpath ncurses apr \ SDL-devel mesa-libGL-devel mesa-libGLU-devel gnome-doc-utils \ autoconf automake libtool xterm
Листинг 5. Установка зависимостей в CentOS
$ sudo yum -y groupinstall "development tools" $ sudo yum -y install tetex gawk sqlite-devel vim-common redhat-lsb xz \ m4 make wget curl ftp tar bzip2 gzip python-devel \ unzip perl texinfo texi2html diffstat openjade zlib-devel \ docbook-style-dsssl sed docbook-style-xsl docbook-dtds \ docbook-utils bc glibc-devel pcre pcre-devel \ groff linuxdoc-tools patch cmake \ tcl-devel gettext ncurses apr \ SDL-devel mesa-libGL-devel mesa-libGLU-devel gnome-doc-utils \ autoconf automake libtool xterm
Листинг 6. Установка зависимостей в openSUSE
$ sudo zypper install python gcc gcc-c++ libtool fop \ subversion git chrpath automake make wget xsltproc \ diffstat texinfo freeglut-devel libSDL-devel
Задайте значения переменных окружения командной оболочки с помощью входящего в состав поставки сценария. После выполнения этого сценария вашей рабочей директорией будет поддиректория
build
, из которой вы сможете запускать вашу сборку.$ cd poky $ . ./oe-init-build-env
Проверьте главный конфигурационный файл (conf/local.conf). По умолчанию этот конфигурационный файл создает образ для
qemux86
, т. е. экземпляр QEMU с эмуляцией 32-разрядного процессора x86. Если у вас многопроцессорный компьютер, то я настоятельно рекомендую раскомментировать следующие параметры, связанные с параллельной обработкой, для ускорения процесса сборки. На этом шаге задайте значения этих параметров, равными двукратному числу ядер процессора (например, 8 для 4-ядерного процессора).BB_NUMBER_THREADS = "8" PARALLEL_MAKE = "-j 8"
Создание начального образа
Для создания инструментария кросс-компиляции и других необходимых инструментов при создании начального образа задействуется компилятор хостовой системы. Кроме того, BitBake выполнит загрузку всех необходимых пакетов, что также займет какое-то время. По завершении готовые образы будут помещены в поддиректорию tmp/deploy/images.
Листинг 7. Начальные образы
$ ls tmp/deploy/images bzImage-3.2.11+gi...1.bin bzImage-qemux86.bin core-image-minimal-qemux86-20120506194741.rootfs.ext3 core-image-minimal-qemux86-20120506194741.rootfs.tar.bz2 core-image-minimal-qemux86.ext3 core-image-minimal-qemux86.tar.bz2 modules-3.2.11-yocto-standard-r1-qemux86.tgz README_-_DO_NOT_DELETE_FILES_IN_THIS_DIRECTORY.txt
Посмотрите также файл tmp/deploy/IMAGE/license.manifest. Этот файл содержит полный список всех лицензий, использованных при создании образа.
Загрузка созданного образа
После того, как образ создан, его можно загрузить его в эмуляторе QEMU в виде 32-разрядной виртуальной машины с архитектурой x86. Для этого просто выполните следующую команду:
$ runqemu qemux86
Вы можете войти в систему на виртуальной машине под учетной записью пользователя root
с пустым паролем. Поздравляю! Вы только что создали образ встраиваемой Linux-системы.
Вы можете вносить различные изменения в исходный образ и в пакеты, которые включены в него, а также в сам процесс. Система сборки написана на языке Python и хорошо документирована.
Приступаем к работе с Hob
Hob – это графическая оболочка, которая помогает автоматизировать некоторые процессы, описанные ранее. Задача Hob заключается в обеспечении наглядности работы при создании образа, а также в упрощении понимания этого процесса. Фактически Hob является пользовательским интерфейсом BitBake, поэтому все, что можно сделать в Hob, можно также сделать при помощи командной строки и сценариев. Тем не менее, Hob позволяет наглядно увидеть, какие именно пакеты будут включены в финальный образ. Другие возможности Hob – изменение существующих образов, сохранение настроенных образов в качестве шаблонов, запуск образов с помощью QEMU и развертывание образов на USB-носители для последующей загрузки с них конечных устройств. Сейчас для Hob разрабатывается ряд новых возможностей, которые улучшат функциональность и удобство работы.
Для запуска Hob просто наберите hob
из рабочей директории, и откроется главный экран приложения. Начнем с выбора архитектуры (в нашем случае это архитектура qemux86
). После этого Hob выполнит разбор доступных инструкций ("рецептов"), как показано на рисунке 1.
Рисунок 1. Конфигурирование образа в Hob
После этого можно выбрать базовый образ (в нашем предыдущем примере это была сборка core-image-minimal
, поэтому ее двоичные файлы уже существуют). Выберите minimal
и щелкните View recipes или View packages. В последнем случае вы увидите список, изображенный на рисунке 2. Здесь вы можете установить или снять флажки для включения (или, соответственно, удаления) в сборку тех или иных пакетов. Для сортировки по определенному столбцу щелкните на его заголовок.
Рисунок 2. Список пакетов в Hob
Обратите внимание на то, что на вкладке Packages пакет Python не включен в минимальную сборку. Вы можете добавить его, просто установив флажок напротив пакета python-2.7.2-r2.14
, как показано на рисунке 3. При этом автоматически будут выбраны все его зависимости и дочерние пакеты.
Рисунок 3. Добавление пакетов в Hob
Щелкните Build image и наблюдайте за процессом создания нового образа с выбранными параметрами. В процессе создания образа вы можете следить за сообщениями о работе, а сообщения об ошибках выводятся на вкладке Issues.
Когда ваш образ будет готов, можно запустить его в эмуляторе QEMU, просто щелкнув Run Image, как показано на рисунке 4.
Рисунок 4. Информация об образе в Hob
Сейчас можно проверить, действительно ли пакет Python был включен в сборку (рис. 5).
Рисунок 5. Проверка добавленного пакета
Дополнительную информацию, руководства и видеоматериалы вы можете найти на Web-сайте Yocto Project (см. раздел Ресурсы).
Заключение
Для освоения инструментов Yocto Project потребуется некоторое время, но оно не будет потрачено зря! Гибкость работы, переносимые конфигурации и мощные опции настройки инструментов позволяют настраивать каждый этап процесса сборки. Проект Yocto Project является коммерческим – он разработан и используется профессиональными разработчиками встраиваемых систем. На момент написания этой статьи некоторые производители утилит для операционных систем уже начали ориентировать свои продукты на работу с Yocto Project. Вы можете попробовать использовать инструменты из этого проекта, и если они вам понравится, то присоединяйтесь к сообществу.
Ресурсы
Научиться
- Оригинал статьи: Build custom embedded Linux distributions with the Yocto Project (EN).
- Подробное пошаговое руководство The Yocto Project Quick Start (EN) поможет вам начать работу с Yocto Project.
- Рабочая группа Linux Foundation SPDX (EN) входит в состав проекта Open Compliance Program, задачей которого является предоставить компаниям и проектам возможность простого обмена информацией о лицензиях и компонентах, что позволит соблюдать все условия лицензионных соглашений.
Получить продукты и технологии
- На Web-сайте Yocto Project (EN) вы найдете официальную документацию, описание, видеоматериалы, слайды видеоконференций и доклады, посвященные Yocto Project, а также информацию о руководстве проекта.
- Виртуальная машина Yocto Project Build Appliance (EN) поможет вам испытать Yocto Project в действии без необходимости установки какого-либо программного обеспечения.
- Библиотека EGLIBC (EN) – это версия библиотеки GLIBC (GNU C library), разработанная для использования во встраиваемых системах. Библиотека EGLIBC является частью проекта Yocto Project.
Обсудить
- Следите за блогом developerWorks в Твиттере или подпишитесь на твиты Linux на сайте developerWorks (EN).
Комментарии
-
Bluemix
Узнайте больше информации о платформе IBM Bluemix, создавайте приложения, используя готовые решения!
-
Новости IBM developerWorks
Подпишитесь на рассылку, чтобы еженедельно получать анонсы новых статей IBM developerWorks.
-
Библиотека документов
Более трех тысяч статей, обзоров, руководств и других полезных материалов.