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

В сети есть достаточно много источников на тему сборки приложений под архитектуру 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-архитектуре. Удачи!
Share post
AdBlock has stolen the banner, but banners are not teeth — they will be back

More
Ads

Comments 11

    +8
    Так тот же CodeSourcery имеет бесплатную версию, которая включает полный Toolchain, но без среды разработки. Прикрутить к нему Eclipse + GNU ARM Plugin дело пяти минут. А еще есть Yagarto и KGP тулчейны…
      0
      И то правда, спасибо!
      –4
      Рад этому топику. Но. Я совсем не понимаю в линуксах. У меня есть исходники драйвера usb wi-fi адаптера, у меня есть тулчейн (вообще, мне надо скомпилить дрова для телевизора :) Я даже поставил бубунту. Но что делать дальше?
        0
        Честно говоря, вот так на пальцах, не зная что у вас за дрова и что за железо, мало что можно сказать. В любом случае, почитайте про компиляцию в линукс — если установлен нужный тулчейн, то отличий не так уж много. В свободное время продолжу эту тему и напишу что динамические/ статические сборки и немного про разницу при little-endian и big-endian.
          0
          Тулчейн не установлен :) Я его скачал. Я даже не знаю, как его установить. Как мне рассказывал один знакомый, надо что-то написать в makefile. А потом, видимо, запустить компилятор?
        0
        не стоит забывать buildroot, умеющий упрощать процесс сборки этого всего в кучу не только на ARM.

        интересующимся так же стоит взглянуть на проект whitequarksquirrel, это система сборки, написанная на Ruby, умеющая собственноручно собрать тулчейн и всю обвязку, в соответствии с архитектурой. есть много скриптов для софта.
          0
          Если ограничить требования к ядру ARM-Cortex M3 от Cypress и платформой Windows, то есть очень хорошее решение PSoC Creator из коробки поддерживает два набора один от Keil второй CodeSourcery. Ваша задание создавать уже проекты.
            0
            debian-way: www.emdebian.org/ готовый toolchain под 9 архитектур.
              0
              а зачем использовать неподдерживаемый crosstool, если есть замечательный crosstool-NG?
                0
                а как же openembedded и angstrom?
                  0
                  «Способы кросскомпиляции не ограничиваются приведенными выше примерами.»

                  Можно и про CLFS писать, но я хотел перечислить не все возможные инструменты и тулчейны, а привести примеры наиболее адекватных по соотношению время на изучение/ полученный результат.

                Only users with full accounts can post comments. Log in, please.