вторник, 1 апреля 2008 г.

arm-iwmmxt-linux-gnueabi toolchain.

Долго ли коротко боролся я с glibc, но вот появилась новая плата Colibri Toradex PXA270, соответственно новая цель arm-iwmmxt-linux-gnueabi, и дело с glibc заладилось...

Кстати я не исключаю возможности работоспособности данного тулчейна, всмысле возможности использования нового тулчейна, и с старой платой LPC2468, теоретически они вполне совместимы.

Не буду сильно усложнять - как распределить каталоги каждый решит для себя.

Использованы следующие компоненты: binutils-2.18, gcc-4.2.2, glibc-2.7, ядро какое есть.
Для систем без MMU можно использовать тот же elf2flt-20060506, но его функционирование я не тестировал (Мы пока забили на LPC2468, она плохо подходит для наших целей - слишком медленная).

binutils configure: --prefix=$(PREFIX) --target=$(TARGET) --disable-nls
ядро: make header_install INSTALL_HDR_PATH=$(PREFIX)$(TARGET)/
gcc stage1 configure: --prefix=$(PREFIX) --target=$(TARGET) --enable-languages=c --with-arch=iwmmxt --with-tune=iwmmxt --disable-shared --disable-nls --without-mudflap
glibc configure: --prefix=$(PREFIX)$(TARGET)/ --host=$(TARGET) --target=$(TARGET) --with-headers=$(PREFIX)$(TARGET)/include --with-tls --with-__thread --enable-kernel=2.6.23 --disable-nls
gcc stage2 configure: --prefix=$(PREFIX) --target=$(TARGET) --enable-languages=c,c++ --with-arch=iwmmxt --with-tune=iwmmxt --disable-nls

elf2flt как и раньше, nls наверное можно наверное и разрешить.

Чтобы glibc нормально собрался - надо наложить на него пару патчей:

glibc-nptl-crosscompile.patch:

--- glibc-2.4/nptl/sysdeps/pthread/configure.in.ark 2006-03-12 00:41:40.000000000 +0100
+++ glibc-2.4/nptl/sysdeps/pthread/configure.in 2006-03-12 00:44:08.000000000 +0100
@@ -45,5 +45,6 @@
AC_MSG_ERROR([the compiler must support C cleanup handling])
fi
else
- AC_MSG_ERROR(forced unwind support is required)
+ AC_MSG_WARN([forced unwind support is required, can't be verified while crosscompiling])
+ AC_DEFINE(HAVE_FORCED_UNWIND)
fi
--- glibc-2.4/nptl/sysdeps/pthread/configure.ark 2006-03-12 00:42:47.000000000 +0100
+++ glibc-2.4/nptl/sysdeps/pthread/configure 2006-03-12 00:44:08.000000000 +0100
@@ -153,7 +153,10 @@
{ (exit 1); exit 1; }; }
fi
else
- { { echo "$as_me:$LINENO: error: forced unwind support is required" >&5
-echo "$as_me: error: forced unwind support is required" >&2;}
- { (exit 1); exit 1; }; }
+ { echo "$as_me:$LINENO: WARNING: forced unwind support is required, can't be verified while crosscompiling" >&5
+echo "$as_me: WARNING: forced unwind support is required, can't be verified while crosscompiling" >&2;}
+ cat >>confdefs.h <<\_ACEOF
+#define HAVE_FORCED_UNWIND 1
+_ACEOF
+
fi


glibc-libeh.patch:

Submitted By: Jim Gifford (patches at jg555 dot com)
Date: 2005-07-20
Initial Package Version: 2.3.5
Origin: Rene Rebe
Upstream Status: Unknown
Description: Removes dependency for libgcc_eh

--- glibc-2.3.5/Makeconfig.orig 2005-07-21 04:53:30.000000000 +0000
+++ glibc-2.3.5/Makeconfig 2005-07-21 04:53:49.000000000 +0000
@@ -503,12 +503,12 @@
libunwind = -lunwind
endif
ifneq ($(have-as-needed),yes)
- libgcc_eh := -lgcc_eh $(libunwind)
+ libgcc_eh := $(libunwind)
else
libgcc_eh := -Wl,--as-needed -lgcc_s$(libgcc_s_suffix) $(libunwind) -Wl,--no-as-needed
endif
gnulib := -lgcc $(libgcc_eh)
-static-gnulib := -lgcc -lgcc_eh $(libunwind)
+static-gnulib := -lgcc $(libunwind)
libc.so-gnulib := -lgcc
endif
ifeq ($(elf),yes)


Да, чуть не забыл.. для glibc еще необходим glibc-ports-2.7, который надо распаковать в каталог glibc-2.7.

Если что-то не получается - пишите, подскажу.