ARM Cross Compiler Toolchain 4.6.0

本文档详细介绍了在Ubuntu 9.10环境下,使用GCC 4.6.0构建S3C6410交叉编译工具链的过程,包括获取源码、解压、配置环境、编译binutils、gcc、glibc等步骤,最终完成支持C和C++的完整gcc编译器的构建。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

S3C6410交叉编译工具链的制作过程

环境: Ubuntu9.10, with kernel 2.6.31-14-generic SMP Inter Core^2 T6600

工具 : GCC 4.4.1(Ubuntu 4.4.1-4ubuntu9), binutils 2.20, glibc 2.10, make 3.81 automake 1.11, autoconf 2.64, flex 2.5.35, bison 2.4.1

源码:  linux kernel 2.6.39.2, binutils 2.21, gcc 4.6.0, glibc 2.13, glibc-ports 2.13, gmp 5.0.2, mpfr 3.0.1, mpc 0.8.2

 

以下所有内容为第2步中install.sh文件中的内容,可以拷贝到文件中配置好以下环境直接运行,获得交叉编译工具链

#!/bin/sh

#1.获取源码

#进入http://www.kernel.org,下载linux kernel 2.6.39.2

#进入http://ftp.gnu.org/gnu,下载binutils 2.21, gcc 4.6.0, glibc 2.13,  glibc-ports 2.13, gmp 5.0.2, mpfr 3.0.1, mpc 0.8.2

 

#2.建立工作目录,install.sh文件为automatic script

cd /home/stu/tools/eabi

mkdir build src tar

touch install.sh

#把第一步中下载的源代码放入tar目录中

 

#3.解压源代码(有关gmp、mpfr、mpc压缩包的说明请查看gcc编译配置说明和三个压缩包的说明)

cd tar

tar xjvf linux-2.6.39.2.tar.bz2 -C /home/stu/tools/eabi/src

tar xjvf binutils-2.21.tar.bz2 -C /home/stu/tools/eabi/src

tar xjvf gcc-4.6.0.tar.bz2 -C /home/stu/tools/eabi/src

tar xjvf glibc-2.13.tar.bz2 -C /home/stu/tools/eabi/src

tar xjvf glibc-ports-2.13.tar.bz2 -C /home/stu/tools/eabi/src

tar xjvf gmp-5.0.2.tar.bz2 -C /home/stu/tools/eabi/src

tar xjvf mpfr-3.0.1.tar.bz2 -C /home/stu/tools/eabi/src

tar xjvf mpc-0.8.2.tar.bz2 -C /home/stu/tools/eabi/src

mv /home/stu/tools/eabi/src/gmp-5.0.2 /home/stu/tools/eabi/src/gcc-4.6.0/gmp

mv /home/stu/tools/eabi/src/mpfr-3.0.1 /home/stu/tools/eabi/src/gcc-4.6.0/mpfr

mv /home/stu/tools/eabi/src/mpc-0.8.2 /home/stu/tools/eabi/src/gcc-4.6.0/mpc

mv /home/stu/tools/eabi/src/glibc-ports-2.13 /home/stu/tools/eabi/src/gcc-4.6.0/glibc-2.13/ports

cd -

 

#4.全局环境设置

export PROROOT=/home/stu/tools/eabi
export TARGET=arm-abzc-linux-gnueabi
export PREFIX=/opt/ZC6410/toolschain/4.6.0
export TARGET_PREFIX=$PREFIX/$TARGET
export PATH=$PREFIX/bin:$PATH

 

#(编译步骤按顺序bintuils、gcc、linux-headers、glibc、gcc)

#5.编译binutils(在$PROROOT目录下)

mkdir build/build-bintuils

cd build/build-binutils

# --target arm-abzc-linux-gnueabi,其中abzc为vendor,含义是安博中程科技有限公司,gnueabi必须加,文档中有说明

# --prefix make install根目录

# --disable-nls disable native language support

# 配置选项很重要,有些配置是默认选择和不选择的,不一一列举,请./configure --help查看需要的配置选项

 ../../src/binutils-2.21/configure --target=$TARGET --prefix=$PREFIX  --disable-nls

make configure-host

make 2>&1 | tee make.out

make install

cd -

 

#6.编译gcc(没有abi的支持,编译出来的gcc可以通过-nostdlib等选项编译bootloader、linux kernel等无需库支持的源码)

#此步骤目的是为了编译后面的glibc做准备

mkdir build/build-gcc
cd build/build-gcc

# --with-sysroot 告诉GCC把此选项指定的目录包括子目录作为目标系统的根文件系统

# --without-headers 在编译glibc动态库文件libc.so...的时候打开

# --with-newlib 生成libgcc.a作为C库使用

# --disable-libgomp 不用生成运行库libgomp

# --disable-libmudflap 不用生成运行库libgomp --disable-libmudflap --disable-libssp 同理

# --disable-shared 不生成动态库,只生成静态库文件作为编译用

# --disable-threads 不对系统做特殊支持,相当于--enable-threads=single

# --enable-languages=c 编译生成支持c的编译器

../../src/gcc-4.6.0/configure --target=$TARGET --with-sysroot=$TARGET_PREFIX/sysroot --prefix=$PREFIX --without-headers --with-newlib --disable-nls --disable-libgomp --disable-libmudflap --disable-libssp --disable-shared --disable-threads --enable-languages=c
make all-gcc all-target-libgcc 2>&1 | tee make.out
make install-gcc install-target-libgcc

cd -
#because of "--disable-shared", this file is needed by libgcc_eh.a

cd $PREFIX/lib/gcc/$TARGET/4.6.0
ln -s libgcc{,_eh}.a

cd -

 

#7.编译glibc所需要的内核库文件

cd /home/stu/tools/eabi/src/linux-2.6.39.2
make mrproper
make ARCH=arm headers_check
make ARCH=arm INSTALL_HDR_PATH=$TARGET_PREFIX headers_install
cd -

 

8.编译glibc(libc.so...)

mkdir build/build-glibc
cd build/build-glibc

# --enable-add-ons 如果选项后面不赋值,默认编译源代码所有的子目录

# --enable-kernel=2.6.28 这个选项只用在编译GNU/linux当中有用,表示支持的内核最小版本

# --disable-profile 不编译一些介绍信息

# --with-tls 对一些兼容性问题的检查支持

# --with-headers 系统头文件路径

# libc_cv_forced_unwind=yes nptl支持

# libc_cv_c_cleanup=yes nptl支持

../../src/glibc-2.13/configure --host=$TARGET --prefix=$TARGET_PREFIX/sysroot --enable-add-ons --enable-kernel=2.6.28 --disable-profile --with-tls --with-headers=$TARGET_PREFIX/usr/include libc_cv_forced_unwind=yes libc_cv_c_cleanup=yes
make 2>&1 | tee make.out
make install
cd -

 

9.编译完整gcc(support c and c++)

mkdir build/build-fullgcc
cd build/build-fullgcc

# 此配置为针对特定CPU,体现在--with-cpu=arm1176jzf-s --with-tune=arm1176jzf-s --with-fpu=vfp --with-float=softfp

# 其余选项以上配置中大多已说明,其余小部分无需解释,通过./configure --help查明含义

../../src/gcc-4.6.0/configure --build=i686-pc-linux-gnu --host=i686-pc-linux-gnu --target=$TARGET --prefix=$PREFIX  --enable-languages=c,c++ --disable-multilib --with-cpu=arm1176jzf-s --with-tune=arm1176jzf-s --with-fpu=vfp --with-float=softfp --with-bugurl=eabi010@gmail.com --enable-__cxa_atexit --disable-libmudflap --with-host-libstdcxx='-static-libgcc -Wl,-Bstatic,-lstdc++,-Bdynamic -lm' --enable-threads=posix --with-local-prefix=$TARGET_PREFIX/sysroot --disable-nls --enable-symvers=gnu --enable-c99 --enable-long-long
make 2>&1 | tee make.out
make install
cd -

 

10.测试

echo 'int main(){printf("hello, __eabi\n");return 0;}' > test.c

arm-abzc-linux-gnueabi-gcc test.c
arm-abzc-linux-gnueabi-objdump -x a.out

有问题发送邮件:eabi010@gmail.com或留言

原博客不维护鸟, http://hi.baidu.com/__eabi
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值