Видео смотреть бесплатно

Смотреть узбекский видео

Официальный сайт openw 24/7/365

Смотреть видео бесплатно

h0rr0rr_drag0n 17.06.2010 20:21

Элементарные вещиСобираем свой кросскомпилятор для ARM.

=ARM
Недавно, мне потребовалось собрать из gcc кросскомпилятор для ARM-архитектуры. К сожалению, в интернете нет актуальной how-toшки с детальным описание того, как просто собрать только кросскомпилятор под нужную мне архитектуру.
Методом "научного тыка" я похоже набрел на последовательность действий, которая позволила мне наконец-то собрать для себя кросскомпилятор.
Описание под катом.

Для сборки нужны:
binutils - утилиты типа ar, nm и т.п.gcc - он будет нашим кросскомпиляторомnewlib - библиотека языка C, оптимизированная для использования во встраиваемых системах

Для сборки рекомендую выделить отдельный каталог, например ~/toolchain-arm, и проводить все последующие действия внутри него.

Для начала скачиваем последнюю версию binutils отсюда. Распаковываем архив и конфигурируем исходники командой:
./configure --prefix=/usr/local/arm-linux/ --target=arm-elf --enable-interwork --enable-multilib --with-float=soft --disable-werror


Затем, как обычно собираем и устанавливаем binutils. Установка будет произведена в каталог /usr/local/arm-linux . К сожалению, у меня возникли проблемы с правами доступа к подкаталогам каталога arm-linux; но они решаются запуском следующей команды в каталоге arm-linux.
sudo find . -type d -exec chmod go+rx '{}' \;


Исполняемые файлы будут расположены в /usr/local/arm-linux/bin. Поместим этот каталог в $PATH, чтобы иметь доступ к утилитам при сборке других программ, в том числе и кросскомпилятора (желательно поместить нижеследующую строку в ~/.profile и выполнить команду . ~/.profile):
PATH=$PATH":/usr/local/arm-linux/bin" && export PATH


Теперь мы можем обращаться к новым утилитам, используя префикс arm-elf: arm-elf-ar, arm-elf-nm и т.п.
Затем, приступим к сборке кросскомпилятора и библиотеки языка C. Скачаем gcc отсюда и newlib отсюда и распакуем их. Также скачаем обновленный командой GNUARM файл t-arm-elf отсюда и заменим им файл /gcc/config/arm/t-arm-elf.

Перед сборкой newlib нужно собрать урезанную версию gcc для arm, при помощи которой мы скомпилируем newlib. Затем, уже имея собранную newlib, мы скомпилируем полную версию gcc с newlib.
Сборку gcc следует проводить в отдельном каталоге , который не должен быть расположен внутри каталога >, иначе мы получим ошибку:
./gcc/libgcc.mvars: Нет такого файла или каталога


Перейдем в
и выполним команду:
sudo ..//configure --target=arm-elf --prefix=/usr/local/arm-linux/ --enable-interwork --enable-multilib --with-float=soft --enable-languages="c,c++" --with-newlib --with-headers=..//newlib/libc/include/ && sudo make && sudo make install


Все, мы получили урезанную версию кросскомпилятора gcc для arm. Нужно перейти в каталог
/usr/local/arm-linux/ и вновь (как на стадии с binutils) исправить права доступа на подкаталоги иначе на следующем шаге мы получим ошибку:
arm-elf-gcc: error trying to exec 'cc1': execvp: Нет такого файла или каталога


Теперь приступим к сборке newlib. Перейдем в
и выполним команду:
./configure --target=arm-elf --prefix=/usr/local/arm-linux/ --enable-interwork --enable-multilib --with-float=soft


Далее, как обычно, make и make install.
Имея собранную newlib приступим к сборке полной версии кросскомпилятора. Перейдем в
и выполним:
sudo make && sudo make install


Осталось только вновь исправить права доступа на подкаталоги в каталоге
/usr/local/arm-linux :-).

Теперь все - у нас есть свой кросскомпилятор для архитектуры ARM!

UPD (03.08.2010):
При сборке простого хелловорлда, у меня внезапно выскочила ошибка:
arm-elf-gcc -c -Wall -Wstrict-prototypes -Wno-trigraphs -O0 -pipe -g -mcpu=arm7tdmi main.c
/usr/local/arm-linux/libexec/gcc/arm-elf/4.5.0/cc1: error while loading shared libraries: libmpfr.so.1: cannot open shared object file: No such file or directory
make: *** Ошибка 1

Оказывается, libmpfr нужно обязательно ставить вместе с gcc. Лично я проделал это так:

1) Качаем MPFR отсюда. Распаковываем и собираем командой:
./configure --target=arm-elf --prefix=/usr/local/arm-linux/ && make && sudo make install

Теперь libmpfr установлена в /usr/local/arm-linux/lib/

2) Переходим в
, удаляем оттуда все файлы и каталоги и заново конфигурируем и собираем gcc заново командой:
sudo ..//configure --target=arm-elf --prefix=/usr/local/arm-linux/ --enable-interwork --enable-multilib --with-float=soft --enable-languages="c,c++" --with-newlib --with-headers=..//newlib/libc/include/ --with-mpfr=/usr/local/arm-linux/lib/ && sudo make && sudo make install


По материалам блога Дракон-линуксоид.


Тэги: arm gcc
+ 7 -
Похожие Поделиться

Volant 18.06.2010 17:58 #
+ 0 -
Попробовал. Застрял на ошибке. Ниже некоторый скрин с экрана


checking whether ln -s works... yes
checking for arm-elf-gcc... /home/volant/ARM/gcc-arm/gcc-4.4.3/host-i686-pc-linux-gnu/gcc/xgcc -B/home/volant/ARM/gcc-arm/gcc-4.4.3/host-i686-pc-linux-gnu/gcc/ -B/home/volant/ARM/gcc-arm//arm-elf/bin/ -B/home/volant/ARM/gcc-arm//arm-elf/lib/ -isystem /home/volant/ARM/gcc-arm//arm-elf/include -isystem /home/volant/ARM/gcc-arm//arm-elf/sys-include
checking for suffix of object files... configure: error: in `/home/volant/ARM/gcc-arm/gcc-4.4.3/arm-elf/libgcc':
configure: error: cannot compute suffix of object files: cannot compile
See `config.log' for more details.
make<1>: *** Ошибка 1
make<1>: Выход из каталога `/home/volant/ARM/gcc-arm/gcc-4.4.3'
make: *** Ошибка 2
volant@volant:~/ARM/gcc-arm/gcc-4.4.3$
h0rr0rr_drag0n 20.06.2010 11:07 #
+ 0 -
Кажется вы собираете gcc в том же каталоге в котором и расположены его исходные файлы.
Volant 20.06.2010 13:59 #
+ 0 -
Да, с этой ошибкой разобрался. Вчера уже застрял, что не найден arm-elf-cc, кажется.

Запустил сейчас make, чтобы скопировать ошибку, вот что получил:

make<5>: Вход в каталог `/home/volant/ARM/gcc-arm/gcc-build/arm-elf/thumb/libgcc'
/bin/bash ../../../../gcc-4.4.3/libgcc/../mkinstalldirs ../../.././gcc/thumb
/usr/bin/install -c -m 644 libgcc.a ../../.././gcc/thumb/
chmod 644 ../../.././gcc/thumb/libgcc.a
arm-elf-ranlib ../../.././gcc/thumb/libgcc.a
/bin/bash: arm-elf-ranlib: команда не найдена

Хотя здесь она есть:
~/ARM/binutils-arm/arm-elf/bin$ ls -al ranlib
-rwxr-xr-x 2 volant volant 2558552 2010-06-19 00:22 ranlib

configure для gcc:

../gcc-4.4.3/configure --target=arm-elf --prefix=/home/volant/ARM/gcc-build/ --enable-interwork --enable-multilib --with-float=soft --enable-languages="c,c++" --with-newlib --with-headers=/home/volant/ARM/newlib-1.18.0/newlib/libc/include/ --with-gmp=/usr/local/ --with-mpfr=/usr/local/ --with-gmp=/usr/local/ --with-mpfr=/usr/local/ --with-gmp-include=/usr/local/include/ --with-mpfr-include=/usr/local/include/

для newlib:

./configure --target=arm-elf --prefix=/home/volant/ARM/newlib/ --enable-interwork --enable-multilib --with-float=soft
zhevak 20.06.2010 22:54 #
+ 1 -
еще вариант сборки:
http://forum.e-lug.ru/viewtopic.php?id=397
Volant 21.06.2010 08:42 #
+ 0 -
Спасибо за подсказку - убрав c++ все прекрасно собралось.
h0rr0rr_drag0n 03.08.2010 20:11 #
+ 0 -
Добавлен важный апдейт, про libmpfr!!!11
arm-linux 02.02.2011 16:15 #
+ 0 -
Привет! Не подскажешь, какие версии binutils и gcc использовались в примере?
Пробовал GCC-4.0.0 и binutils-2.21, GCC-3.4.3 и binutils-2.21 - всё мимо.
Ошибка на pastebin
(для gcc-3.4.3 та же)
h0rr0rr_drag0n 07.02.2011 17:57 #
+ 0 -
Установить это уже невозможно ибо я теперь пользуюсь arm-gcc из убунтовских репов...
zhevak 05.02.2011 01:26 #
+ 0 -
Я вроде как закончил писать мега-скрипт для установки тулчейна для АРМ-ов.

У меня Ubuntu 10.10 на ней работает. Но я пока боюсь выкладывать его на общее обозрение. Хочется немного еще потестить -- на разном железе, на разных дистрибутивах.

Кто хочет и может помочь, прошу писать сюда (или сюда http://forum.e-lug.ru/viewtopic.php?id=397&p=3 ).

Смотреть онлайн бесплатно

Онлайн видео бесплатно


Смотреть русское с разговорами видео

Online video HD

Видео скачать на телефон

Русские фильмы бесплатно

Full HD video online

Смотреть видео онлайн

Смотреть HD видео бесплатно

School смотреть онлайн