Кросс-компиляция - это компиляция исполняемого файла, предназначенного для платформы, отличной от той, на которой выполняется компиляция. Например, вы можете использовать компьютер с архитектурой x86 для компиляции исполняемого файла для Omega с архитектурой MIPS.
LEDE build system лежит в основе кросс-компиляции; он будет собираться в набор инструментов, который мы затем будем использовать для кросс-компиляции нашего кода C/C ++ для Omega.
В статье об использовании C-компилятора на Omega упоминается, что ограничение компиляции на Omega состоит в том, что программы ограничены использованием только стандартных C-библиотек, поскольку только их header-файлы включены в файловую систему Omega для экономии места.
Основное преимущество кросс-компиляции по сравнению с компиляцией программы непосредственно на Omega состоит в двух моментах:
- ваша программа сможет использовать библиотеки, отличные от программных пакетов LEDE;
- на компьютере компиляция будет проходить быстрее чем на Omega.
В этой статье объясняется, как настроить LEDE build system, что необходимо сделать для кросс-компиляции программы, а затем будет рассмотрен пример кросс-компиляции.
LEDE build system можно использовать для сборки инструментов кросс-компиляции, создания образов прошивки и создания пакетов ПО, которые можно установить с помощью opkg. Эта статья только о создании инструментария кросс-компиляции.
Примечание: Onion не несет ответственности за любой ущерб или проблемы, вызванные использованием прошивок или пакетов, которые были разработаны не Onion.
Для начала нужно настроить LEDE build system на компьютере, настроить ее для Omega, а затем собрать инструментарий (toolchain). Эта процедура успешно проведена на Ubuntu Linux, рекомендуем следовать этому примеру. Используйте виртуальную машину, если у вас нет установленной ОС.
Это руководство основано на инструкциях по установке LEDE build system, посмотрите, если что-то неясно.
LEDE build system требует много пакетов, выполните следующую команду в Linux:
sudo apt-get install -y git wget subversion build-essential libncurses5-dev zlib1g-dev gawk flex quilt git-core unzip libssl-dev python-dev python-pip libxml-parser-perl
Это может занять некоторое время.
Используйте git для загрузки build system, настроенной Onion для Omega2:
git clone https://github.com/OnionIoT/source.git
Это займет некоторое время, но не так много, как предыдущий шаг.
Теперь нужно настроить build system, чтобы она была для Omega2 и Omega2+.
Поскольку вы используете build system от Onion, эта часть уже выполнена, и вы можете перейти к компиляции. Эта инструкция на случай, если вы используете оригинальную LEDE build system.
Перейдите в каталог source и зайдите в меню:
cd source
make menuconfig
В появившемся меню нужно сделать следующее:
Теперь LEDE build system настроена на создание инструментария, прошивок и пакетов, совместимых с Omega2 и Omega2+.
Осталось скомпилировать toolchain. Build system основана на make-файлах, команда make запустит процесс.
Если у вас процессор, который может обрабатывать несколько потоков, можно использовать команду:
make -j8
Где число 8 определяет количество одновременных компиляций.
В зависимости от вашей системы, компиляция займет некоторое времени и будет очень ресурсоемкой. На серверных системах компиляция займет около получаса, на настольных компьютерах или ноутбуках – может занять часы.
Теперь, когда появился toolchain, можно перейти к кросс-компиляции программ.
Рассмотрим несколько важных идей и положений скомпилированной LEDE build system.
Toolchain:
Target:
Процесс кросс-компиляции прост, нам просто нужно убедиться в следующем:
Дополнения к пути поиска позволяют компилятору также проверять эти каталоги при поиске header-файлов, которые включены (#include) в программе. Аналогично, дополнения к пути поиска библиотеке позволяют компилятору/линкеру проверять эти каталоги при поиске динамических объектов.
Требования,указанные выше, могут быть достигнуты несколькими способами:
См. руководство по кросс-компиляции с информацией о первых двух способах. См. пример ниже с реализацией третьего метода.
Этот пример покажет, как С-проект может быть кросс-скомпилирован для Omega с использованием универсального make-файла и скрипта для его вызова таким образом, чтобы он выводил кросс-скомпилированный бинарный исполняемый файл. Код примера доступен в репозитории Onion c-cross-compile-example на GitHub.
С-программа использует библиотеку libugpio для считывания и печати входного значения на указанном GPIO-выводе раз в секунду в течение 20 секунд. Как упоминалось ранее, эта программа не может быть скомпилирована на Omega, поскольку в файловую систему Omega включены только файлы заголовков стандартной C-библиотеки. Можно скопировать header-файлы в Omega, но кросс-компиляция - более масштабируемый вариант.
Посмотрев на make-файл в репозитории, вы заметите, что компилятор и все флаги являются переменными. Станет еще яснее, есть взглянуть на скрипт xCompile.sh. Он выполняет следующие действия:
Для выполнения этого, пользователю необходимо запустить скрипт с аргументами, которые определят, где можно найти LEDE build system и с какими библиотеками необходимо связать:
sh -buildroot
Если LEDE build system находится в /root/source, команда будет выглядеть следующим образом:
sh xCompile.sh -buildroot ~/source/ -lib ugpio
Получится кросс-скомпилированный исполняемый файл gpioRead.
root@b6b5a4128ee3:~/c-cross-compile-example# file gpioRead
gpioRead: ELF 32-bit LSB executable, MIPS, MIPS32 rel2 version 1, dynamically linked, interpreter /lib/ld-musl-mipsel-sf.so.1, not stripped
Только что была кросс-скомпилирована программа для Omega! Перенесите ее в Omega, используя chmod + x gpioRead, чтобы дать необходимые права, и запустите: ./gpioRead.
г. Москва, Пятницкое ш. д. 18, пав. 566
zakaz@compacttool.ru
8-495-752-55-22
Информация представленная на данном информационном ресурсе преследует исключительно рекламные цели и не является договором-офертой !
© Все права защищены 2015 - 2024г https://compacttool.ru