Создание специальных дистрибутивов Linux для встраиваемых систем с помощью Yocto Project

Профессиональные Open Source-инструменты для разработки Linux для встраиваемых систем

The Yocto Project™ – это Open Source-проект, целью которого является упрощение разработки специальных дистрибутивов Linux для встраиваемых систем и обеспечение их переносимости между различными платформами. В этой статье рассказывается о Yocto Project и даются подробные пошаговые инструкции для тех, кто хочет начать использовать Yocto.

Джеффри M. Осье-Миксон, технический писатель, MontaVista Software, Inc.

Jeffrey Osier-MixonДжеффри М. Осье-Миксон (Jeffrey Osier-Mixon) — технический писатель, пропагандист программного обеспечения с открытым исходным кодом и менеджер сообщества. Он ведет блог об открытом ПО и сообщество Meld по встраиваемому Linux, а также выступает на конференциях по Linux.



16.01.2013

Краткий обзор

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 в любое время.

Инициализация рабочего окружения

Для инициализации рабочего окружения выполните следующие действия:

  1. Сначала инсталлируйте все необходимые пакеты из репозитория программного обеспечения вашего компьютера. Если вы уже занимались разработкой программного обеспечения, то основная часть требуемых пакетов может быть уже инсталлирована. В листингах 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
  2. Задайте значения переменных окружения командной оболочки с помощью входящего в состав поставки сценария. После выполнения этого сценария вашей рабочей директорией будет поддиректория build, из которой вы сможете запускать вашу сборку.

    $ cd poky 
    $ . ./oe-init-build-env
  3. Проверьте главный конфигурационный файл (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
Конфигурирование образа в Hob

После этого можно выбрать базовый образ (в нашем предыдущем примере это была сборка core-image-minimal, поэтому ее двоичные файлы уже существуют). Выберите minimal и щелкните View recipes или View packages. В последнем случае вы увидите список, изображенный на рисунке 2. Здесь вы можете установить или снять флажки для включения (или, соответственно, удаления) в сборку тех или иных пакетов. Для сортировки по определенному столбцу щелкните на его заголовок.

Рисунок 2. Список пакетов в Hob
Список пакетов в Hob

Обратите внимание на то, что на вкладке Packages пакет Python не включен в минимальную сборку. Вы можете добавить его, просто установив флажок напротив пакета python-2.7.2-r2.14, как показано на рисунке 3. При этом автоматически будут выбраны все его зависимости и дочерние пакеты.

Рисунок 3. Добавление пакетов в Hob
Добавление пакетов в Hob

Щелкните Build image и наблюдайте за процессом создания нового образа с выбранными параметрами. В процессе создания образа вы можете следить за сообщениями о работе, а сообщения об ошибках выводятся на вкладке Issues.

Когда ваш образ будет готов, можно запустить его в эмуляторе QEMU, просто щелкнув Run Image, как показано на рисунке 4.

Рисунок 4. Информация об образе в Hob
Информация об образе в 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: Войти

Обязательные поля отмечены звездочкой (*).


Нужен IBM ID?
Забыли Ваш IBM ID?


Забыли Ваш пароль?
Изменить пароль

Нажимая Отправить, Вы принимаете Условия использования developerWorks.

 


Профиль создается, когда вы первый раз заходите в developerWorks. Информация в вашем профиле (имя, страна / регион, название компании) отображается для всех пользователей и будет сопровождать любой опубликованный вами контент пока вы специально не укажите скрыть название вашей компании. Вы можете обновить ваш IBM аккаунт в любое время.

Вся введенная информация защищена.

Выберите имя, которое будет отображаться на экране



При первом входе в developerWorks для Вас будет создан профиль и Вам нужно будет выбрать Отображаемое имя. Оно будет выводиться рядом с контентом, опубликованным Вами в developerWorks.

Отображаемое имя должно иметь длину от 3 символов до 31 символа. Ваше Имя в системе должно быть уникальным. В качестве имени по соображениям приватности нельзя использовать контактный e-mail.

Обязательные поля отмечены звездочкой (*).

(Отображаемое имя должно иметь длину от 3 символов до 31 символа.)

Нажимая Отправить, Вы принимаете Условия использования developerWorks.

 


Вся введенная информация защищена.


static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=40
Zone=Linux, Open source
ArticleID=855205
ArticleTitle=Создание специальных дистрибутивов Linux для встраиваемых систем с помощью Yocto Project
publish-date=01162013