Советы по созданию кросс-компилятора для Xscale ARM?
Я играю с платой разработки PXA270 Xscale (аналогичной Gumstix), и мне предоставили кросс-компилятор, но это GCC 3.3.3. Я хотел бы узнать, как создать свой собственный кросс-компилятор, чтобы я мог настроить его, но у меня были проблемы с получением crosstools и crosstools-ng для успешной сборки цепочки инструментов. Моими основными потребностями являются использование GCC 4.2.X и возможность использовать soft float. Я использую Ubuntu 9. У кого-нибудь есть какие-либо рекомендации или советы по созданию набора инструментов для такой системы?
Заранее спасибо,
Бен
5 ответов
http://www.gnuarm.com/ есть инструкции по созданию собственного кросс-компилятора ARM, а также файлы, доступные для загрузки. У них там нет GCC 4.2.x, но я построил его, используя шаги, очень похожие на эти инструкции, без особых проблем.
Почему вы хотите программное обеспечение с плавающей точкой? Это будет очень медленно; большинству приложений действительно нужно использовать реализацию с фиксированной запятой (читай: целые числа).
Если вам не удается построить кросс-компилятор с использованием crosstool*, вы вряд ли сможете сделать это без них. Это не просто!
Тем не менее, вы можете легко получить последние кросс-компиляторы на Ubuntu, отредактировав /etc/apt/sources.list
включать
deb http://www.emdebian.org/debian/ lenny main
потом говорю
apt-get update apt-get install g{cc,++}-4.3-arm-linux-gnueabi
Я тоже использовал crosstool и смог собрать arm-xscale-linux-gcc под Cygwin. Инструкции находятся здесь: http://sourceforge.net/apps/mediawiki/imote2-linux/index.php?title=ToolsGccArm
Короткий ответ, очень сложно. Более длинный ответ, продолжайте пытаться, вы можете наткнуться на это, но, вероятно, нет. Xscale с hard float более вероятен и просто не использует плавающую точку. Я знаю, что перепробовал много комбинаций и потерпел неудачу. Существует причина, по которой комбинация, которую вы ищете, обычно использует более старый gcc, последний из которых работает. Вы могли бы взглянуть на кодовые источники, чтобы увидеть, что у них есть, использовать там инструменты или узнать, что они делают, вероятно, ваш лучший выбор.
Я использовал кросс-инструмент Дэна Кегеля для создания моей крестообразной цепочки для инструментов. Потребовалось несколько попыток, но в итоге я смог сделать это правильно.
Я рекомендую просмотреть матрицу результатов сборки для различных архитектур, чтобы определить подходящую комбинацию заголовков ядра gcc, glibc, binutils и linux.
Ниже приведен скрипт, который я использовал для создания моей крестообразной цепочки инструментов. Я понимаю, что мои требования немного отличаются от ваших, но вы можете изменить его в соответствии со своими потребностями.
#!/bin/sh
set -ex
# Extract crosstool
tar zxf crosstool-0.43.tar.gz
ln -sf crosstool-0.43 crosstool
# Create .dat file for toolchain
cat << EOF > $HOME/arm-cross.dat
BINUTILS_DIR=binutils-2.15
GCC_DIR=gcc-3.4.5
GCC_EXTRA_CONFIG=--with-float=soft
GCC_LANGUAGES=c,c++
GLIBC_ADDON_OPTIONS==linuxthreads,
GLIBC_DIR=glibc-2.3.6
GLIBC_EXTRA_CONFIG=--without-fp
GDB_DIR=gdb-6.5
KERNELCONFIG="\$HOME/crosstool/arm.config"
LINUX_DIR=linux-2.6.12.6
LINUX_SANITIZED_HEADER_DIR=
SHARED_MODE=--enable-shared
TARGET=arm-softfloat-linux-gnu
TARGET_CFLAGS=-O
BUILD_DIR="\$HOME/crosstool/build/\$TARGET/\$GCC_DIR-\$GLIBC_DIR"
PREFIX="/usr/crossgnu/\$GCC_DIR-\$GLIBC_DIR/\$TARGET"
SRC_DIR="\$HOME/crosstool/build/\$TARGET/\$GCC_DIR-\$GLIBC_DIR"
TARBALLS_DIR="\$HOME/downloads"
TOP_DIR="\$HOME/crosstool"
EOF
# Create toolchain directory
sudo mkdir -p /usr/crossgnu
sudo chown $USER /usr/crossgnu
# Build toolchain
pushd crosstool
eval `cat $HOME/arm-cross.dat` sh all.sh --gdb --notest
popd
Примечание: у меня был tarball- архив crosstool-0.43.tar.gz в том же каталоге, из которого я запускал скрипт.