Chinaunix首页 | 论坛 | 博客
  • 博客访问: 561321
  • 博文数量: 204
  • 博客积分: 245
  • 博客等级: 二等列兵
  • 技术积分: 1293
  • 用 户 组: 普通用户
  • 注册时间: 2012-03-16 10:29
文章分类

全部博文(204)

文章存档

2024年(1)

2023年(4)

2022年(21)

2021年(7)

2020年(5)

2019年(1)

2018年(6)

2017年(11)

2016年(15)

2015年(52)

2014年(37)

2013年(26)

2012年(18)

我的朋友

分类: LINUX

2014-08-26 09:12:32

制作交叉编译工具链是件麻烦的事情,因为交叉编译ntfsprogs不得已从头做了一遍,现在把流程总结在这里,供以后参考。

原料:binutils,gcc,linux kernel,uclibc

我所用的版本为:

binutils-2.16

gcc-3.4.3

linux-2.6.14

uClibc-0.9.28

基本流程:

1.编译binutils

2.编译不含库的gcc

3.配置编译linux kenerl

4.编译uclibc

5.重新编译gcc得到完整工具链。

详细步骤:

注:以下脚本都是手工再次录入,非copy自原系统,可能存在录入错误

1.binutils的编译没有什么悬念,编译脚本如下:

#!/bin/sh

./configure --target=arm-linux --prefix=/opt/tools --program-prefix=arm-linux-

make

make install

即可在/opt/tools 下生成arm-linux-ar arm-linux-ld等必须工具

2.编译不含库的gcc,该步骤必须小心配置,因为编译gcc某些功能模块时本身需要C库的支持,只有把这些有依赖的模块屏蔽掉该步骤才能顺利编译,该步骤编译脚本如下:

#!/bin/sh

./configure --target=arm-linux /

                 --prefix=/opt/tools /

                 --program-prefix=arm-linux- /

                 --disable-shared   /

                 --disable-threads  /

                 --enable-languages="c" /

                 --with-newlib

make

make install

 部分书籍说要修改t-linux文件,本人测试只要加上--with-newlib即可避免。

3.配置编译linux kernel

该步骤是为了得到C库中的系统头文件,在编译uClibc的时候会指定kernel src的位置,这一步虽然只需配置好内核并将include/asm  链接到asm-arm即可,但为了顺便测试第2步编译的gcc,不妨完整的编译内核。具体配置取决于所使用的内核,此步骤无需罗嗦。

4.配置编译uClibc。
在该步骤中需要指定kernel src的位置,个人尝试必须指定为绝对路径,相对路径编译过程会出错,配置过程中需根据系统需要对uClibc进行配置,有时还会出现部分模块编译不通 过,此时则需要做相应配置调整。该步骤完成后可生成完整工具链所需的头文件和库文件。
An example for building library uClibc: http://my.oschina.net/shelllife/blog/227504

5.重新编译GCC

此步骤是为了在已经拥有C库的基础上打开第一遍编译gcc时限定的功能,包括动态链接支持,线程支持等,以及C库的整合。

编译脚本如下:

#!/bin/sh

./configure --target=arm-linux /

                  --prefix=/opt/tools /

                  --program-prefix=arm-linux- /

                  --enable-languages="c"   /

                  --with-headers=../uClibc-0.9.28/build/include /

                  --with-libs=../uClibc-0.9.28/build/lib /

make

make install

 

其中--with-headers指定刚才编译生成的uClibc的头文件,--with-libs指定uClibc的库文件,本例中只支持c程序的编译。

不出意外的话,一个arm-linux的交叉编译工具链就完成了,在这个流程顺利通过的基础上,可以再配置的其它参数以达到性能最优。不过,第一次编译工具链几乎不可能一次成功。

阅读(1424) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~