Наши партнеры

UnixForum





Библиотека сайта rus-linux.net

Проект Yocto

Глава 23 из книги "Архитектура приложений с открытым исходным кодом", том 2.

Оригинал: The Yocto Project
Автор: Elizabeth Flanagan
Перевод: А.Панин

Очередь выполнения сборки

Так как в процессе сборки образа могут быть задействованы тысячи рецептов, каждый из которых может содержать множество пакетов и задач со своими зависимостями, на данный момент BitBake пытается разобраться в этих зависимостях и сформировать какую-либо структуру, которую можно будет использовать для установления порядка выполнения задач. После того, как модуль сборки получает в процессе инициализации объекта bb.data полный список пакетов, которые необходимо собрать, он приступает к созданию структуры распределения задач с приоритетами на основе этих данных для формирования упорядоченного списка необходимых для выполнения задач под названием "очередь выполнения сборки" (runqueue). Сразу же после формирования очереди выполнения сборки BitBake может начать выполнение находящихся в ней задач с учетом их приоритетов, причем каждая задача будет выполняться в отдельном потоке.

При задействовании модуля установления источника пакета, BitBake в первую очередь проверяет, установлено ли значение переменной PREFERRED_PROVIDER для заданного пакета или образа. В том случае, если более чем один рецепт может предоставить заданный пакет и так как задачи устанавливаются в рамках рецептов, от BitBake необходимо принять решение, какой источник пакета будет использован. Система отсортирует все источники пакета, поставив в соответствие каждому из них приоритет, установленный на основе совокупности различных критериев. Например, предпочтительные версии программного обеспечения будут иметь больший приоритет, чем все остальные. Однако, BitBake также учитывает версию пакета наряду с его зависимостями от других пакетов. После того как выбран рецепт, который будет использован для создания пакета, BitBake последовательно исследует значения переменных DEPENDS и RDEPENDS данного рецепта и перейдет к установлению источников для полученных названий пакетов. В ходе этой цепной реакции формируется список пакетов, необходимых для генерации образа, а также списки источников для данных пакетов.

Теперь очередь выполнения сборки располагает полным списком пакетов, которые должны быть собраны, а также цепочкой зависимостей. Для начала работы модуль выполнения сборки должен создать объект TaskData, таким образом начав сортировку структуры распределения задач на основе приоритетов. Этот процесс начинается с рассмотрения каждого найденного предназначенного для сборки пакета, разделения задач, необходимых для генерации этого пакета и присвоения каждой из этих задач приоритета на основании количества пакетов, требующих ее. Задачи с более высоким приоритетом имеют большее количество зависимостей и, следовательно, в целом выполняются раньше в процессе сборки. После завершения этой работы модуль очереди выполнения сборки подготавливает данные для преобразования объекта TaskData непосредственно в очередь выполнения сборки.

Процесс формирования очереди выполнения сборки отчасти сложен. Вначале BitBake обходит список имен задач объекта TaskData для установления зависимостей задач. Так как выполняется обработка данных объекта TaskData, начинается создание структуры распределения задач с приоритетами. После окончания этого процесса в случае отсутствия циклических зависимостей, задач, выполнение которых невозможно, а также других подобных проблем, распределение задач будет упорядочено на основании приоритетов и модулю выполнения сборки будет возвращен объект с полной очередью выполнения сборки. Модуль выполнения сборки предпримет попытку последовательного выполнения задач из очереди. В зависимости от размера образа и вычислительных ресурсов, системе сборки Poky может потребоваться от получаса до нескольких часов для генерации набора инструментов кросскомпиляции при указании пакета и выборе необходимого образа встраиваемой системы на основе Linux. Стоит отметить, что с момента выполнения команды bitbake <имя_образа> с использованием командной строки, весь процесс, начинающийся с выполнения задач из очереди выполнения сборки, занимает меньше нескольких секунд.


Далее: Заключение