要完成uclinux在ARM上的移植,必须有这个工具。

下载地址:
http://opensrc.sec.samsung.com/download.html 这个网站上还有许多其它资源可以下载。
我选择 arm-elf-tools-20040427.sh 这个版本,大小是16.8M,电信2M带宽,用FIREFOX自带下载工具下载速度为110K左右,速度还是挺快的。
安装过程:
1、看这个文件的属性
ls -l arm-elf-tools-*

2、修改属性
chmod 755 arm-elf-tools*

3、执行解压安装
如在ubuntu下必须sudo ,其它版linux下,要用root。
sudo sh ./arm-elf-tools-20040427.sh

一般情况下,会提示以下错误:
#################################
#tail: cannot open `+43' for reading: No such file or directory

#gzip: stdin: not in gzip format
#tar: This does not look like a tar archive
#tar: Error exit delayed from previous errors
#################################

解决方法:
*tail问题:tail: cannot open `+43' for reading: No such file or directory
用VIM打开该文件,将第39行的代码:
    tail +${SKIP} ${SCRIPT} | gunzip | tar xvf -
改成如下:
    tail -n +${SKIP} ${SCRIPT} | gunzip | tar xvf -
vim arm-elf-tools*
键入:I ,进入插入模式
在第39行加入 “-n”

*gunzip问题:gunzip: stdin: unexpected end of file
要在arm-elf-tools-20030314.sh 最后一行加入一空行:完成上面第一个tail问题后,按'ESC',进入命令模式,键入‘G’,跳到文章最后,键入‘I’,在最后一行尾加回车。

重新执行sudo sh ./arm-elf*.sh命令后,可以发现已经装好了。可以测试一下:
arm-elf-gcc -v
显示:
Reading specs from /usr/local/lib/gcc-lib/arm-elf/2.95.3/specs
gcc version 2.95.3 20010315 (release)(ColdFire patches - 20010318 from http://fiddes.net/coldfire/)(uClinux XIP and shared lib patches from http://www.snapgear.com/)

4、测试下编译器
先写一个小程序:
/*test.c*/
#include

int main()
{
        int i;
        for(i=0;i<6;i++)
        {
                printf("i=%d\n",i);
                printf("Hello,embedded linux!\n");
        }
        return 0;
}

终端下输入命令:arm-elf-gcc -WI,elf2flt -o test test.c
提示:cc1: Invalid option `-WI,-elf2flt'
还没有找到解决方法,慢慢来,后面写。
----------------------------------------------------------------------------------------------
----------------------------------------------------------------------------------------------
一些编译器相关知识学习。
GNU GCC简介:
GNU GCC是一套面向嵌入式领域的交叉编译工具,支持多种编程语言、多种优化选项并且能够支持分步编译、支持多种反汇编方式、支持多种调试信息格式,目前支持X86、ARM7、StrongARM、PPC4XX、MPC8XX、MIPS R3000等多种CPU。
GNU GCC的基本功能包括:输出预处理后的C/C++源程序(展开头文件和替换宏)
输出C/C++源程序的汇编代码
输出二进制目标文件
生成静态库
生成可执行程序
转换文件格式
GCC 组成:
1. C/C++交叉编译器arm-elf-gcc
  arm-elf-gcc是编译的前端程序,它通过调用其他程序来实现将程序源文件编译成目标文件的功能。
  编译时,它首先调用预处理程序(cpp)对输入的源程序进行处理,然后调用 cc1 将预处理后的程序编译成汇编代码,最后由arm-elf-as将汇编代码编译成目标代码。
  arm-elf-gcc具有丰富的命令选项,可以控制编译的各个阶段,满足用户的各种编译需求。
2. 汇编器 arm-elf-as
      arm-elf-as将汇编语言程序转换为ELF (Executable and Linking Format,执行时链接文件格式)格式的可重定位目标代码,这些目标代码同其它目标模块或函数库易于定位和链接。
      arm-elf-as产生一个交叉参考表和一个标准的符号表,产生的代码和数据能够放在多个区 (Section)中。
3. 连接器arm-elf-ld
       arm-elf-ld根据链接定位文件Linkcmds中的代码区、数据区、BSS区和栈区等定位信息,将可重定位的目标模块链接成一个单一的、绝对定位的目标程序。
该目标程序是ELF格式,并且可以包含调试信息。
       arm-elf-ld会产生一个内存映象文件Map.txt,该文件显示所有目标模块、区和符号的绝对定位地址。它也产生交叉参考列表,显示参考每个全局符号的目标模块。
       arm-elf-ld支持将多个目标模块链接成一个单一的、绝对定位的目标程序,也能够依此对目标模块进行链接,这个特性称为增量链接(Incremental Linking)。
       假如输入文件是一个函数库,arm-elf-ld会自动从函数库装载被其它目标模块参考的函数模块。arm-elf-ld与其它链接程序相比,能提供更有 帮助的诊断信息。许多链接器遇到第一个错误即放弃链接,而arm-elf-ld只要有可能都继续执行,帮助用户识别其它错误,有时甚至能获得输出代码。
4. 库管理器arm-elf-ar
       arm-elf-ar将多个可重定位的目标模块归档为一个函数库文件。采用函数库文件,应用程序能够从该文件中自动装载要参考的函数模块,同时将应用程序 中频繁调用的函数放入函数库文件中,易于应用程序的开发管理。arm-elf-ar支持ELF格式的函数库文件.
5. 工程管理器MAKE
       Make是用于自动编译、链接程序的实用工具,使用make后就不需要手工的编译每个程序文件。要使用make,首先要编写makefile。
       Makefile描述程序文件之间的依赖关系,并提供更新文件的命令。在一个程序中,可执行文件依赖于目标文件,而目标文件依赖于源文件。如果 makefile文件存在,每次修改完源程序后,用户通常所需要做的事情就是在命令行敲入“make”,然后所有的事情都由make来完成。
6. 其他实用程序
       目标文件格式转换工具arm-elf-objcopy支持的文件格式有H-record、S-record、ABS、BIN、COFF、ELF。例如,它 能够将ELF格式文件转换为其它格式的文件,如intel H-record格式、Motorola S-record等。arm-elf-nm程序用于显示文件中的符号信息。

GCC编译程序的基本过程:
arm-elf-gcc根据输入文件的后缀来确定文件的类型,然后根据用户的编译选项(包括优化选项、调试信息选项等)将其编译成相应的汇编临时文件(后缀为.s);
arm-elf-as将该汇编文件编译成目标文件(后缀为.o);
arm-elf-ld 根据用户的链接选项(包括指定链接命令文件等)将目标文件和各种库链接起来生成可执行文件。
C/C++交叉编译器arm-elf-gcc
arm-elf-gcc是编译的前端程序,它通过调用其他程序来实现将程序源文件编译成目标文件。
编译时它首先调用预处理程序(cpp)对输入的源程序进行处理;然后调用cc1将预处理后的程序编译成汇编代码;最后由arm-elf-as将汇编代码编译成目标代码。

1.命令格式
arm-elf-gcc [options] file…
在命令arm-elf-gcc后面跟一个或多个选项,选项间用空格隔开,然后跟一个或多个目标文件。
例如,将test.c 编译成目标文件test.o 并且生成调试信息:
arm-elf-gcc –g –c –o test.o test.c
2.命令选项列表
输出控制选项:
-c       将输入的源文件编译成目标文件
-S       将C/C++文件生成汇编文件
-o file   将输出内容存于文件file
-pipe    在编译的不同阶段之间采用管道通讯方式
-v      打印出编译过程中执行的命令
-x language  说明文件的输入类型为language
C语言选项:
-ansi          支持所有ANSI C程序
警告选项:
-w              关闭所有警告
-Wall          打开所有警告
-Wimplicit  如果有隐含申明,显示警告信息
-Wno-implicit  不显示对隐含申明的警告
调试选项:
-g    在文件中产生调试信息(调试信息的文件格式有stabs、COFF、XCOFF、DWARF)
优化选项:
-O0            不优化
-O1            一级优化
-O2            二级优化
-O3            三级优化

预处理选项:
-E       运行C的预处理器
-C       在运用-E进行预处理时不去掉注释
-D macro       定义宏macro为1
-D macro=defn  定义宏macro为defn
汇编选项:
-Wa,option    将选项option传递          给汇编器

搜索路径选项:
-I dir         设置搜索路径为dir
-I-       指定只对 #include  "file",有效的头文件搜索目录

3. 源文件类型的识别
arm-elf-gcc能够自动根据文件名后缀识别文件类型.
文件名后缀和文件类型的对应关系如下:
*.c   ——C源文件
*.i   ——经过预处理后的C源文件
*.h   ——C头文件
*.ii   ——经过预处理后的C++源文件
*.cc   ——C++源文件
*.cxx   ——C++源文件
*.cpp   ——C++源文件
*.C  ——C++源文件
*.s   ——不需要预处理的汇编文件
*.S  ——需要预处理的汇编文件
此外,用户可通过-x language说明文件的输入类型,此时可以不用以上的后缀规则。
-x language
其中的language可为:
c       ——C源文件
c++        ——C++源文件
c-header      ——C头文件
cpp-output   ——经过预处理后的C源文件
c++-cpp-output   ——经过预处理后的C++源文件
assembler   ——不需要预处理的汇编文件
assembler-with-cpp  ——需要预处理的汇编文件
例如,编译一个不需要预处理的C程序:
arm-elf-gcc –c –g –x  cpp-output test.c

ubuntu上的arm-elf-tools -20040427.sh 下载及安装问题的解决的更多相关文章

  1. zlib开发笔记(三):zlib库介绍、在ubuntu上进行arm平台交叉编译

    前言   方便做嵌入式arm的交叉移植zlib库.   Zlib库   zlib被设计为一个免费的,通用的,法律上不受限制的-即不受任何专利保护的无损数据压缩库,几乎可以在任何计算机硬件和操作系统上使 ...

  2. Ubuntu 14.04 16.04 Linux nvidia 驱动下载与安装

    Ubuntu 14.04 16.04 nvidia 驱动安装 最简单直观的方式是在如下的对话框中直接选择驱动安装即可 但是有时候,驱动不够新,比如14.04用的是340.98版本,如果手动安装驱动可以 ...

  3. 在Ubuntu上建立Arm Linux 开发环境

    我使用的是友善2410的板子,以前都是用Fedora,现在家里的电脑被我转为Linux专用的了,装的是Ubuntu.但是嵌入式还是要玩的,在装载过程中也遇到一些小麻烦.在此记录一下,一来自己比较健忘, ...

  4. Ubuntu上Xilinx ARM交叉编译器安装

    1,Windows中下载交叉编译器 2,在ubuntu中创建zedboard目录,并将交叉编译器复制进来 3,将该交叉编译器设置成可执行程序 chmod  a+x  xilinx-2011.09-50 ...

  5. Qt VS Tools插件官方下载及安装

    下载 官方下载地址:https://download.qt.io/development_releases/vsaddin/(国外网站直接打开超级慢) 找到对应的VS版本下载 安装 下载完成后安装,打 ...

  6. Ubuntu上搭建Git服务器

    下面我们就看看,如何在Ubuntu上搭建Git服务器.我们使用VMware虚拟机安装两台Ubantu系统,分别命名为gitServer和gitClient_01. 1.安装OpenSSH并配置SSH无 ...

  7. 转载 :Linux有问必答:如何在Debian或Ubuntu上安装完整的内核源码

    http://linux.cn/article-5015-1.html 问题:我需要为我的Debian或Ubuntu下载并安装完整树结构的内核源码以供编译一个定制的内核.那么在Debian或Ubunt ...

  8. LEMP--如何在Ubuntu上安装Linux、Nginx、MySQL和PHP

    简介 LEMP是用来搭建动态网站的一组软件,首字母缩写分别表示Linux.Nginx(Engine-X).MySQL和PHP. 本文将讲述如何在Ubuntu安装LEMP套件.当然,首先要安装Ubunt ...

  9. zerotier的下载、安装、配置与使用(win10、ubuntu)

    一.需求描述 2020年,由于“野味肺炎”的影响,笔者要开始在家办公,需要远程连接公司的电脑和设备. 但是公司的网络和家里的网络不是同个局域网,不能直接用微软的远程桌面连接.想挂上公司的vpn,但是又 ...

随机推荐

  1. 关于Linux静态库和动态库的分析

    关于Linux静态库和动态库的分析 关于Linux静态库和动态库的分析 1.什么是库 在windows平台和linux平台下都大量存在着库. 本质上来说库是一种可运行代码的二进制形式.能够被操作系统加 ...

  2. 【CSS】隐藏多行文本框Textarea在IE中的垂直滚动栏

    在<[CSS]禁止Google浏览器同意定义调整多行文本框>(点击打开链接)中已经提及过怎样使多行文本框Textarea在一些DOM2的浏览器中固定下来. 这不,多行文本框Textarea ...

  3. JS清除选择内容的方法

    本文实例讲述了JS清除选择内容的方法.分享给大家供大家参考.具体分析如下: 今天在做一个DIV拖动的效果,发现在拖动的时候会选中页面中的文本,于是找了一下JS清除选择的内容的相关信息. 在得到的结果中 ...

  4. JVM —— Java 对象占用空间大小计算

    零. 为什么要知道 Java 对象占用空间大小 缓存的实现: 在设计 JVM 内缓存时(不是借助 Memcached. Redis 等), 须要知道缓存的对象是否会超过 JVM 最大堆限制, 假设会超 ...

  5. SQL SERVER的浮点数类型及与C#的对应关系

    SQL SERVER: float 与 real 7位数或15位数.这里说的位数,不是指小数位,而是包括整数和小数在内的位数. float的位数是多少,要看float[(n)]里的n数值是多少. n ...

  6. SharePoint创建一个简单的Visio Web部件图

    SharePoint创建一个简单的Visio Web部件图 Visio有很多强大的Mash-up混聚功能,使它能够轻松集成到SharePoint 2010中. 1. 打开Visio 2010,创建新的 ...

  7. Git 工具 - 子模块

    子模块 有种情况我们经常会遇到:某个工作中的项目需要包含并使用另一个项目. 也许是第三方库,或者你独立开发的,用于多个父项目的库. 现在问题来了:你想要把它们当做两个独立的项目,同时又想在一个项目中使 ...

  8. C++ 指针 引用 变量引用

    变量引用: 引用的作用就是给变量起个别名,假如有一个变量a,想给它起个别名b,         可以这么写:int a;//定义a是整型变量.int &b=a;//声明b是a的引用. 上面就是 ...

  9. 2014/09/20 关于ArrayList的几种操作

    1.删除ArrayList集合元素 删除ArrayList集合里面的元素时,提供了Clear方法,Remove方法,RmoveAt方法和RemoveRange方法. Clear方法是移除所有的元素 R ...

  10. Hdu-2892 area 计算几何 圆与凸多边形面积交

    题面 题意:有一个凸多边形岛屿,然后告诉你从高空(x,y,h)投下炸弹,爆炸半径r,飞机水平速度和重力加速度,问岛屿被炸了多少 题解:算出来岛屿落地位置,再利用圆与凸多边形面积交 #include&l ...