Проблемы кросс-сборки — исполнение бинарных файлов (Михаил Шалаев, OSSDEVCONF-2016)
Материал из 0x1.tv
Аннотация
- Докладчик
- Михаил Шалаев
За время существования свободного программного обеспечения создано огромное количество программных пакетов, сборка каждого из которых может иметь свои особенности. Разработано несколько популярных и широко распространенных систем конфигурации, большинство из которых предоставляет вариативность выбора целевой операционной системы. Понятие кросс-компиляции и необходимость сборки для целевой аппаратной платформы появились достаточно давно, но до сих пор многие разработчики програмного обеспечения предполагают, что их продукты будут собираться только на нативных системах. К сборке таких продуктов нужно подходить индивидуально.
В докладе раскрыты наиболее часто возникающие проблемы и возможные пути их решения.
Видео
Слайды
Расширенные тезисы
При создании вычислительной машины новой архитектуры неизбежно возникает проблема её программного обеспечения. Работа посвящена проблемам создания пользовательского окружения в кросс-режиме для широко используемых и новых аппаратных платформ.
Исходные требования к системе создания пользовательского окружения следующие:
- наименьшие затраты на адаптацию программного кода к новой платформе (максимальная совместимость с существующей кодовой базой);
- ограниченный доступ к аппаратуре;
- возможность быстрого масштабирования процесса разработки;
- поддержка нескольких архитектур.
За время существования свободного программного обеспечения создано огромное количество программных пакетов, сборка каждого из которых может иметь свои особенности. Разработано несколько популярных и широко распространённых систем конфигурации, большинство из которых предоставляет вариативность выбора целевой операционной системы.
При постановке задачи сборки какого-либо из существующих Linux-дистрибутивов в кросс-режиме возникают дополнительные проблемы, связанные с особенностями сборочных сред этих дистрибутивов и де-факто отсутствием стандартов написания сборочных скриптов при добавлении пакетов. Наиболее часто встречаются следующие проблемы:
- отсутствие опций для определения целевой платформы сборки при конфигурации;
- явное определение переменных, использующихся при сборке (например, компилятора), без возможности переопределения извне, несмотря на имеющиеся механизмы динамического определения значений для этих переменных;
- явное указание путей поиска исполняемых библиотек и заголовочных файлов.
Эти и подобные проблемы можно решить как правками «на лету», так и доработкой исходных текстов.
Ещё одна проблема, возникающая при кросс-сборке некоторых пакетов, заключается в необходимости запускать только что собранные исполняемые файлы. Это требуется в ряде случаев:
- запуск собранных исполняемых программ в процессе проведения внутренних тестов (make check);
- запуск программ для получения документации, например при использовании утилиты help2man;
- запуск промежуточных программ, используемых при генерации файлов, необходимых для дальнейшей сборки программного пакета.
Если первую проблему можно решить отключением внутреннего тестирования пакета, то для решения остальных можно предложить следующие подходы:
- сборка на вычислительном комплексе с подменой исполнения целевых бинарных файлов локальными;
- сборка на вычислительном комплексе с исполнением целевых бинарных файлов в виртуальной машине (например, qemu);
- сборка на вычислительном комплексе с исполнением целевых бинарных файлов на удалённой машине (использование remote shell);
- сборка на вычислительном комплексе с целевой архитектурой, компиляция проводится кросс-компилятором с использованием distcc.
При использовании данных подходов появляется возможность удовлетворить требованиям, поставленным к конкретному конечному продукту. Выбирать из них следует в зависимости от доступных программных решений и имеющегося количества аппаратных комплексов.
Примечания и отзывы
Plays:54
Comments:0
