分享

UNIX下的GNU ARM工具

 weison86 2011-09-22

[通用UNIX知识] UNIX下的GNU ARM工具

前言

为什么写这篇文章呢?目的只有一个,记下过程,方便我下次再次安装的 时候查阅。起因呢?最近加入了LHT老师的一个项目,目标是移植android 到ARM10上去。但是,路很遥远,我连ARM的体系结构都没有搞明白就在搞这个明显是不现实的嘛,所以为了搞明白,就要先配个交叉编译的环境,正好 GNU有条工具链(Toolchain)支持这个,再配合QEMU模拟出的一套ARM环境,就可以比较完美的做学习/开发了。
平台

首先说说我的平台吧,Mac OS X 10.6。这玩意的地下是FreeBSD和Mach微内核,所以也勉强算是一种UNIX吧,所以标题就叫UNIX下的??更加通用嘛。
预备工作

其实就是下载点东西:binutils, gcc, newlib, gdb。其中最后一个虽然说是optional,不过是个程序员就知道debug的重要性,我就不复述了。除了newlib,其他三个都是能在GNU的网 站上下载到的,为了保证最新版,自己Google之然后下载吧。newlib其实是ARM相关的库文件,需要另外下载。另外,gcc的make还依赖一些 mac上没有的库——gmp, mpc, mpfr,这个也都能下载的到。
开干

首先为了整体的方便,引出几个环境变量。

export target=arm-elf
export prefix=/usr/local/$target
sudo mkdir -p $prefix/bin
export PATH=$prefix/binPATH

然后首先编译binutils,其中要注意平台哦,那么一大堆参数可不能少。

cd binutils-2.18
mkdir build-$target
cd build-$target/
../configure --target=$target --prefix=$prefix --enable-interwork \  
--enable-multilib --disable-nls --disable-shared --disable-threads \
--with-gcc --with-gnu-as --with-gnu-ld

make
sudo make install
cd ../..

然后是编译器,也是及其复杂的玩意。

cd gcc-4.2.2
mkdir build-$target
cd build-$target/
sudo  ../configure --target=$target --prefix=$prefix \
--disable-nls --disable-shared --disable-threads \
--with-gcc --with-gnu-ld --with-gnu-as --with-dwarf2 \
--enable-languages=c,c++ --enable-interwork \
--enable-multilib --with-newlib \
--with-headers=../../newlib-1.16.0/newlib/libc/include \
--disable-libssp --disable-libstdcxx-pch \ --disable-libmudflap
--disable-libgomp -v

注意到–with-headers了吗?这里面有个比较神奇的故事。因为gcc的编译要依赖newlib的头文件,newlib的编译需要gcc,这里就 是一个无穷死循环了。。。所以这里的策略是先借助newlib源代码中的头文件部分编译gcc,然后再用gcc编译newlib,最后完整编译 gcc。下面是编译newlib。

cd newlib-xx
./configure --target=$target --prefix=$prefix --enable-interwork \
--enable-multilib
make && sudo make install

最后是gdb,这个就比较简单了,我就不再叙述了。记录一下,以后防止忘记!

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多