В процессе разработки, например, для Intel Edison или Galileo, может случиться так, что нужного для экспериментов устройства под рукой не оказалось. Похожее происходит и тогда, когда «железо» есть, но установленная на нём ОС не поддерживает всех необходимых для проекта возможностей. Что делать?

Один из вариантов решения этой проблемы – запуск целевой операционной системы на виртуальной машине. На ней можно компилировать, развёртывать и тестировать программы. Сегодня поговорим о том, как создавать образы Yocto Linux, подходящие для запуска в виртуальных средах, например, в простом программном эмуляторе QEMU. Кроме того, подобные образы можно использовать в системах с гипервизорами, скажем, в Microsoft Hyper-V на Windows.
Предварительные требования
Для того, чтобы успешно освоить это руководство, вам понадобится следующее:
- ОС Debian/Ubuntu (протестировано на Debian 8.2. amd64).
- Подключение к интернету.
- Как минимум 100 Гб свободного пространства на жёстком диске.
Подготовка компьютера
В качестве root-пользователя (или с использованием «sudo») выполните на компьютере следующую команду:
# apt-get install wget git-core unzip make gcc g++ build-essential subversion sed autoconf automake texi2html texinfo coreutils diffstat python-pysqlite2 docbook-utils libsdl1.2-dev libxml-parser-perl libgl1-mesa-dev libglu1-mesa-dev xsltproc desktop-file-utils chrpath groff libtool xterm gawk fop
Примечание №1. Успешность выполнения этой команды зависит от версии Ubuntu/Debian, которой вы пользуетесь. Однако, вы вполне можете, для того, чтобы разрешить зависимости пакетов, воспользоваться «aptitude» и выполнить принудительную установку подходящих версий необходимых пакетов (например, такой командой: «aptitude install libsdl1.2-dev»).
Примечание №2. Для других дистрибутивов Linux, таких, как RedHat, CentOS, Fedora, SuSe, Gentoo, и так далее, мы бы посоветовали поискать подходящие версии вышеупомянутых пакетов с использованием соответствующего менеджера пакетов (например, zypper или yum).
Шаг первый. Настройка рабочей директории
Эти команды нужно выполнить в режиме обычного пользователя, root-привилегии не нужны.
# cd
# mkdir yocto-2.0
# cd yocto-2.0
# wget http://downloads.yoctoproject.org/releases/yocto/yocto-2.0/poky-jethro-14.0.0.tar.bz2
# tar xvjf poky-jethro-14.0.0.tar.bz2
# cd poky-jethro-14.0.0/
Примечание №3. Здесь можно выбрать другую ветку релизов Yocto. В этом руководстве мы пользуемся Yocto Poky 2.0.14.0.0 (Jethro).
Примечание №4. Если вы хотите загрузить самый свежий релиз исходных кодов Yocto, можете обратиться к ветке master. При этом понадобится поменять пару команд из вышеприведённого листинга на следующие:
# git clone git://git.yoctoproject.org/poky.git
# cd poky
Примечание №5. Нужную ветку можно выбрать, используя её кодовое имя. Например, так:
# git clone -b jethro git://git.yoctoproject.org/poky.git
Шаг второй. Настройка переменных окружения
Эта настройка очень проста, выполняется она с помощью скрипта от разработчиков Yocto.
# . ./oe-init-build-env
После того, как вы запустите скрипт, и он успешно отработает, папка сборки станет новым рабочим пространством. Например, путь к этой папке может выглядеть так:
/home/<your user>/yocto-2.0/poky-jethro-14.0.0/build/.
Шаг третий. Настройка BitBake
После исполнения скрипта из предыдущего шага был создан файл conf/local.conf
.
Этот конфигурационный файл нужен для настройки BitBake, системы сборки Yocto (это центральный компонент Yocto Project).
Отредактируйте конфигурационный файл BitBake в любом текстовом редакторе, которым пользуетесь. Мы редактировали его в редакторе nano
. Это – простой консольный текстовый редактор для Unix-сред. Запускается он так:
# cd conf/
# nano local.conf
В конфигурационном файле раскомментируйте следующие строки:
DL_DIR ?= "${TOPDIR}/downloads"
SSTATE_DIR ?= "${TOPDIR}/sstate-cache"
TMPDIR ?= "${TOPDIR}/tmp"
SDKMACHINE ?= "i686"
Советуем собирать образы, включая в них все доступные дополнительные возможности. Хотя в результате файлы образов получаются немаленькими (около 8 Гб каждый), они включают в себя всё, что только можно, и, как результат, подходят для любых задач разработки.
EXTRA_IMAGE_FEATURES = "dbg-pkgs dev-pkgs ptest-pkgs tools-sdk tools-debug eclipse-debug tools-profile tools-testapps debug-tweaks"
Сохраните изменения в файле local.conf
. В нашем случае это делается с помощью комбинации клавиш Ctrl+X. Теперь выполните следующие команды:
# cd ..
# hob
В ответ на них должен запуститься Hob (графический интерфейс для BitBake, основанный на GTK-2). Он приступит к проверке правильности настройки системы сборки.
Проверка настройки системы сборки
После проверки выберите из выпадающего меню, в качестве целевой системы, qemux86.

Выбор целевой системы
Подождите, пока Hob завершит разбор рецептов BitBake и сгенерирует дерево зависимостей. Затем выберите рецепт для целевого образа из соответствующего выпадающего списка. В нашем случае выбран полный образ без графического интерфейса: core-image-full-cmdline
.

Выбор рецепта для сборки образа
После этого щёлкните по кнопке «Advanced configuration».

Переход к расширенным настройкам
На вкладке «Image types», в меню «Distro», выберите «poky», если хотите собрать самый свежий стабильный релиз. Затем, в списке «Image types», выберите желаемый формат образа. Обычно имеет смысл выбирать здесь «.iso», «.vdi» и «.vmdk». Образы в таких форматах наиболее удобны для практического использования.

Выбор формата образа
На вкладке «Output» задайте настройки, соответствующие вашим потребностям. Советуем добавить в образ как минимум 4 Гб свободного пространства для включения SDK для архитектуры i686 (если вы экспериментируете с платой Edison). Кроме того, было обнаружено, что весьма полезно устанавливать «deb» в качестве формата корневой файловой системы. В итоге мы пришли к следующим настройкам.

Настройка образа
Теперь можете сохранить выполненные настройки, нажав на кнопку «Save», и, в основном окне, нажать на кнопку «Build Image» для запуска процесса сборки образа.

Запуск сборки
Hob запустит экземпляр bitbake core-image-full-cmdline
с заданными настройками.

Сборка
Примечание №6. Процесс сборки может занять очень много времени. Но, в зависимости от возможностей вашего компьютера, вы можете изменить число потоков, использующихся при сборке, настраивая параметры «BitBake parallel threads» и «Make parallel threads» в окне настроек Hob.

Настройка количества потоков, использующихся при сборке
Примечание №7. И, наконец, при использовании Hob, у вас есть возможность выбрать, какие пакеты вы хотите включить в образ, который планируете собрать. Для того, чтобы это сделать, перед началом сборки образов, нажмите на кнопку «Edit image recipe».

Переход к настройке состава пакетов, включаемых в образ
В появившемся окне выберите пакеты, которые хотите добавить в образ.

Выбор пакетов
Когда процесс сборки образов завершится, вы можете тут же их опробовать! Для этого нажмите на кнопку «Run image». Hob запустит QEMU с только что собранным образом qemux86.

Образ собран и готов к запуску
В самом начале запуска система попросит задать пароль суперпользователя.

Ввод пароля
Запустится ещё одно окно командной строки UNIX. В нём можно наблюдать за индикатором загрузки на фоне логотипа Yocto Project.

Загрузка
После загрузки вы можете войти в учётную запись root только что созданного образа Yocto. Помните о том, что, добавив параметр отладки (debug-tweak) в переменную EXTRA_IMAGE_FEATURES в файле conf/local.conf, вы сможете входить в систему как root-пользователь без пароля. В противном случае нужно будет задать пароль для root-пользователя в рецепте BitBake перед сборкой образа.

Вход в систему
Теперь всё готово для того, чтобы приступить к экспериментам с виртуальной машиной QEMU, на которой работает Yocto Linux.
Примечание №8. После сборки образа Yocto по методике, представленной выше, на диске будет занято 89,8 Гб.

Размер данных, сгенерированных при сборке образов
Итоги
Образы Yocto Linux, сгенерированные при сборке, можно найти по адресу «~/yocto-2.0/poky-jethro-14.0.0/build/tmp/deploy/images/qemux86/*». Здесь, в зависимости от настроек, могут быть файлы в различных форматах. Например, файлы .iso, .vmdk, .vdi.
Теперь вы можете запускать полученные образы, используя эмулятор или гипервизор, которым обычно пользуетесь. Среди них – Microsoft Hyper-V, VMware Fusion, VirtualBox и другие. Удачных экспериментов!
Автор: Intel