Ubuntu8.04下的ARM交叉编译工具链(arm-linux-)详细介绍.

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

原文链接与:/u1/58901/showart_1335004.html

实验室的机器配置太低,速度太慢实在是受不了。说是已经升级了,内存从128M升级到了256M。My god!这年头还能到什么地方找那么多128的内存条去阿?哇嘎嘎。真是服了。。。哈哈

打开一个pdf文件要等老半天。基本上没有办法工作。于是想在自己的笔记本上做一个交叉编译环境。我的机器配置也不高,但是相对于实验室的机器来说已经相当不错了。我的机器是单操作系统:只有Ubuntu8.0.4。感觉和windows XP差不多。XP下有的东西,ubuntu下基本上也有。

ps:昨天是我的生日。昨天上午有课,一下午还有今天上午就是在交叉编译的过程中度过的。感觉整个过程挺考验耐心的。下面进入正题。

待续。。。最近两天内补充完整。

*************************************************************************************

在进行嵌入式在进行嵌入式开发之前,首先要建立一个交叉编译环境,这是一套编译器、连接器和libc库等组成的开发环境。本文结合自己做嵌入式交叉编译开发工作的经验,同时结合自己的体会,做了一个介绍

随着消费类电子产品的大量开发和应用和Linux操作系统的不断健壮和强大,嵌入式系统越来越多的进入人们的生活之中,应用范围越来越广。

在裁减和定制Linux,运用于你的嵌入式系统之前,由于一般嵌入式开发系统存储大小有限,通常你都要在你的强大的pc机上建立一个用于目标机的交叉编译环境。这是一个由编译器、连接器和解释器组成的综合开发环境。交叉编译工具主要由binutils、gcc 和glibc 几个部分组成。有时出于减小libc 库大小的考虑,你也可以用别的c 库来代替glibc,例如uClibc、

dietlibc 和newlib。建立一个交叉编译工具链是一个相当复杂的过程,如果你不想自己经历复杂的编译过程,网上有一些编译好的可用的交叉编译工具链可以下载。

交叉编译介绍

•交叉编译就是在一个平台上生成另一个平台上的可执行代码。

•这里说的平台分别指的是主机平台Host和目标平台Target。

•就我们在ARM平台上移植Linux来说,Host是一台一般的PC机,它通过串口或网络接口与Target通信;Target是arm-linux平台(这里说的arm指的是平台所使用的CPU是ARM9处理器,linux指的是运行的操作系统是Linux)。

•我们在Host上开发程序,并在这个平台上运行交叉编译器Cross Complier,编译我们的程序,而由Cross Complier生成的程序将在Target上运行。

•目前常用的交叉开发环境主要有开放和商业两种类型。

–开放的交叉开发环境的典型代表是GNU工具链,目前已能够

支持x86、ARM、PowerPC等多种处理器。

–商业的交叉开发环境主要有Metrowerks CodeWarrior、ARM

Software Development Toolkit等。

常用在ARM平台的GNU Toolchain:

• arm-linux-gcc:交叉编译linux内核

• arm-elf-gcc:主要交叉编译uclinux内核

• arm-uclinux-gcc:交叉编译uclinux内核

主要下载网址(网址)•

下载下来之后的几种安装方式:

• sh脚本方式安装(.sh)

– sh arm-elf-tools-20030314.sh

• tar解压方式安装(.tar.gz)

– tar zxvf arm-linux-gcc-2.95.3.tar.gz

• rpm安装包方式安装(.rpm)

– rpm –ivh arm-linux-gcc-2.95.3-3.i386.rpm

– rpm –ivh arm-linux-binutils-2.12.1-1.i386.rpm

– rpm –ivh arm-linux-glibc-2.2.5-1.i386.rpm

•安装目录:/usr/local/bin/arm-elf-xxx

/usr/local/arm-linux/bin/arm-linux-xxx

/usr/local/arm-uclinux-tool/bin/arm-uclinux-xxx

为了在命令行中能够寻找到交叉编译器,我们需要把他所在的路径加入到PATH环境变量中(例:/usr/local/arm/bin:$PATH )。

交叉编译环境的组成:

• binutils工具包:包括连接器、汇编器以及其他用于目标文件和档案的工具,如as汇编器,ld连接器等。

• gcc工具包:工具链的主角,包括c编译器gcc、c++编译器g++等。

• glibc库:提供系统调用的基本函数的C库,比如,printf、open等。

• gdb调试工具:运行在target上的调试程序,通过串口和TCP/IP和主机连接,进行远距离调试。

需要交叉编译的原因:

•首先,在项目的起始阶段,目标平台尚未建立,因此需要做交叉编译,以生成我们所需要的Bootloader以及kernel(因为Bootloader和kernel的源码需要经过交叉编译后才可以在目标平台上运行);

•其次,当目标平台能启动之后,由于目标平台上资源的限制,当我们编译大型程序时,依然可能需要用到交叉编译。

因此,建立交叉编译环境是进行嵌入式软件开发的第一步。

下面我们将以建立针对arm的交叉编译开发环境为例来说明整个交叉编译器DIY的过程,其他的体系结构与这个相类似,只要作一些对应的改动。我的开发环境是,宿主机i386-ubuntu-8.04,目标机arm。

因为Linux内核版本多,不同的版本存在不同的bug,加之众多版本的工具链也存在不同的bug,这些bug针对不同的硬件(比如CPU类型等),需要多方测试,寻找合适的补丁程序。

我是从网上看到大家都按如下的这个过程进行(我也是这么做的):

1. 下载源文件、补丁和建立编译的目录

2. 建立内核头文件

3. 建立二进制工具(binutils)

4. 建立初始编译器(bootstrap gcc)

相关文档
最新文档