Codesourcery G++

ARM 交叉编译工具链

1  工具链简介

  机:运行编译过程的计算机。

目标机:运行编译结果(可执行文件)的计算机。

交叉编译就是在主机上为目标机编译,比如在PC上编译,然后在手机上运行。

ARM开发过程使用交叉编译,即在安装有交叉编译工具链的主机上编译程序,然后将编译生成的可执行文件在目标机上运行。

 ARM交叉编译工具链包含工具见表1

 

1 ARM工具链

工具名

目前最新版本

简述

binutils

2.20.1

ARM二进制工具

gcc

4.5.0

编译器

gdb

7.1

调试器

newlib

1.18.0

运行库

 

本文介绍Linux主机上建立Codesourcery G++ ARM交叉工具链。Codesourcery G++是增强的GUN ARM工具链,目前最新版本2010q1-188 Codesourcery G++提供编译好的可执行文件,同时提供源文件。本文介绍从源文件基础上建立工具链的过程。

2 Codesourcery G++

2.1 Codesourcery G++简介

Codesourcery G++Codesourcery公司在GUN工具链基础上制作的ARM交叉工具链,是其公司Codesourcery G++ Lite ARM集成开发工具的编译器。Codesourcery开源了Codesourcery G++编译器,但Codesourcery G++ Lite IDE是收费的。Codesourcery G++更新快,代码编译效率高,支持最新ARM内核,包括CortexA8CortexA9内核。

Codesourcery使用的GUN工具链版本见表2

从表中可以看出Codesourcery使用的GUN工具版本比较新。

2 Codesourcery GUN工具版本

工具名

版本

binutils

2.19.51

gcc

4.4.1

gdb

7.0.51

newlib

1.17.0

2.2 Codesourcery G++可执行文件

Codesourcery工具链安装成功后工具见图1

1 Codesourcery安装后工具列表

2.3 Codesourcery G++源代码结构

Codesourcery G++的源代码可以在www.codesourcery.com网站上获得。源文件名为arm-2010q1-188-arm-none-eabi.src.tar.bz2。解压后的目录结构见图2

2中可以看出源文件包含binutilsgccgdbmakenewlib等工具。其中包含安装脚本arm-2010q1-188-arm-none-eabi.sh,脚本包含个工具的安装命令。此脚本是当前版本Codesourcery G++生成中使用的脚本。但本脚本是在作者机器上运行的脚本,如果重新编译Codesourcery G++则需要修改本机环境以使安装脚本正常执行。机器环境修改修改过程见第3节。

2 Codesourcery G++源文件

Codesourcery G++ 编译安装

2.1 安装脚本分析

#you may not be able to successfully run this script directly on your system. Certain aspects of the CodeSourcery build environment (such as directory names) are included in these commands.

# task [030/174] /i686-pc-linux-gnu/host_cleanup

# task [0xx/174] /xx

脚本执行后首先复制源文件包,然后解压各源文件,然后分别配置,编译,安装各个包。

2.2 安装环境修改

执行脚本需要按一下步骤修改脚本

1.      切换到root权限

2.      复制文件到/scratch/julian/2010q1-release-eabi-lite/src

3.      注释没有提供的包;如:# task [028/174] /init/source_package/qmtest_ph

4.      /usr/bin目录下创建软连接:

ln –s i686-pc-linux-gnu-gcc gcc

ln –s i686-pc-linux-gnu-g++ g++

ln –s i686-pc-linux-gnu-ar ar

ln –s i686-pc-linux-gnu-ranlib ranlib

5.      修改PATH /bin:/usr/bin:/usr/local/bin

2.3 添加log记录

安装过程中应该添加log,记录脚本执行结果。

添加如下两个函数:

savelog()

{

       echo "$1" "$2">>2010q1install.log

       echo "$1" "$2"

}

clearlog()

{

       rm -f  2010q1install.log

       touch  2010q1install.log

}

其中clearlog函数生成2010q1install.log2010q1install.log记录安装过程。Savelog函数记录logsavelog函数需要两个参数,savelog将参数写入log文件。同时savelog也将参数输出到控制台。

首先将将clearlog放置到脚本文件中来生成2010q1install.log文件,然后将脚本中的# task全文替换为savelog,安装过程则自动记录到log文件中。

# task   [001/174] /init/dirs

savelog  [001/174] /init/dirs

2.4 安装过程中的问题和解决方法

安装过程中可能出现许多问题,特别是文件依赖,此时就可以利用log文件来解决。

安装如果中途停止,首先查看log文件,可以知道脚本已经执行到了第几个task了,这说明前面的task已经成功。下次执行脚本时可以将成功执行的任务脚本注释掉。

查看控制台的输出错误,获得错误信息,安装依赖包,然后重新执行已经注释了前面任务的脚本。

如执行# task [053/174] /i686-pc-linux-gnu/toolchain/binutils/install时出错,提示texinfo依赖不存在,然后下载texinfo-4.8.tar.bz2,编译并安装。注释之前的task,重新执行脚本。

你可能感兴趣的:(ARM)