Pull to refresh

Инструменты кросскомпиляции для ARM

Reading time 3 min
Views 30K
В сети есть достаточно много источников на тему сборки приложений под архитектуру ARM, но когда я впервые столкнулся с такой задачей, то набил не одну шишку. Этот топик будет про самые начала кросскомпиляции и различные подходы к этому вопросу.

Моё устройство принадлежит к архитектуре ARMv5TE и разработка велась на x86 машине с Ubuntu Linux.
Так как это введение, то собирать будем простую программу для высчитывания факториала числа.

Подход 1. Коммерческий.
Компанией CodeSourcery выпускается коммерческая интегрированная среду разработки Sourcery G++, основанная на инструментах GNU (gcc, gdb, binutils) и имеющая интерфейс на базе Eclipse. Пожалуй, это самый простой и быстрый способ создания приложений, так как при установке ставятся и все необходимые библиотеки, и сам кросскомпилятор. На официальном сайте кроме возможности покупки можно воспользоваться триальной версией на 30 дней. Благодаря близкому «родству» с Eclipse настройки интуитивно понятны и писать подробно нет смысла.

Для разовых задач подходит идеально, но есть и абсолютно бесплатные решения.

Подход 2. QEMU.
Широко известная программа эмуляции QEMU поддерживает в том числе и ARM платформу, чем грех не воспользоваться.

Для начала устанавливаем саму программу:

sudo apt-get install qemu-kvm-extras-static
Разработчики QEMU сделали отдельную команду для простоты установки окружения (в моём случае это debian lenny):

sudo build-arm-chroot lenny qemu
В ре­зуль­та­те у нас со­здаст­ся ка­та­лог qemu с об­ра­зом си­сте­мы lenny под нужную нам архитектуру.
Не хватает сети и необходимых пакетов для компиляции. Отредактируем sources.list нашей qemu-машины:
sudo nano qemu/etc/apt/sources.list

И добавим туда

deb ftp.us.debian.org/debian lenny main contrib non-free
deb-src ftp.us.debian.org/debian lenny main contrib non-free


Обновляемся, устанавливаем необходимые пакеты и в самой QEMU собираем наш factorial.

Подход 3. Собираем crosstool.
Crosstool — это набор скриптов для сборки и проверки работы gcc и glibc для всех архитектур, поддерживаемых glibc. При сборке различных кросстулов (так или так) у меня возникали проблемы с совместимостью различных компонентов. Так, например, gcc не дружил с binutils из-за разницы в версиях и приходилось чуть ли не методом тыка подбирать работающие связки. К счастью, и этот процесс уже был автоматизирован и сделан предельно простым. За что спасибо пользователю сайта linux.org.ru mskmsk1985:
Написанный им скрипт собирает тулчейн для arm-linux-gnueabi- архитектуры из последних версий GNU инструментов. Собираются С и С++ кросс компиляторы, кросс-отладчик и отладочный сервер для целевой архитектуры. Подробнее можно прочитать тут.

Подход 4. Gentoo-way.
Как и писал, собиралось это всё на компьютере с Ubuntu, но стоит всё же сказать, что в Gentoo есть отдельная программа crossdev, которая занимается тем же самым и собирает бинарники для нужной архитектуры.

Подход 5. Ubuntu-way.
Мои долгие поиски наиболее простого способа кросскомпиляции шли весьма запутанно и, конечно же, я пропустил решение, которое было слишком очевидным и простым чтобы даже об этом думать. Но оказалось что да, кросскомпилятор можно поставить из репозиториев и одной командой:

sudo apt-get install libc6-dev-armel-cross gcc-arm-linux-gnueabi

Вместо заключения.
Способы кросскомпиляции не ограничиваются приведенными выше примерами. Существуют многостраничные описания, варианты создания необходимых инструментов 'from scratch', но если нужно быстро написать и запустить простенькое приложение на другой архитектуре, часто не хватает времени для полного изучения, да и количество нюансов и программных несовместимостей могут отбить любое желание заниматься этим.

Надеюсь, мой небольшой обзор поможет вам избежать моих ошибок и быстро получить работающий инструмент для создания приложение на ARM-архитектуре. Удачи!
Tags:
Hubs:
+24
Comments 11
Comments Comments 11

Articles