- 论坛徽章:
- 0
|
http://ftp.snapgear.org:9981/pub/snapgear/tools/arm-linux/
HOWTO build arm-linux toolchain for ARM/XSCALE
----------------------------------------------
These instructions document how to build an arm-linux tool chain
that contains both little-endian and big-endian target libraries.
1. Packages used:
binutils-2.17.tar.gz
gcc-4.2.1.tar.gz
glibc-2.3.6.tar.gz
glibc-linuxthreads-2.3.6.tar.gz
elf2flt-20060708.tar.gz
2. binutils-2.17
tar xvzf binutils-2.17.tar.gz
cd binutils-2.17
mkdir arm-linux
cd arm-linux
../configure --target=arm-linux --with-lib-path=/usr/local/arm-linux/lib:/usr/local/arm-linux/lib/be:/usr/local/arm-linux/lib/soft-float:/usr/local/arm-linux/lib/be/soft-float
make
make install
chmod 777 /usr/local/arm-linux
3. gcc-4.2.1
tar xvjf gcc-4.2.1.tar.bz2
cd gcc-4.2.1
cp $(ATTACHED t-linux file) gcc/config/arm/
vi gcc/config/arm/linux-elf.h
-- remove line that defines LIBGCC_SPEC
vi gcc/config/arm/lib1funcs.asm
-- change line 999 which are:
mov r0, #SIGFPE
bl SYM(raise) __PLT__
to be:
bl SYM (__div0) __PLT__
mov r0, #0 @ About as wrong as it could be.
mkdir arm-linux
cd arm-linux
../configure --target=arm-linux --disable-shared --disable-threads \
--disable-libmudflap --disable-libssp \
--with-headers=linux-2.6.x/include \
--prefix=/usr/local --with-gnu-as --with-gnu-ld --enable-multilib \
--enable-languages=c
make
[ ignore build failure, move to next step! ]
make install
4. glibc-2.3.6 (big-endian)
tar xvzf glibc-2.3.6.tar.gz
cd glibc-2.3.6
tar xvzf glibc-linuxthreads-2.3.6.tar.gz
rm -rf nptl
vi sysdeps/unix/sysv/linux/arm/ioperm.c
- change "BUS_ISA" to be "CTL_BUS_ISA" lines 103 and 104
vi config.make.in
- change "slibdir = @...@" to "slibdir = @libdir@"
vi Makeconfig
- remove any usage occurrances of -lgcc_eh
vi sysdeps/unix/sysv/linux/bind.S
- comment out line 5 "weak_alias (bind, __bind)"
vi sysdeps/unix/sysv/linux/getsockname.S
- comment out line 5 "weak_alias (getsockname, __getsockname)"
vi sysdeps/unix/sysv/linux/listen.S
- comment out line 5 "weak_alias (listen, __listen)"
vi sysdeps/unix/sysv/linux/setsockopt.S
- comment out line 5 "weak_alias (setsockopt, __setsockopt)"
vi sysdeps/arm/dl-machine.h
- line 360, remove "static" before function fix_bad_pc24
mkdir arm-linux
cd arm-linux
CC="arm-linux-gcc -mbig-endian" \
AS="arm-linux-as -mbig-endian" \
LD="arm-linux-ld -EB" \
../configure --host=arm-linux --build=i686-pc-linux-gnu \
--with-headers=linux-2.6.x/include \
--enable-add-ons --enable-shared --prefix=/usr/local/arm-linux \
--libdir=/usr/local/arm-linux/lib/be
make
make install
5. glibc-2.3.6 (little-endian)
tar xvzf glibc-2.3.6.tar.gz
cd glibc-2.3.6
tar xvzf glibc-linuxthreads-2.3.6.tar.gz
[ Apply same fixes as above ]
mkdir arm-linux
cd arm-linux
CC="arm-linux-gcc" \
AS="arm-linux-as" \
LD="arm-linux-ld" \
../configure --host=arm-linux --build=i686-pc-linux-gnu \
--with-headers=linux-2.6.x/include \
--enable-add-ons --enable-shared --prefix=/usr/local/arm-linux
make
make install
6. glibc-2.3.6 (big-endian/soft-float)
tar xvzf glibc-2.3.6.tar.gz
cd glibc-2.3.6
tar xvzf glibc-linuxthreads-2.3.6.tar.gz
[ Apply same fixes as above ]
mkdir arm-linux
cd arm-linux
CC="arm-linux-gcc -mbig-endian -msoft-float" \
AS="arm-linux-as -mbig-endian" \
LD="arm-linux-ld -EB" \
../configure --host=arm-linux --build=i686-pc-linux-gnu \
--with-headers=linux-2.6.x/include \
--enable-add-ons --enable-shared --prefix=/usr/local/arm-linux \
--without-fp --libdir=/usr/local/arm-linux/lib/be/soft-float
make
make install
7. glibc-2.3.6 (little-endian/soft-float)
tar xvzf glibc-2.3.6.tar.gz
cd glibc-2.3.6
tar xvzf glibc-linuxthreads-2.3.6.tar.gz
[ Apply same fixes as above ]
mkdir arm-linux
cd arm-linux
CC="arm-linux-gcc -msoft-float" \
AS="arm-linux-as" \
LD="arm-linux-ld" \
../configure --host=arm-linux --build=i686-pc-linux-gnu \
--with-headers=linux-2.6.x/include \
--enable-add-ons --enable-shared --prefix=/usr/local/arm-linux \
--without-fp --libdir=/usr/local/arm-linux/lib/soft-float
make
make install
8. gcc-4.2.1 (c++, etc)
tar xvzf gcc-4.2.1.tar.gz
cd gcc-4.2.1
cp $(ATTACHED t-linux file) gcc/config/arm/
vi gcc/config/arm/t-linux
- remove all "-Dinhibit_libc" occruances
vi gcc/config/arm/linux-elf.h
-- remove line that defines LIBGCC_SPEC
vi gcc/config/arm/lib1funcs.asm
-- change line 999 which are:
mov r0, #SIGFPE
bl SYM(raise) __PLT__
to be:
bl SYM (__div0) __PLT__
mov r0, #0 @ About as wrong as it could be.
perl -pi -e 's/int namelen/unsigned int namelen/' libjava/java/net/natInetAddressPosix.cc
mkdir arm-linux
cd arm-linux
../configure --target=arm-linux --disable-shared \
--prefix=/usr/local --with-headers=linux-2.6.x/include \
--with-gnu-as --with-gnu-ld --enable-multilib
make
make install
9. elf2flt
tar xvzf elf2flt-20060708.tar.gz
./configure --target=arm-linux \
--with-libbfd=/binutils-2.17/arm-linux/bfd/libbfd.a \
--with-libiberty=/binutils-2.17/arm-linux/libiberty/libiberty.a \
--with-bfd-include-dir=/binutils-2.17/arm-linux/bfd
make
make install
10. packaging
cd /
find /usr/local/arm-linux -name CVS -type d | xargs rm -rf
strip /usr/local/arm-linux/bin/*
strip /usr/local/bin/arm-linux-*
strip /usr/local/libexec/gcc/arm-linux/4.2.1/*
tar cvzf /tmp/arm-linux-tools-xxxxxxxx.tar.gz
/usr/local/arm-linux \
/usr/local/lib/gcc/arm-linux \
/usr/local/libexec/gcc/arm-linux \
/usr/local/bin/arm-linux-* \
/usr/local/bin/genext2fs
------------------------------------------------------------------------------
APPENDIX A -- modified t-linux for gcc-4.2.1
------------------------------------------------------------------------------
# Just for these, we omit the frame pointer since it makes such a big
# difference. It is then pointless adding debugging.
TARGET_LIBGCC2_CFLAGS = -fomit-frame-pointer -fPIC -Dinhibit_libc -D__gthr_posix
LIBGCC2_DEBUG_CFLAGS = -g0
# Don't build enquire
ENQUIRE=
LIB1ASMSRC = arm/lib1funcs.asm
LIB1ASMFUNCS = _udivsi3 _divsi3 _umodsi3 _modsi3 _dvmd_lnx \
_bb_init_func _call_via_rX _interwork_call_via_rX \
_negdf2 _addsubdf3 _muldivdf3 _cmpdf2 _unorddf2 _fixdfsi _fixunsdfsi \
_truncdfsf2 _negsf2 _addsubsf3 _muldivsf3 _cmpsf2 _unordsf2 \
_fixsfsi _fixunssfsi
MULTILIB_OPTIONS = mlittle-endian/mbig-endian mhard-float/msoft-float
MULTILIB_DIRNAMES = le be hard-float soft-float
EXTRA_MULTILIB_PARTS = crtbegin.o crtbeginS.o crtend.o crtendS.o crti.o crtn.o crtbeginT.o
LIBGCC = stmp-multilib
INSTALL_LIBGCC = install-multilib
T_CFLAGS = -Dinhibit_libc -D__gthr_posix_h
# Assemble startup files.
$(T)crti.o: $(srcdir)/config/arm/crti.asm $(GCC_PASSES)
$(GCC_FOR_TARGET) $(GCC_CFLAGS) $(MULTILIB_CFLAGS) $(INCLUDES) \
-c -o $(T)crti.o -x assembler-with-cpp $(srcdir)/config/arm/crti.asm
$(T)crtn.o: $(srcdir)/config/arm/crtn.asm $(GCC_PASSES)
$(GCC_FOR_TARGET) $(GCC_CFLAGS) $(MULTILIB_CFLAGS) $(INCLUDES) \
-c -o $(T)crtn.o -x assembler-with-cpp $(srcdir)/config/arm/crtn.asm
------------------------------------------------------------------------------
arm-linux-gcc工具链下载13665101072
2009-6-16 13:11:05
收藏
|
打印
|
投票(1)
|
评论(0)
| 阅读(4914) ◇字体:[
大
中
小
]
http://www.handhelds.org/download/projects/toolchain/
http://ftp.arm.linux.org.uk/pub/armlinux/toolchain/
http://so.hustonline.net/list.aspx?word=arm-linux-gcc-4.1.2&schoolInput=%CB%F9%D3%D0%D1%A7%D0%A3&schoolId=0&level=0
http://ftp.snapgear.org:9981/pub/snapgear/tools/arm-linux/
3.4.1
最 常用的编译版本是arm-linux-gcc-3.4.1 和 arm-linux-3.3.2 的,现在的嵌入式开发基本上用的是这些,3.4.1的用于编译2.6的内核,而3.3.2的常用于编译busybox,和bootloader(u- boot),编译的版本配合不好的话就会出错,所以要选择好编译版本,如果这个版本不行的话,可以试试其他的版本,在uclinux上用的多的就是 arm-elf-tools-20030314
http://www.handhelds.org/download/projects/toolchain/arm-linux-gcc-3.4.1.tar.bz2
http://www.handhelds.org/download/projects/toolchain/arm-linux-gcc-3.3.2.tar.bz2
如 果系统中又装了3.4.1和3.3.2的版本的话,可以在 .bashrc 中通过设置PATH来指定默认的版本为GCC3.4.1,然后再打开一个新的终端就可以用了,如果需要使用3.3.2的话,可以用具体的路径指定 (/usr/local/arm/3.3.2/bin/arm-linux-)。
在~/.bashrc最后加入: export PATH=$PATH:/usr/local/arm/3.4.1/bin
如果编译u-boot或者busybox的时候指定3.3.2的版本:
CROSS_COMPILE=/usr/local/arm/3.3.2/bin/arm-linux-
3.4.1的就直接用arm-linux-就可以了。
arm-linux-gcc-4.2.1的版本在
http://ftp.snapgear.org:9981/pub/snapgear/tools/arm-linux/
这里可以下载,
arm-linux-tools-20070808.tar.gz
这个可能是4.2.1的版本,因为下面有编译4.2.1的方法还有相应的代码包,
build-arm-linux-4.2.1
,此版本由于过大,我没有下载。
下面的这个是ARM官方给的下载链接4.2.1的
http://www.codesourcery.com/gnu_toolchains/arm/download.html
,然后将HOST选择为IA32 GNU/Linux,点击下载就可以了。不过前缀为arm-none-eabi-而不是arm-linux-有点郁闷。
自 己编译一个交叉编译环境是个很艰难的过程,有些软件又依赖不同的版本,所以自己维护一个是相当费时费力伤脑筋的过程,关于arm-linux- toolchain,arm-elf-toochain的区别,主要是编译过程中所用的C库的不同,arm-linux用的是glibc,arm-elf 用的是newlibc,ulibc等,具体的可以去网上搜集,一般编译arm+linux的用arm-linux-,而编译uclinux则用arm- elf-
这是我在网上找到的一些下载交叉编译环境的网站
0.http://ftp.arm.linux.org.uk/pub/armlinux/toolchain
[ ] cross-2.95.3.tar.bz2 20-Jul-2001 21:12 35M
[ ] cross-3.0.tar.bz2 20-Jul-2001 22:27 39M
[ ] cross-3.2.tar.bz2 23-Aug-2002 11:04 81M
[ ] cross-3.2.tar.gz 23-Aug-2002 10:01 93M
1.http://opensrc.sec.samsung.com/download.html
GCC 3.4.0 based :
arm-uclinux-tools-base-gcc3.4.0-20040713.sh (binutil-2.15 based)
arm-uclinux-tools-c++-gcc3.4.0-20040713.sh
arm-uclinux-tools-gdb-20040713.sh
GCC 2.95.3 based :
arm-elf-tools-20040427.sh by Hyok, Apr 27, 2004. (binutil-2.14/linux-2.6.5 based)
arm-elf-tools-20040305.sh by Hyok, Mar 5, 2004. (binutil-2.14 based)
2.http://www.handhelds.org/download/projects/toolchain/
[ ]arm-linux-gcc-3.3.2.tar.bz2 03-Nov-2003 10:23 71M
[ ]arm-linux-gcc-3.4.1.tar.bz2 29-Jul-2004 14:01 41M
3.http://linux.omap.com/pub/toolchain/
[ ]obsolete-gcc-3.3.2.tar.bz2 15-May-2004 12:18 76M
4.http://ftp.snapgear.org:9981/pub/snapgear/tools/arm-linux/
5.http://www.uclinux.org/pub/uClinux/arm-elf-tools/
6.http://www.w-ww.org/~rmoravcik/sbc2410/toolchains/arm-linux-gcc-4.1.2-moko.
本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u3/90973/showart_1987764.html |
|