- Проект Yocto
- 23.1. Введение в систему сборки Poky Build System
- Сборка Embedded Linux от Yocto для QEMU x86 и первое приложение к нему
- Сборка образа Linux
- Средства разработки
- Eclipse, Cross GCC
- Сборка в ADT
- Подготовка сборки
- Настройка Yocto ADT в Eclipse
- Проект Hello, World! в Eclipse c Yocto ADT
- Запуск и отладка из IDE Eclipse
Проект Yocto
Оригинал: The Yocto Project
Автор: Elizabeth Flanagan
Перевод: А.Панин
23.1. Введение в систему сборки Poky Build System
Система сборки Poky является основой проекта Yocto. В рамках стандартной конфигурации Poky может предоставлять начальный образ системы, настраиваемый в диапазоне от минимального образа, предоставляющего возможность доступа с использованием командной оболочки, до совместимого со стандартом Linux Standard Base образа, использующего прототип пользовательского интерфейса с названием Sato на основе GNOME Mobile and Embedded (GMAE). При использовании этих основных типов образов, уровни метаданных могут быть добавлены для расширения функций; уровни позволяют создать дополнительный стек программного обеспечения для заданного типа образа, добавить в него пакеты для поддержки аппаратного обеспечения (board support packages — BSP) для беспроблемной работы с дополнительным аппаратным обеспечением или даже создать новый тип образа. Используя версию 1.1 системы Poky с кодовым названием «edison», мы покажем то, как BitBake использует рецепты и файлы конфигурации в ходе генерации образа для встраиваемой системы.
При высокоуровневом анализе видно, что процесс сборки начинается с установки параметров окружения оболочки для последующей сборки. Для выполнения этой операции используются исходные данные из файла oe-init-build-env , который находится в корневой директории дерева исходного кода системы Poky. С помощью этого файла настраивается окружение оболочки, создается начальный изменяемый набор файлов конфигурации и осуществляется взаимодействие с окружением выполнения системы BitBake путем использования файла сценария, позволяющего Poky установить, выполняются ли минимальные системные требования.
Например, одним из наблюдаемых с помощью данного сценария параметров является наличие инструмента Pseudo, являющегося заменой fakeroot , переданной проекту Yocto компанией Wind River Systems. В этот момент сценарий bitbake-core-image-minimal , например, должен иметь возможность создать полнофункциональное окружение для кросскомпиляции, после чего сформировать образ Linux-системы на основе описания образа, соответствующего сценарию core-image-minimal , из исходного кода таким образом, как это описано на уровне метаданных проекта Yocto.
Рисунок 23.1: Высокоуровневый обзор процесса выполнения задачи Poky
В ходе формирования нашего образа BitBake произведет разбор файлов конфигурации, подключит любые дополнительно заданные уровни, классы, задачи или рецепты и начнет с создания цепочки зависимостей с приоритетами. Этот процесс позволяет создать упорядоченную карту задач с установлением их приоритетов. После этого BitBake будет использовать полученную карту задач для установления того, в каком порядке и какие пакеты должны быть собраны для наиболее оптимального разрешения зависимостей компиляции. Задачи, необходимые большинству других задач, имеют большие приоритеты и, следовательно, начинают работу раньше в ходе процесса сборки. Очередь выполнения задач для нашей сборки создана. BitBake также сохраняет итоги разбора метаданных и в том случае, если при последующих запусках устанавливается факт изменения метаданных, могут быть повторно разобраны только измененные метаданные. Планировщик и система разбора данных из состава BitBake являются одними из наиболее интересных архитектурных решений в рамках BitBake, а некоторые окружающие их решения вместе с их реализацией силами разработчиков BitBake также будут рассмотрены далее.
Источник
Сборка Embedded Linux от Yocto для QEMU x86 и первое приложение к нему
Эта статья — быстрый старт с картинками для тех, кому нужно собрать Embedded Linux с помощью Yocto.
Если вы собрались собирать Embedded Linux для специфичных аппаратных средств, например, для SoC на FPGA, то, наверное, как и я столкнётесь с проектом Yocto.
Yocto — проект, объединяющий
- инструментарий разработчика;
- систему сборки;
- набор программных интерфейсов;
- коллекцию мета-пакетов, расширяющих возможности платформы;
- плагины для Eclipse и Anjuta.
Я постарался описать процесс так, чтобы вам можно было меньше тратить времени на проблемы с настройкой и подготовкой и поскорее приступить к творчеству.
Сборка образа Linux
Основа для сборки — статья
«Yocto Project Quick Start».
Собирать буду в папке
Небольшое отступление:
Запустив терминал, все команды выполняйте в нём, потому что в ходе работы создаются и используются переменные среды. Если закрыли терминал и открыли новый, то заходите в
и придётся повторять некоторые команды. Например,
создаю репозиторий git
теперь текущая директория
теперь, согласно терминам Yocto, получилось
Source Directory — «poky»
local working area (local branch) — dizzy
Первым делом выполняется
Этой командой настраивается окружение оболочки, создается начальный изменяемый набор файлов конфигурации и осуществляется взаимодействие с окружением выполнения системы BitBake путем использования файла сценария, позволяющего Poky установить, выполняются ли минимальные системные требования. Результат выполнения команды сообщит или о проблемах, например, недостающих пакетах, или о возможности продолжить редактированием файла conf/local.conf.
Здесь следует указать число нитей, которое будет запускать средство сборки bitbake. Чтобы максимально использовать вычислительные возможности, число нитей должно соответствовать числу ядер процессора. Я указал на 1 меньше, чтобы компьютером во время сборки удобнее было пользоваться.
Так же я добавил дополнительные возможности, полезные для разработки.
Так как собираем для стандартной QEMU x86, то остальное можно не изменять.
Далее можно выбрать “рецепт” — вариант сборки со своим набором библиотек, утилит, создаваемых файлов, образов и т.п.
Список рецептов с их краткими описаниями можно посмотреть здесь:
рецепты openembedded-core
пролистайте до рецептов, начинающихся с core-…
Не советую собирать core-image-minimal для ознакомления. Там нет ssh и других удобных для отладки инструментов.
Я выбрал core-image-sato. Это сборка с GUI SATO
Будьте готовы, что ждать завершения сборки придётся, возможно, от 3 часов до 3 и более дней. В счастью, процесс можно приостановить и возобновить.
Чтобы приостановить, нажмите + один (!) раз и подождите, когда завершатся все начатые операции. Иначе, возможно, появятся ошибочки и придётся переделывать. Чтобы возобновить, повторите
Если закрыли терминал, то в новом терминале перед сборкой придётся повторить установку переменных среды:
По завершении сборки можно проверить, что получилось, запустив эмулятор QEMU
Появится окно терминала xterm, там надо будет ввести пароль root хоста для создания интерфейса tap. Там же можно увидеть IP host-машины на tap интерфейсе и IP эмулируемой машины. У меня 192.168.7.1 и 192.168.7.2 соответственно.
Затем, если собран SATO должно появится окно графического интерфейса:
Если запущенный эмулятор мешает, пока его можно закрыть. Полистайте стрелочками в верхней части GUI до появления соответствующей иконки выключения или введите poweroff через терминал SATO или по ssh. Про ssh будет позже.
Не закрывайте QEMU крестиком на главном окошке эмулятора. Закрывайте штатными средствами эмулируемой машины. Иначе у вас в системе от QEMU останутся интерфейсы ethX, tapX, virbrX, которые придётся будет ifconfig… ifdown, или как это делается на вашей ОС. Или каждый раз при запуске QEMU будут новые IP хоста и QEMU, что неудобно.
Средства разработки
Используется Eclipse IDE for C/C++ Developers, версия Luna. В этой сборке имеются плагины CDT, GNU ARM и некоторые другие полезные для кросс-компиляции и разработки встроенного ПО плагины.
Можно скачать отсюда:
Eclipse Luna SR2.
Будем собирать приложения Hello, world!
Eclipse, Cross GCC
Сначала простой путь, соберём обычными средствами Eclipse: CDT + GNU ARM
Если этих плагинов в вашем Eclipse ещё нет, то добавьте плагин CDT из стандартного репозитория Eclipse и отсюда GNU ARM Plugin for Eclipse GNU ARM C/C++ Cross Compiler и что ещё захочется.
Создаём новый проект C++:
Меню Eclipse File->New->Project…->C/C++->C++ Project
Нужно выбрать
Project type: Executable->Hello World C++ Project
Toolchains: Cross GCC
заполните поле Author
Теперь самое важное, что касается системы сборки:
Cross compiller prefix: i586-poky-linux-
Cross compiler path: /home/. /My_Designs/Poky/poky/build/tmp/sysroots/x86_64-linux/usr/bin/i586-poky-linux
Компилируем проект
Project->Build Project
Должен появиться исполняемый файл
Так как компилировали для QEMU x86 Linux, то должен запуститься и на вашей host машине, если, конечно, вы работаете на x86 Linux или совместимой с ней. У меня запустилось на IA64 Ubuntu.
Теперь, если успели закрыть QEMU, то запустите опять
Появится окно терминала xterm, надо будет ввести пароль root для создания tap интерфейса.
Как видно, у меня IP host-машины 192.168.7.1, IP qemu 192.168.7.2
Затем появится окно QEMU с графическим интерфейсом
Можно подсоединиться к QEMU через ssh и sftp. Первый полезен для запуска программы, второй — для отправки этой программы на эмулируемую машину.
Файл я отправлял с помощью файлового менеджера Krusader. В Windows можно использовать FileZilla или другими.
В Krusader я выбрал Tools->New Net Connection…, в диалоговом окне нужно выбрать sftp://, ввести IP и Username: root
В домашнюю папку на QEMU я скопировал исполняемый файл hello_cross_gcc_02 из папки Debug проекта
Далее можно открыть терминал в графическом интерфейсе QEMU и запустить программу на выполнение оттуда. Мне более удобным показалось соединиться через ssh. В окне терминала host-машины запускаем ssh
и запускаем недавно скопированный исполняемый файл:
Должно получиться
Hello World!
Сборка в ADT
Подготовка Eclipse
Делалось на основе этого: Yocto — Настройка Eclipse
В Eclipse нужны плагины из стандартной комплектации:
Linux Tools
- LTTng — Linux Tracing Toolkit
Mobile and Device Development
- C/C++ Remote Launch
- Remote System Explorer End-user Runtime
- Remote System Explorer User Actions
- Target Management Terminal
- TCF Remote System Explorer add-in
- TCF Target Explorer
Programming Languages
- Autotools Support for CDT
- C/C++ Development Tools
И нужно добавить плагин от Yocto. Скачать можно отсюда: Yocto Plugin for Eclipse
Подготовка сборки
Для организации взаимодействия с IDE и средствами разработки, предусмотрены скрипты:
для запуска QEMU плагином Yocto нужен rpcbind
нужно отредактировать файл /etc/default/rpcbind
нужно распаковать root filesystem в ту папку в sysroots, где лежит файловая система эмулируемой машины. В нашем случае qemux86:
Настройка Yocto ADT в Eclipse
В Eclipse меню Windows->Preferences, Yocto Project ADT
Cross Compiler Options
Build system derived toolchain
Toolchain Root Location:
/home/. /Poky/poky/build/
Sysroot Location:
/home/. /Poky/poky/build/tmp/sysroots/qemux86
Target Architecture: i586-poky-linux
Target Options:
QEMU
Kernel: /home/. /Poky/poky/build/tmp/deploy/images/qemux86/bzImage-qemux86.bin
Проект Hello, World! в Eclipse c Yocto ADT
Создаём новый проект
New Project->C++ Project
Project name: hello_qemu_cmake_04
Project type: Yocto Project ADT CMake Project->Hello World C++ CMake Project
Next, Next, Finish
Build project
В папке проекта -> Debug должен получиться hello_qemu_cmake_04
Теперь можно запустить приложение так же как это было с проектом, созданным через Cross GCC за исключением того, что QEMU запускается теперь в Eclipse через меню
Run->External Tools->qemu_i586-poky-linux
Запуск и отладка из IDE Eclipse
Теперь настроим Eclipse так, чтобы можно было запускать и отлаживать приложение прямо из IDE.
Инструкция взята отсюда:
Загрузка и отладка приложения средствами ADT в Eclipse
Для удобства перед настройкой удалённая машина должна быть запущена (Run->External Tools->qemu_i586-poky-linux, как в предыдущем разделе).
Для настройки отладки выбираем в меню Eclipse
Run -> Debug Configurations…
В списке слева нужно отыскать “C/C++ Remote Application”, там должен быть пункт с названием нашего проекта и виртуальной машины. У меня это “hello_qemu_cmake_04_gdb_i586-poky-linux”. Надо его выбрать.
В руководстве от Yocto предлагается указать Remote Absolute File Path for C/C++Application. Но сейчас не самое лучшее время для этого. Удобнее будет сначала настроить связь с удалённой машиной.
А пока в правой области выбираем вкладку Debugger, здесь надо в выпадающем списке Debugger выбрать remote gdb/mi. У меня это единственный элемент списка, но его всё равно нужно выбрать. При этом заполняться некоторые другие поля формы. Debug Configurations — Debugger» data-src=»https://habrastorage.org/files/578/799/303/5787993038a54954bb16b360004daac3.png»/>
Возвращаемся на вкладку Main и создаём соединение.
В разделе Connection выбираем New…. В окне New Connection выбираем TCF. У меня их два. Я не знаю, зачем второй, но выбор первого точно приводит к положительному результату.
Debug Configurations — Main->New Connection» data-src=»https://habrastorage.org/files/28f/05c/dea/28f05cdeade343ae876ee4beaede83be.png»/>
В поле Host name вписываем IP машины в QEMU. Поле Connection name можно оставить заполненным IP. , … Чтобы меньше было возни позже, здесь же можно указать login при соединении. В разделе Connection нажмите Edit… и заполните Default User ID. Логин root.
Debug Configurations — Main->Edit — Properties» data-src=»https://habrastorage.org/files/334/24c/4e6/33424c4e612d48fc95439282cf009346.png»/>
На вкладке Main выбираем только что созданное соединение.
Теперь указываем путь к файлу и имя файла, с которым Eclipse будет загружать отлаживаемое приложение на удалённую машину.
Если QEMU запущен, то можно нажать Browse… и, если с соединением всё в порядке, можно будет посмотреть файловую систему удалённой машины и выбрать место, куда загружать приложение. У вас не обязательно будет такая же картинка, как на скриншоте снизу. Но вот что важно: нужно указать файл. Если вы собираетесь указать папку, в которой нет файла с тем именем, с которым хотите загружать исполняемый файл, то в этим окном вы не ограничитесь. Нажмите и допишите имя файла в окне Debug Configurations.
Debug Configurations — Main->Select remote application file» data-src=»https://habrastorage.org/files/ffc/9c1/3cd/ffc9c13cd54a4f2aaa4a64c05469848e.png»/>
Итог должен получиться примерно такой:
Debug Configurations — Main» data-src=»https://habrastorage.org/files/5bb/ee6/a91/5bbee6a91d3849d7b2e250735bcd4bec.png»/>
Теперь можно нажать .
У меня в окне консоли Eclipse “Remote Shell” было так:
Затем приглашение переключиться в перспективу Debug. Есть смысл согласиться.
Отладчик остановился на строке
Жмём Step Over (F6)
В терминале
Теперь можно писать программу. Пока для QEMU x86.
Источник