Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2775773
  • 博文数量: 505
  • 博客积分: 1552
  • 博客等级: 上尉
  • 技术积分: 2514
  • 用 户 组: 普通用户
  • 注册时间: 2007-09-23 18:24
文章分类

全部博文(505)

文章存档

2019年(12)

2018年(15)

2017年(1)

2016年(17)

2015年(14)

2014年(93)

2013年(233)

2012年(108)

2011年(1)

2009年(11)

分类:

2012-03-24 10:36:27

2.5 收拾 prebuilt 工具链

接下来是最悲惨的事情。mipsandroid 自带了 prebuilt 的工具链,那 gcc 自带的 libgcc.a 是针对 MIPS32R2 编译的,当 gcc 命令行开关为 -march=mips3 或者 -march=loongson2f 时,链接将发生错误,这两者是互不兼容的架构。

然而不幸的是,Android 的工具链是特制的,针对 bionic libc 专门定制的。Mipsandroid 放出了 Android 的源码却没有放出工具链的源码,使得我们没有办法重建这个工具链。因此我的办法就是设法得到一个适用的 libgcc.a,用它替换掉 prebuilt 里面的库文件,组合出一个可用的龙芯 Android 工具链。

制作一个工具链不是件容易的事情,搞过 LFS 的人都知道,数十个步骤,即使严格按照文档步骤来,由于环境和版本间的细微差异,仍然有导致失败的可能。为此我选择了一个工具链制作脚本,,在撰写本文时,最新版本是 1.9.0。

本篇全部内容是讲述建立工具链。如果你不需要,或者有别的更好的办法,请告诉我,并跳过这篇文章。

2.5.1 下载并安装 crosstool-ng

下载 crosstool-ng-1.9.0.tar.bz2。


$ mkdir ~/crosstool-ng
$ cd ~/crosstool-ng
$ tar xvf ~/crosstool-ng-1.9.0.tar.bz2
$ cd crosstool-ng-1.9.0
$ ./configure --prefix=~/crosstool-ng/install
$ make
$ make install

2.5.2 配置 crosstool-ng

输入配置命令:


$ mkdir ~/crosstool-ng/build

$ cd ~/crosstool-ng/build

$ cp ../install/lib/ct-ng-1.9.0/samples/mipsel-unknown-linux-gnu/crosstool.config .config

$ ../install/bin/ct-ng menuconfig


然后,在配置选单里,尽可能地匹配 mipsandroid 的预设工具链。

* 在 Target Option 里,Target Architecture (mips)
* Endianness: (Little endian)
* Bitness: (32-bit)
* ABI (o32)  --->
* (mips3) Architecture level
* Floating point: (software)
* Toolchain Option 里,(lssf) Tuple's vendor string,表示 loongson soft-float
* Binary utilities 里,binutils version (2.20.1)
* C compiler 里,gcc version (4.4.3)
* [*] C++

其他的都默认。保存退出。

稍候我会把我的 .config 文件打包上传到资源中心里,如果怕自己弄错可以直接用我的。

2.5.3 制作工具链

在家目录下建立 src 子目录,将用到的源文件手动地下载了保存进去,这样可以节省大量的时间。


$ ls ~/src
gcc-4.4.3.tar.bz2
binutils-2.20.1.tar.bz2 mpfr-2.4.2.tar.bz2
cloog-ppl-0.15.10.tar.gz gdb-6.8.tar.bz2 ncurses-5.7.tar.gz
dmalloc-5.5.2.tgz glibc-2.9.tar.bz2 ppl-0.10.2.tar.bz2
duma_2_5_15.tar.gz glibc-ports-2.9.tar.bz2 ppl-0.11.tar.bz2
expat-2.0.1.tar.gz gmp-4.3.2.tar.bz2 strace-4.5.19.tar.bz2
linux-2.6.31.14.tar.bz2


全部下载完以后,在 build 目录下开始编译


build]$ ../install/bin/ct-ng build


过程是漫长的,各位可以在睡前输入,醒来后看结果。如果结果不好也不要着急,仔细看 build.log 找到原因再来一次。

编译完成后,成品会位于 ~/x-tools/mipsel-lssf-linux-gnu/ 。

2.5.4 修补 prebuilt 工具链

回到 mipsandroid 源码目录。



$ cd prebuilt/linux-x86/toolchain/mips-4.4.3/lib/gcc/mips-linux-gnu/4.4.3/el/soft-float/
$ mv libgcc.a libgcc.a.origin
$ mv libgcc_eh.a libgcc_eh.a.origin
$ cp ~/x-tools/mipsel-lssf-linux-gnu/lib/gcc/mipsel-lssf-linux-gnu/4.4.3/libgcc.a libgcc.a.lssf
$ cp ~/x-tools/mipsel-lssf-linux-gnu/lib/gcc/mipsel-lssf-linux-gnu/4.4.3/libgcc_eh.a libgcc_eh.a.lssf
$ ln -s libgcc.a.lssf libgcc.a
$ ln -s libgcc_eh.a.lssf libgcc_eh.a


这样,工具链就算是替换好了,现在可以开始编译了。
阅读(2187) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~