Ubuntu8.04下的ARM交叉编译工具链armlinux详细介绍

上传人:汽*** 文档编号:509862981 上传时间:2023-12-11 格式:DOC 页数:36 大小:117.50KB
返回 下载 相关 举报
Ubuntu8.04下的ARM交叉编译工具链armlinux详细介绍_第1页
第1页 / 共36页
Ubuntu8.04下的ARM交叉编译工具链armlinux详细介绍_第2页
第2页 / 共36页
Ubuntu8.04下的ARM交叉编译工具链armlinux详细介绍_第3页
第3页 / 共36页
Ubuntu8.04下的ARM交叉编译工具链armlinux详细介绍_第4页
第4页 / 共36页
Ubuntu8.04下的ARM交叉编译工具链armlinux详细介绍_第5页
第5页 / 共36页
点击查看更多>>
资源描述

《Ubuntu8.04下的ARM交叉编译工具链armlinux详细介绍》由会员分享,可在线阅读,更多相关《Ubuntu8.04下的ARM交叉编译工具链armlinux详细介绍(36页珍藏版)》请在金锄头文库上搜索。

1、原文链接与:http:/blog.chi nau nix. net/u1/58901/showart_1335004.html实验室的机器配置太低,速度太慢实在是受不了。说是已经升级了,内存从128M升级到了256M。 My god!这年头还能到什么地方找那么多128的内存条去阿?哇嘎嘎。真是服了。哈哈打开一个pdf文件要等老半天。基本上没有办法工作。于是想在自己的笔记本上做一个交叉编 译环境。我的机器配置也不高,但是相对于实验室的机器来说已经相当不错了。我的机器是单操作系统:只有 Ubuntu8.0.4。感觉和 windows XP差不多。XP下有的东西,ubuntu下基本 上也有。ps :

2、昨天是我的生日。昨天上午有课,一下午还有今天上午就是在交叉编译的过程中度过的。 感觉整个过程挺考验耐心的。下面进入正题。待续。最近两天内补充完整。*在进行嵌入式在进行嵌入式开发之前,首先要建立一个交叉编译环境,这是一套编译器、连接 器和libc库等组成的开发环境。本文结合自己做嵌入式交叉编译开发工作的经验,同时结合自 己的体会,做了一个介绍随着消费类电子产品的大量开发和应用和Linux操作系统的不断健壮和强大,嵌入式系统越来越多的进入人们的生活之中,应用范围越来越广。在裁减和定制Linux,运用于你的嵌入式系统之前,由于一般嵌入式开发系统存储大小有限,通常你都要在你的强大的pc机上建立一个用于

3、目标机的交叉编译环境。这是一个由编译器、连接器和解释器组成的综合开发环境。交叉编译工具主要由bin utils、gcc和glibc几个部分组成。有时出于减小 libc库大小的考虑,你也可以用别的c库来代替glibc,例如uClibc、dietlibc和newlib。建立一个交叉编译工具链是一个相当复杂的过程,如果你不想自己经历复杂的编译过程,网上有一些编译好的可用的交叉编译工具链可以下载。交叉编译介绍?交叉编译就是在一个平台上生成另一个平台上的可执行代码。?这里说的平台分别指的是主机平台 Host和目标平台Target。?就我们在ARM平台上移植Linux来说,Host是一台一般的PC机,它通

4、过串口或网络接口与Target通 信;Target是arm-linux 平台(这里说的arm指的是平台所使用的 CPU是ARM9处理 器,linux指的是运行的操作系统是Linux)。?我们在Host上开发程序,并在这个平台上运行交叉编译器Cross Complier,编译我们的程序,而由Cross Complier 生成的程序将在 Target上运行。?目前常用的交叉开发环境主要有开放和商业两种类型。-开放的交叉开发环境的典型代表是GNU工具链,目前已能够支持x86、ARM、PowerPC 等多种处理器。-商业的交叉开发环境主要有Metrowerks CodeWarrior 、ARMSoft

5、ware Developme nt 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-l inu x-gcc-2.95.3.tar.gz? rpm安装包方式安装(.rpm)-rpm -ivh

6、 arm-linux-gcc-2.95.3-3.i386.rpmrpm -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-li nu x/b in/arm-li nu x-xxx/usr/local/arm-ucli nu x-tool/bi n/arm-ucli nu x-xxx为了在命令行中能够寻找到交叉编译器,我们需要把他所在的路径加入到PATH环境变量中(例:/usr/loca

7、l/arm/bi n:$PATH )。交叉编译环境的组成:? bin utils工具包:包括连接器、汇编器以及其他用于目标文件和档案的工具,如as汇编器,ld连接器等。? gcc工具包:工具链的主角,包括c编译器gcc、c+编译器g+等。? glibc库:提供系统调用的基本函数的C库,比如,printf、open等。? gdb调试工具:运行在target上的调试程序,通过串口和TCP/IP和主机连接,进行远距离调试。需要交叉编译的原因?首先,在项目的起始阶段,目标平台尚未建立,因此需要做交叉编译,以生成我们所需要的Bootloader以及kernel(因为Bootloader和kernel的源

8、码需要经过交叉编译后才可以在目标平台上运行);?其次,当目标平台能启动之后,由于目标平台上资源的限制,当我们编译大型程序时,依然可能需要用到交叉编译。因此,建立交叉编译环境是进行嵌入式软件开发的第一步。下面我们将以建立针对arm的交叉编译开发环境为例来说明整个交叉编译器DIY的过程,其他的体系结构与这个相类似,只要作一些对应的改动。我的开发环境是,宿主机i386-ubu ntu-8.04,目标机arm。因为Linux内核版本多,不同的版本存在不同的bug,加之众多版本的工具链也存在不同的bug,这些bug针对不同的硬件(比如CPU类型等),需要多方测试,寻找合适的补丁程序。我是从网上看到大家都

9、按如下的这个过程进行(我也是这么做的):1. 下载源文件、补丁和建立编译的目录2. 建立内核头文件3. 建立二进制工具(bin utils)4. 建立初始编译器(bootstrap gcc )5. 建立 c 库(glibc)6. 建立全套编译器(full gcc )(一)下载源文件、补丁和建立编译的目录1.选定软件版本号选择软件版本号时,先看看 glibc源代码中的INSTALL文件。那里列举了该版本的 glibc编译 时所需的bin utils和gcc的版本号。例如在 glibc-223/INSTALL 文件中推荐 gcc用2.95以 上,binutils 用2.10.1 以上版本。网上有推

10、荐的如下比较稳定的而且出错比较少的几个版本组合如下,以下是已选定的构建交叉编译环境的工具链版本:-BINUTILS_VERSION=2.16-GCC_VERSION=3.4.3-GCCCORE_VERSION=3.4.3-LINUX_VERSION=2.4.21-GLIBC_VERSION=2.3.5-GLIBCTHREADS_VERSION=2.3.5我选的各个软件的版本也大致如此,其具体如下:binutils-2.10.1( ftp:ftp.gnu.org/gnu/binutils/)gcc-2.95.3(ftp:/ftp.g nu.org/g nu /gcc/gcc-2.95.3)gli

11、bc-2.2.3( ftp:/ftp.gnu.org/gnu/glibc)glibc-li nu xthreads-2.2.3(ftp:/ftp.g nu.org/gnu/glibc )linu x-2.4.21-rmk2( http:/ftp.linux.org.uk/pub/li nu x/arm/kernel/v2.4/)linu x-2.4.21.tar.gz( http:/www.kernel.org/pub/li nux/kernel/v2.4/)gcc patch 下载:http:/www.linuxfromscratch.org/gcc-2.95.3.-2.patchgcc-2

12、.95.3.-no-fix in c.patchgcc-2.95.3-retur ntype-fix.patc如果你选的glibc的版本号低于2.2,你还要下载一个叫glibc-crypt的文件,例如glibc-crypt-2.1.tar.gz。 Linux内核你可以从www.kernel.org或它的镜像下载。Binutils、gcc和glibc你可以从FSF的FTP站点ftp:/ftp.gun.org/gnu/或它的镜像去下载。在编译glibc时,要用到Linux内核中的include目录的内核头文件。如果你发现有变量没有 定义而导致编译失败,你就改变你的内核版本号。例如我开始用lin u

13、x-2.4.25+vrs2,编译glibc-2.2.3时报BUS_ISA没定义,后来发现在2.4.23开始它的名字被改为CTL_BUS_ISA。如果你没有完全的把握保证你改的内核改完全了,就不要动内核,而是把你的Linux内核的版本号降低或升高,来适应 glibc。Gcc的版本号,推荐用 gcc-2.95以上的。太老的版本编译可能会出问题。Gcc-2.95.3 是-个比较稳定的版本,也是内核开发人员推荐用的一个gcc版本。如果你发现无法编译过去,有可能是你选用的软件中有的加入了一些新的特性而其他所选软件 不支持的原因,就相应降低该软件的版本号。例如我开始用gcc-3.3.2,发现编译不过,报a

14、s、Id等版本太老,我就把 gcc降为2.95.3。太新的版本大多没经过大量的测试,建议不 要选用。(二)建立工作目录首先,我们建立几个用来工作的目录:在你的用户目录,我用的是用户tang,因此用户目录为/home/tang,先建立一个项目目录cross 。tan gta ng-laptop:$ pwd/home/ta ngtan gta ng-laptop:$ mkdir cross再在这个项目目录cross下建立三个目录build-tools、kernel和tools 。build-tools-用来存放你下载的binutils、gcc和glibc的源代码和用来编译这些源代码的目录。kern

15、el-用来存放你的内核源代码和内核补丁。tools-用来存放编译好的交叉编译工具和库文件。tan gta ng-laptop:$ cd crosstan gta ng-laptop:/cross$ mkdir build-tools kernel tools执行完后目录结构如下:tan gta ng-laptop:/cross$ ls ./build-tools kernel tools3.输出和环境变量我们输出如下的环境变量方便我们编译。tan gta ng-laptop:/cross$ export PRJROOT=home/ta ng/crosstan gta ng-laptop:/cross$ export TARGET=arm-l inuxtan gta ng-laptop:/cross$ export PREFIX=$PRJROOT/too

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 建筑/环境 > 施工组织

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号