先说明我这里仅是对binutils、gcc、glibc的交叉编译,缺少gdb等以及对整个制作完成的打包整理,可能有些混乱。编译环境是Debian 6.0,使用的头文件内核linux2.6.32,编译是带EABI的,在交叉工具链编译(上)中主要将制作过程一介绍,在下中将说明原因、遇到的些错误及解决方法。
(1)准备工作gmp-4.3.2.tar.gz ftp://ftp.gnu.org/gnu/gmp mpfr-3.0.1.tar.gz ftp://ftp.gnu.org/gnu/mpfr glibc-ports-2.11.tar.bz2 ftp://ftp.gnu.org/gnu/glibc binutils-2.18.tar.bz2 ftp://ftp.gnu.org/gnu/binutils gcc-4.4.5.tar.gz ftp://ftp.gnu.org/gnu/gcc glibc-2.11.1.tar.bz2 ftp://ftp.gnu.org/gnu/gcc
linux-2.6.32.tar.bz2 http://download.chinaunix.net/download.php?id=31468&ResourceID=6156
----最近kernel.org上不去,只好从这里下了。
安装一些必备的东西
aptitude install build-essential automake bison flex texinfo gawk g\+\+ aptitude remove mawk apt-get install libncurses*目录
kernel linux内核源码,包括下载的没有修改过的和
测试使用的是mini2440提供的内核linux2.6.32.2
tools 安装目录export TARGET=arm-none-linux-gnueabi export PREFIX=/opt/arm_linux/tools export PATH=$PATH:$PREFIX/bin
安装gmp、mpfr
gmp
tar xvf gmp-4.3.2.tar.gz 在gmp安装目录下 ./configure --prefix=$PREFIX make make check make installmpfr
./configure --prefix=$PREFIX --enable-shared --with-gmp=$PREFIX make make check(2)编译binutils
makdir build ./configure --prefix=$PREFIX --target=$TARGET --disable-nls --disable-multilib --enable-shared make configure-host make make install(3)生成内核头文件
make ARCH=arm COROSS_COMPILE=arm-linux- menuconfig make ARCH=arm COROSS_COMPILE=arm-linux-----不管错误,只是生成需要的头文件
mkdir -p $PREFIX/include cd $PREFIX/include ln -s /opt/arm_linux/kernel/linux-2.6.32/arch/arm/include/asm asm ln -s /opt/arm_linux/kernel/linux-2.6.32/include/linux linux ln -s /opt/arm_linux/kernel/linux-2.6.32/include/asm-generic asm-generic(4)初编译gcc
mkdir build ../configure --prefix=$PREFIX --target=$TARGET --disable-nls --disable-shared --with-mpfr=$PREFIX --with-gmp=$PREFIX --without-headers --with-newlib --disable-decimal-float --disable-libgomp --disable-libmudflap --disable-libssp --disable-threads --enable-languages=c --disable-multilib --with-abi=aapcs make all-gcc all-target-libgcc make install-gcc install-target-libgcc(5)编译c库
mkdir build cd build CC=$TARGET-gcc ../configure --host=$TARGET --prefix=$PREFIX --enable-add-ons --with-binutils=$PREFIX/bin --with-headers=$PREFIX/include libc_cv_forced_unwind=yes libc_cv_c_cleanup=yes
cd $PREFIX/lib/gcc/$TARGET/4.4.5 ln -s libgcc.a libgcc_eh.a make make PREFIX=/opt/arm_linux install(6)第二次编译gcc
cd $PREFIX/arm-none-linux-gnueabi rm lib include -rf ln -s ../lib lib ln -s ../include include
配置
../build-gcc/gcc-4.4.5/configure --prefix=$PREFIX --target=$TARGET --disable-nls --enable-shared --enable-languages=c,c++ --enable-c99 --enable-long-long --disable-multilib --enable-__cxa_atexit --with-gmp=$PREFIX --with-mpfr=$PREFIX
如果想能够编译u-boot等,针对2440的可以加上--with-arch=armv4t --with-cpu=arm920t --with-tune=arm920t 即可。然后make makeinstall7.测试
load Image of Linux...Uncompressing Linux................................................................................................................................................................. done, booting the kernel. Linux version 2.6.32.2-FriendlyARM (root@debian6) (gcc version 4.4.5 (GCC) ) #2 Fri Sep 23 17:09:08 CST 2011 CPU: ARM920T [41129200] revision 0 (ARMv4T), cr=c0007177 CPU: VIVT data cache, VIVT instruction cache Machine: FriendlyARM Mini2440 development board ATAG_INITRD is deprecated; please update your bootloader. Memory policy: ECC disabled, Data cache writeback CPU S3C2440A (id 0x32440001)
好了,只要按着做,应该就有自己的编译器了,不过很多配置我现在也不太清楚,主要就是参考下面的文章,以及碰到错误搜索下了,如果按照次不能成功请留言。。。。。。。。。。。。。别急,后面会简单看下碰到什么问题以及怎样解决的。
【参考】
1.交叉工具链制作至尊宝典 http://blog.csdn.net/turui/article/details/6596093
2.如何为嵌入式开发建立交叉编译环境 https://www.ibm.com/developerworks/cn/linux/l-embcmpl/
3.Cross-Compiled Linux From Scratch - Embedded http://cross-lfs.org/view/clfs-embedded/arm/index.html
4.自己动手制作交叉编译工具链 http://hi.baidu.com/mynana/blog/item/479eb25183ec2210377abee0.html