用Crosstool工具构建交叉工具链

来源:互联网 发布:天津话发音软件 编辑:程序博客网 时间:2024/06/13 06:07

1.以root 身份, 为 /opt 赋操作权限

#cd /

#chmod 777 opt

 

2.准备资源文件

首先从网上下载所需资源文件:

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

 

然后以普通用户身份登入, 将这些工具包文件放在新建的

$cd ~

$mkdir downloads                    目录下,最后在/home/leo目录下解压crosstool-0.42.tar.gz,命令如下:

$cd downloads

$ tar –xvzf crosstool-0.42.tar.gz

 

3.建立脚本文件

接着需要建立自己的编译脚本,起名为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/leo/downloads   # 定义工具链源码所存放位置。

RESULT_TOP=/opt/crosstool            # 定义工具链的安装目录

export TARBALLS_DIR RESULT_TOP

GCC_LANGUAGES="c,c++"                # 定义支持C, C++语言

export GCC_LANGUAGES

# 创建/opt/crosstool目录

mkdir -p $RESULT_TOP

# 编译工具链,该过程需要数小时完成。

eval 'cat arm.dat gcc-3.3.6-glibc-2.3.2.dat'  sh all.sh --notest

echo Done.

 

4.建立配置文件

在arm.sh 脚本文件中需要注意arm.dat和gcc-3.3.6-glibc-2.3.2.dat两个文件,这两个文件是作为Crosstool的编译的配置文件。其中arm.dat文件内容如下,主要用于定义配置文件、定义生成编译工具链的名称以及定义编译选项等。

KERNELCONFIG='pwd'/arm.config  # 内核的配置

TARGET=arm-linux                # 编译生成的工具链名称

TARGET_CFLAGS="-O"                # 编译选项

gcc-3.3.6-glibc-2.3.2.dat文件内容如下,该文件主要定义编译过程中所需要的库以及它定义的版本,如果在编译过程中发现有些库不存在时,Crosstool会自动在相关网站上下载,该工具在这点上相对比较智能,也非常有用。

BINUTILS_DIR=binutils-2.15

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

 

5.执行脚本

将Crosstool的脚本文件和配置文件准备好之后,开始执行arm.sh脚本来编译交叉编译工具。具体执行命令如下:

$ cd crosstool-0.42

$ ./arm.sh 

经过数小时的漫长编译之后,会在/opt/crosstool/gcc-3.3.6-glibc-2.3.2/arm-linux/bin目录下生成新的交叉编译工具,其中包括以下内容:

arm-linux-addr2line arm-linux-g++        arm-linux-ld         arm-linux-size

arm-linux-ar         arm-linux-gcc        arm-linux-nm         arm-linux-strings

arm-linux-as         arm-linux-gcc-3.3.6 arm-linux-objcopy   arm-linux-strip

arm-linux-c++        arm-linux-gccbug    arm-linux-objdump   fix-embedded-paths

arm-linux-c++filt   arm-linux-gcov       arm-linux-ranlib

arm-linux-cpp        arm-linux-gprof      arm-linux-readelf

6.添加环境变量

直接输入export PATH=/opt/crosstool/gcc-3.3.6-glibc-2.3.2/arm-linux/bin:$PATH

注意一下两点:

1: ./arm.sh的时候j是以普通用户身份运行

2:arm.dat TARGET=arm-linux如果是arm-linux-那就是错误的