您的位置:首页 > 其它

ubuntu上的arm-elf-tools -20040427.sh 下载及安装问题的解决

2012-10-15 22:10 393 查看

ubuntu上的arm-elf-tools -20040427.sh 下载及安装问题的解决

2009-04-24 12:25:32| 分类:

默认分类 |字号 订阅

arm-elf-tools -20040427.sh 下载及安装问题的解决



fall , 10:00 ,

ARM ,
评论(0) ,
引用(0) , 阅读(702) , Via 本站原创



|
中 |



要完成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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: