标题:用Crosstool工具构建交叉工具链
只看楼主
murufy
Rank: 1
等 级:新手上路
帖 子:24
专家分:0
注 册:2008-8-16
 问题点数:0 回复次数:2 
用Crosstool工具构建交叉工具链
申明一下,这篇文章非原创,大部分在网上摘的,不过自己当时装的时候发现很多地方根本不通,也不知道文章写的有问题还是我装的时候有问题,反正不管怎么着吧,还是谢谢前面的牛人,呵呵。

下面是修改过后的文章,我机器上的编译环境完全是按这个步骤装的。大家可以试一下!


   
Crosstool是一组脚本工 具集,可构建和测试不同版本的gcc和glibc,用于那些支持glibc的体系结构。它也是一个开源项目,下载地址是http: //。用Crosstool构建交叉工具链要比上述的分步编译容易得多,并且也方便许多,对于仅仅了工作需要构 建交叉编译工具链的建议使用此方法。
1.准备资源文件首先从网上下载所需资源文件 linux-2.6.10.tar.gz、binutils-2.15.tar.bz2、gcc-3.3.6.tar.gz、glibc- 2.3.2.tar.gz、glibc-linuxthreads-2.3.2.tar.gz和linux-libc-headers- 2.6.12.0.tar.bz2。然后将这些工具包文件放在新建的/home/murufy/downloads目录下,最后在/home/murufy目录下 解压crosstool-0.42.tar.gz,命令如下:
# cd /home/mike
# tar –xvzf crosstool-0.42.tar.gz2.
建立脚本文件接着需要建立自己的编译脚本,起名为arm.sh,为了简化编写arm.sh,寻找一个最接近的脚本文件demo-arm.sh作为模板,然后将该脚本的内容复制到arm.sh,修改arm.sh脚本,具体操作如下:
# cd crosstool-0.42
# cp demo-arm.sh arm.sh
# vi arm.sh
修改后的arm.sh脚本内容如下:
#!/bin/sh
set -ex
TARBALLS_DIR=/home/murufy/downloads # 定义工具链源码所存放位置。
RESULT_TOP=/opt/crosstool            # 定义工具链的安装目录export TARBALLS_DIR

RESULT_TOPGCC_LANGUAGES="c,c++"       # 定义支持C, C++语言export GCC_LANGUAGES#
创建/opt/crosstool目录
#mkdir -p /opt/crosstool

然后就是把合适版本的信息,如下所示,前面的#去掉!
eval 'cat arm.dat gcc-3.3.6-glibc-2.3.2.dat' sh all.sh --notestecho Done.
3.建立配置文件在arm.sh脚本文件中需要注 意arm.dat和gcc-3.3.6-glibc-2.3.2.dat两个文件,这两个文件是作为Crosstool的编译的配置文件。其中 arm.dat文件内容如下,主要用于定义配置文件、定义生

成编译工具链的名称以及定义编译选项等。
KERNELCONFIG='pwd'/arm.config # 内核的配置
TARGET=arm-linux-gnu             # 编译生成的工具链名称TARGET_CFLAGS="-O"                # 编译选项gcc-3.3.6-glibc-2.3.2.dat文件内容如下,该文件主要定义编译过程中所需要的库以及它定义的版本,如果在编译过程中发现有些库不存在时,Crosstool会自动在相关网站上下载,该工具在这点上相对比较智能,也非常有用。
BINUTILS_DIR=binutils-2.15
GCC_DIR=gcc-3.3.6
GCC_DIR=gcc-3.3.6
GLIBC_DIR=glibc-2.3.2
GLIBCTHREADS_FILENAME=glibc-linuxthreads-2.3.2
LINUX_DIR=linux-2.6.10
LINUX_SANITIZED_HEADER_DIR=linux-libc-headers-2.6.12.0
4.执行脚本将Crosstool的脚本文件和配置文件准备好之后,开始执行arm.sh脚本来编译交叉编译工具。

具体执行命令如下:
# cd crosstool-0.42
# ./arm.sh
编译过程比较漫长,我在虚拟机上装的时候用了大概两个多小时,会在/opt/crosstool/arm-linux-

gnu/bin目录下生成新的交叉编译工具,其中包括以下内容:arm-linux-addr2line arm-linux-g++       arm-linux-ld         arm-linux-sizearm-linux-ar       arm-linux-gcc      arm-linux-nm       arm-linux-stringsarm-linux-as       arm-linux-gcc-3.3.6 arm-linux-objcopy arm-linux-striparm-linux-c++      arm-linux-gccbug arm-linux-objdump fix-embedded-pathsarm-linux-c++filt arm-linux-gcov     arm-linux-ranlibarm-linux-cpp      arm-linux-gprof    arm-linux-readelf
5.为了能在进行程序的编译时不必每次输入路径,因此添加环境变量然后将生成的编译工具链路径添加到环境变量PATH上去,添加的方法:
#vi ~/.bash_profile   //修改profile文件
在里面的PATH下面再添一行:PATH=/opt/crosstool/gcc-3.3.6-glibc-2.3.2/arm-linux-gnu/bin:$PATH

6.设置完上面的步骤后,切记要重启一下,要不然下面的测试是通不过的,呵呵。
#include <stdio.h>
int main( )
{     
printf(“Hello,world!\n”);     
return 0;
}
通过以下命令进行编译,编译后生 成名为hello的可执行文件,通过file命令可以查看文件的类型。当显示以下信息时表明交叉工具链正常安装了,通过编译生成了ARM体系可执行的文 件。注意,通过该交叉编译链编译的可执行文件只能在ARM体系下执行,不能在基于X86的普通PC上执行。
# arm-linux-gcc –o hello hello.c
# file hello
# arm-linux-gcc –o hello hello.c# file hellohello: ELF 32-bit LSB executable, ARM, version

1 (ARM), for GNU/Linux 2.4.3, dynamically linked (uses shared libs), not stripped
要是出现以上信息,那么恭喜你,安装成功了。要是没出现,那么像我一样,多装两遍吧,看看哪里出错了。
搜索更多相关主题的帖子: Crosstool 工具 构建 交叉 
2008-10-27 18:36
murufy
Rank: 1
等 级:新手上路
帖 子:24
专家分:0
注 册:2008-8-16
得分:0 
忘了一点不好意思,再加上。
在第一步建crosstool文件夹的时候我是用root帐号建的,在我自己的帐户murufy下,这个文件夹是只读的,需要在root下将文件夹的属性改一下,
#chmod 777 /opt/crosstool
然后再在自己的帐户下操作以下步骤即可
2008-10-27 22:04
魔幻星空
Rank: 1
等 级:新手上路
帖 子:149
专家分:0
注 册:2006-8-24
得分:0 
楼主从哪里找到这么个古董?
我用的arm-linux-gcc 4.1.0的
下载个tar包,解压到/usr/local/里
再在/etc/bash.bashrc里添加 export PATH=/usr/local/arm-linux/bin:$PATH
不用重启机子,重启下shell就行了

2008-12-08 15:37



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-240933-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.372047 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved