Здесь показаны различия между двумя версиями данной страницы.
Следующая версия | Предыдущая версия | ||
arm_build [2018/10/18 16:33] reug создано |
arm_build [2018/10/19 10:13] (текущий) reug |
||
---|---|---|---|
Строка 1: | Строка 1: | ||
====== Средства разработки и сборка библиотек для ARM ====== | ====== Средства разработки и сборка библиотек для ARM ====== | ||
+ | |||
+ | ===== Установка ARM Toolchain и настройка окружения ===== | ||
+ | |||
+ | Скачиваем linaro toolchain с этого адреса: | ||
+ | |||
+ | [[https://releases.linaro.org/components/toolchain/binaries/latest-7/arm-linux-gnueabihf/gcc-linaro-7.3.1-2018.05-x86_64_arm-linux-gnueabihf.tar.xz|arm-linux-gnueabihf 32-bit Armv7 Cortex-A, hard-float, little-endian]] и распаковываем, например, в каталог ''/opt/''. | ||
+ | |||
+ | Далее можно поставить символьную ссылку, чтобы корневой путь toolchain был удобным: | ||
+ | <code bash> | ||
+ | ln -s gcc-linaro-7.3.1-2018.05-x86_64_arm-linux-gnueabihf /opt/gcc-linaro | ||
+ | </code> | ||
+ | |||
+ | Примечание: данная сборка имеет множество повторяющихся файлов. Данный скрипт освободит 137 Мбайт. | ||
+ | Запускать из каталога gcc-linaro. | ||
+ | <code> | ||
+ | cd bin | ||
+ | |||
+ | rm arm-linux-gnueabihf-c++ | ||
+ | ln -s arm-linux-gnueabihf-g++ arm-linux-gnueabihf-c++ | ||
+ | rm arm-linux-gnueabihf-gcc | ||
+ | ln -s arm-linux-gnueabihf-gcc-7.3.1 arm-linux-gnueabihf-gcc | ||
+ | rm arm-linux-gnueabihf-ld | ||
+ | ln -s arm-linux-gnueabihf-ld.bfd arm-linux-gnueabihf-ld | ||
+ | cd .. | ||
+ | |||
+ | cd arm-linux-gnueabihf | ||
+ | |||
+ | rm -r lib | ||
+ | ln -s libc/lib lib | ||
+ | |||
+ | rm bin/* | ||
+ | for t in ar as ld ld.bfd ld.gold nm objcopy objdump ranlib readelf strip | ||
+ | do | ||
+ | ln -s ../../bin/arm-linux-gnueabihf-$t bin/$t | ||
+ | done | ||
+ | |||
+ | rm libc/usr/libexec/getconf/* | ||
+ | for t in POSIX_V6_ILP32_OFF32 POSIX_V6_ILP32_OFFBIG POSIX_V7_ILP32_OFF32 POSIX_V7_ILP32_OFFBIG XBS5_ILP32_OFF32 XBS5_ILP32_OFFBIG | ||
+ | do | ||
+ | ln -s ../../bin/getconf libc/usr/libexec/getconf/$t | ||
+ | done | ||
+ | |||
+ | cd .. | ||
+ | |||
+ | cd share/man/man1 | ||
+ | rm arm-linux-gnueabihf-g++.1 | ||
+ | ln -s arm-linux-gnueabihf-gcc.1 arm-linux-gnueabihf-g++.1 | ||
+ | </code> | ||
+ | |||
+ | ===== Настройка окружения для сборки загрузчика U-Boot и ядра Linux ===== | ||
+ | |||
+ | <code bash> | ||
+ | export ARCH=arm | ||
+ | export CROSS_COMPILE=arm-linux-gnueabihf- | ||
+ | export PATH=/opt/gcc-linaro/bin:$PATH | ||
+ | </code> | ||
+ | |||
+ | После этого в командах ''make'' уже не нужно указывать архитектуру и тип кросс-компиляции. | ||
+ | |||
===== Кросс-сборка распространенных библиотек ===== | ===== Кросс-сборка распространенных библиотек ===== | ||
Строка 9: | Строка 68: | ||
cd libserialport-0.1.1 | cd libserialport-0.1.1 | ||
./configure --host=arm-linux-gnueabihf --prefix=<PREFIX> | ./configure --host=arm-linux-gnueabihf --prefix=<PREFIX> | ||
+ | </code> | ||
+ | <code> | ||
make | make | ||
make install | make install | ||
+ | </code> | ||
+ | Если не нужна отладочная информация, то вместо ''make install'' дать команду | ||
+ | <code> | ||
+ | make install-strip | ||
</code> | </code> | ||
+ | |||
==== zlib ==== | ==== zlib ==== | ||
<code> | <code> | ||
+ | export CC="arm-linux-gnueabihf-gcc" | ||
+ | export CPP="arm-linux-gnueabihf-gcc -E" | ||
+ | export AR="arm-linux-gnueabihf-ar" | ||
export PATH=/opt/gcc-linaro/bin:$PATH | export PATH=/opt/gcc-linaro/bin:$PATH | ||
- | cd libserialport-0.1.1 | + | cd zlib-1.2.11 |
- | ./configure --host=arm-linux-gnueabihf --prefix=<PREFIX> | + | ./configure --prefix=<PREFIX> |
make | make | ||
make install | make install | ||
</code> | </code> | ||