基于s3c44B0X嵌入式uCLinux系统原理及应用.ppt
-
资源ID:69409787
资源大小:748KB
全文页数:131页
- 资源格式: PPT
下载积分:16金币
快捷下载
会员登录下载
微信登录下载
三方登录下载:
微信扫一扫登录
友情提示
2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
|
基于s3c44B0X嵌入式uCLinux系统原理及应用.ppt
基于s3c44B0X嵌入式uCLinux系统原理及应用主讲人:李岩哈尔滨理工大学计算机学院n本章主要内容:本章主要内容:(1)GCC编译过程(2)C/C+交叉编译器arm-elf-gcc(3)交叉汇编器 arm-elf-as(4)交叉连接器arm-elf-l d(5)工程管理器make(6)汇编语言编程(7)混合编程 第第 3 章章 目录目录1 GNU GCC简介简介2 C/C+交叉编译器交叉编译器arm-elf-gcc3 交叉连接器交叉连接器arm-elf-ld 3.1 需求分析需求分析4 工程管理器工程管理器 MAKE5 交叉汇编器交叉汇编器 arm-elf-as6 汇编语言编程汇编语言编程7 简单程序设计简单程序设计8 混合语言编程混合语言编程 第第 3 章章 目录目录1 GNU GCC简介简介2 C/C+交叉编译器交叉编译器arm-elf-gcc3 交叉连接器交叉连接器arm-elf-ld 3.1 需求分析需求分析4 工程管理器工程管理器 MAKE5 交叉汇编器交叉汇编器 arm-elf-as6 汇编语言编程汇编语言编程7 简单程序设计简单程序设计8 混合语言编程混合语言编程3.1 GNU GCC简介简介 GNU集成编译环境集成编译环境GCC(GNU Compiler Collection)是一种面向嵌入式领域、支持多种编程是一种面向嵌入式领域、支持多种编程语言、支持多种语言、支持多种CPU的交叉编译工具。的交叉编译工具。输出预处理后的输出预处理后的输出预处理后的输出预处理后的C/C+C/C+源程序(展开头文件和替换宏)源程序(展开头文件和替换宏)源程序(展开头文件和替换宏)源程序(展开头文件和替换宏)输出输出输出输出C/C+C/C+源程序的汇编代码源程序的汇编代码源程序的汇编代码源程序的汇编代码输出二进制目标文件输出二进制目标文件输出二进制目标文件输出二进制目标文件生成静态库生成静态库生成静态库生成静态库生成可执行程序生成可执行程序生成可执行程序生成可执行程序转换文件格式转换文件格式转换文件格式转换文件格式l lGNU GCCGNU GCC的基本功能的基本功能的基本功能的基本功能3.1 GNU GCC简介简介lGCC组成-C/C+C/C+交叉编译器交叉编译器交叉编译器交叉编译器arm-arm-elf-elf-gccgcc arm-elf-gcc是编译的前端程序,它通过调用其是编译的前端程序,它通过调用其是编译的前端程序,它通过调用其是编译的前端程序,它通过调用其他程序来实现将程序源文件编译成目标文件的功能。他程序来实现将程序源文件编译成目标文件的功能。他程序来实现将程序源文件编译成目标文件的功能。他程序来实现将程序源文件编译成目标文件的功能。arm-elf-gcc具有丰富的命令选项,可以控制编具有丰富的命令选项,可以控制编具有丰富的命令选项,可以控制编具有丰富的命令选项,可以控制编译的各个阶段,满足用户的各种编译需求。译的各个阶段,满足用户的各种编译需求。译的各个阶段,满足用户的各种编译需求。译的各个阶段,满足用户的各种编译需求。3.1 GNU GCC简介简介lGCC组成-汇编器汇编器汇编器汇编器 arm-elf-asarm-elf-as arm-elf-as将汇编语言程序转换为将汇编语言程序转换为将汇编语言程序转换为将汇编语言程序转换为ELFELF(Executable and Linking Format(Executable and Linking Format,执行时链接,执行时链接,执行时链接,执行时链接文件格式文件格式文件格式文件格式)格式的可重定位目标代码,这些目标代格式的可重定位目标代码,这些目标代格式的可重定位目标代码,这些目标代格式的可重定位目标代码,这些目标代码同其它目标模块或函数库易于定位和链接。码同其它目标模块或函数库易于定位和链接。码同其它目标模块或函数库易于定位和链接。码同其它目标模块或函数库易于定位和链接。说明说明说明说明:arm-elf-asarm-elf-as产生一个交叉参考表和一个标准的符号表,产生一个交叉参考表和一个标准的符号表,产生一个交叉参考表和一个标准的符号表,产生一个交叉参考表和一个标准的符号表,产生的代码和数据能够放在多个区产生的代码和数据能够放在多个区产生的代码和数据能够放在多个区产生的代码和数据能够放在多个区 (Section)(Section)中。中。中。中。3.1 GNU GCC简介简介lGCC组成-连接器连接器连接器连接器arm-elf-ldarm-elf-ld arm-elf-gcc是编译的前端程序,是编译的前端程序,是编译的前端程序,是编译的前端程序,arm-elf-ldarm-elf-ld根据根据根据根据链接定位文件链接定位文件链接定位文件链接定位文件LinkcmdsLinkcmds中的代码区、数据区、中的代码区、数据区、中的代码区、数据区、中的代码区、数据区、BSSBSS区和栈区等定位信息,将可重定位的目标模块链接区和栈区等定位信息,将可重定位的目标模块链接区和栈区等定位信息,将可重定位的目标模块链接区和栈区等定位信息,将可重定位的目标模块链接成一个单一的、绝对定位的目标程序。成一个单一的、绝对定位的目标程序。成一个单一的、绝对定位的目标程序。成一个单一的、绝对定位的目标程序。3.1 GNU GCC简介简介lGCC组成-库管理器库管理器库管理器库管理器arm-elf-arm-elf-arar arm-elf-ar将多个可重定位的目将多个可重定位的目将多个可重定位的目将多个可重定位的目标模块归档为一个函数库文件。标模块归档为一个函数库文件。标模块归档为一个函数库文件。标模块归档为一个函数库文件。3.1 GNU GCC简介简介lGCC组成-工程管理器工程管理器工程管理器工程管理器MAKEMAKE arm-elf-gcc MakeMake是用于自动编译、链接是用于自动编译、链接是用于自动编译、链接是用于自动编译、链接程序的实用工具程序的实用工具程序的实用工具程序的实用工具,使用使用使用使用makemake后就不需要手工的编后就不需要手工的编后就不需要手工的编后就不需要手工的编译每个程序文件。要使用译每个程序文件。要使用译每个程序文件。要使用译每个程序文件。要使用make,make,首先要编写首先要编写首先要编写首先要编写makefilemakefile。Makefile描述程序文件之间的依赖关系,描述程序文件之间的依赖关系,描述程序文件之间的依赖关系,描述程序文件之间的依赖关系,并提供更新文件的命令。并提供更新文件的命令。并提供更新文件的命令。并提供更新文件的命令。3.1 GNU GCC简介简介lGCC组成-其他实用程序其他实用程序其他实用程序其他实用程序 arm-elf-objcopy目标文件格式转换工具等;目标文件格式转换工具等;目标文件格式转换工具等;目标文件格式转换工具等;3.1 GNU GCC简介简介lGCC编译程序的基本过程 arm-elf-gcc根据输入文件的后缀来确定文件的根据输入文件的后缀来确定文件的类型,然后根据用户的编译选项(包括优化选项、调试信类型,然后根据用户的编译选项(包括优化选项、调试信息选项等)将其编译成相应的汇编临时文件(后缀为息选项等)将其编译成相应的汇编临时文件(后缀为.s););arm-elf-as将该汇编文件编译成目标文件(后将该汇编文件编译成目标文件(后缀为缀为.o););arm-elf-ld 根据用户的链接选项(包括指定链接根据用户的链接选项(包括指定链接命令文件等)将目标文件和各种库链接起来生成可执行文命令文件等)将目标文件和各种库链接起来生成可执行文件。件。程序的编译过程程序的编译过程C/C+源文件源文件Arm-elf-gcc头文件头文件汇编文件汇编文件Arm-elf-as目标文件目标文件源文件列表源文件列表生成库生成库连接命令文件连接命令文件可重定位模块可重定位模块Arm-eif-ldArm-elf-ar用户库用户库库列表库列表可执行程序可执行程序 第第 3 章章 目录目录1 GNU GCC简介简介2 C/C+交叉编译器交叉编译器arm-elf-gcc3 交叉连接器交叉连接器arm-elf-ld 3.1 需求分析需求分析4 工程管理器工程管理器 MAKE5 交叉汇编器交叉汇编器 arm-elf-as6 汇编语言编程汇编语言编程7 简单程序设计简单程序设计8 混合语言编程混合语言编程l l概述概述3.2 C/C+交叉编译器交叉编译器arm-elf-gcc-命令格式 arm-elf-arm-elf-gccgcc options file options file在命令在命令在命令在命令arm-elf-arm-elf-gccgcc后面跟一个或多个选项,选项间后面跟一个或多个选项,选项间后面跟一个或多个选项,选项间后面跟一个或多个选项,选项间用空格隔开,然后跟一个或多个目标文件。用空格隔开,然后跟一个或多个目标文件。用空格隔开,然后跟一个或多个目标文件。用空格隔开,然后跟一个或多个目标文件。例如,例如,例如,例如,将将将将test.ctest.c 编译成目标文件编译成目标文件编译成目标文件编译成目标文件test.otest.o 并且生成调试信并且生成调试信并且生成调试信并且生成调试信息:息:息:息:arm-elf-arm-elf-gccgcc g c o g c o test.otest.o test.ctest.c l l概述概述3.2 C/C+交叉编译器交叉编译器arm-elf-gcc-命令选项列表-c-c 将输入的源文件编译成目标文件将输入的源文件编译成目标文件将输入的源文件编译成目标文件将输入的源文件编译成目标文件-S-S 将将将将C/C+C/C+文件生成汇编文件文件生成汇编文件文件生成汇编文件文件生成汇编文件-o file -o file 将输出内容存于文件将输出内容存于文件将输出内容存于文件将输出内容存于文件filefile-pipe -pipe 在编译的不同阶段之间采用管道通讯方式在编译的不同阶段之间采用管道通讯方式在编译的不同阶段之间采用管道通讯方式在编译的不同阶段之间采用管道通讯方式-v-v 打印出编译过程中执行的命令打印出编译过程中执行的命令打印出编译过程中执行的命令打印出编译过程中执行的命令-x language-x language说明文件的输入类型为说明文件的输入类型为说明文件的输入类型为说明文件的输入类型为languagelanguage输出控制选项:输出控制选项:l l概述概述3.2 C/C+交叉编译器交叉编译器arm-elf-gcc-命令选项列表-ansiansi 支持所有支持所有支持所有支持所有ANSI CANSI C程序程序程序程序C语言选项:语言选项:l l概述概述3.2 C/C+交叉编译器交叉编译器arm-elf-gcc-命令选项列表-w -w 关闭所有警告关闭所有警告关闭所有警告关闭所有警告-Wall -Wall 打开所有警告打开所有警告打开所有警告打开所有警告-WimplicitWimplicit 如果有隐含申明,显示警告信息如果有隐含申明,显示警告信息如果有隐含申明,显示警告信息如果有隐含申明,显示警告信息-WnoWno-implicit -implicit 不显示对隐含申明的警告不显示对隐含申明的警告不显示对隐含申明的警告不显示对隐含申明的警告警告选项:警告选项:l l概述概述3.2 C/C+交叉编译器交叉编译器arm-elf-gcc-命令选项列表-g -g 在文件中产生调试信息在文件中产生调试信息在文件中产生调试信息在文件中产生调试信息(调试信息的文件格式有调试信息的文件格式有调试信息的文件格式有调试信息的文件格式有stabsstabs、COFFCOFF、XCOFFXCOFF、DWARF)DWARF)调试选项:调试选项:l l概述概述3.2 C/C+交叉编译器交叉编译器arm-elf-gcc-命令选项列表-O0 O0 不优化不优化不优化不优化-O1 -O1 一级优化一级优化一级优化一级优化-O2 -O2 二级优化二级优化二级优化二级优化-O3 -O3 三级优化三级优化三级优化三级优化优化选项:优化选项:l l概述概述3.2 C/C+交叉编译器交叉编译器arm-elf-gcc-命令选项列表-E -E 运行运行运行运行C C的预处理器的预处理器的预处理器的预处理器-C -C 在运用在运用在运用在运用-E-E进行预处理时不去掉注释进行预处理时不去掉注释进行预处理时不去掉注释进行预处理时不去掉注释-D macro -D macro 定义宏定义宏定义宏定义宏macromacro为为为为1 1-D macro=-D macro=defndefn 定义宏定义宏定义宏定义宏macromacro为为为为defndefn预处理选项:预处理选项:l l概述概述3.2 C/C+交叉编译器交叉编译器arm-elf-gcc-命令选项列表-WaWa,option option 将选项将选项将选项将选项optionoption传递传递传递传递 给汇编器给汇编器给汇编器给汇编器汇编选项:汇编选项:l l概述概述3.2 C/C+交叉编译器交叉编译器arm-elf-gcc-命令选项列表-I dir -I dir 设置搜索路径为设置搜索路径为设置搜索路径为设置搜索路径为dirdir-I-I-指定只对指定只对指定只对指定只对#include “file”,#include “file”,有效的头文件有效的头文件有效的头文件有效的头文件搜索目录搜索目录搜索目录搜索目录 搜索路径选项:搜索路径选项:l l概述概述3.2 C/C+交叉编译器交叉编译器arm-elf-gcc-源文件类型的识别*.c.c CC源文件源文件源文件源文件*.i.i 经过预处理后的经过预处理后的经过预处理后的经过预处理后的C C源文件源文件源文件源文件*.h.h CC头文件头文件头文件头文件*.ii.ii 经过预处理后的经过预处理后的经过预处理后的经过预处理后的C+C+源文件源文件源文件源文件*.cc.cc C+C+源文件源文件源文件源文件*.cxxcxx C+C+源文件源文件源文件源文件*.cppcpp C+C+源文件源文件源文件源文件*.C.CC+C+源文件源文件源文件源文件*.s.s 不需要预处理的汇编文件不需要预处理的汇编文件不需要预处理的汇编文件不需要预处理的汇编文件*.S.S需要预处理的汇编文件需要预处理的汇编文件需要预处理的汇编文件需要预处理的汇编文件arm-elf-arm-elf-gccgcc能够自动根据文件名后缀识别文件类型能够自动根据文件名后缀识别文件类型能够自动根据文件名后缀识别文件类型能够自动根据文件名后缀识别文件类型.l l命令使命令使用用3.2 C/C+交叉编译器交叉编译器arm-elf-gcc例如,例如,将将将将test.ctest.c编译成汇编程序并存放于文件编译成汇编程序并存放于文件编译成汇编程序并存放于文件编译成汇编程序并存放于文件test.txttest.txt:arm-elf-arm-elf-gccgcc S o S o test.txttest.txt test.ctest.c -o file-o file将输出内容存于文件将输出内容存于文件将输出内容存于文件将输出内容存于文件filefile,仅适用于只有一个输出,仅适用于只有一个输出,仅适用于只有一个输出,仅适用于只有一个输出文件时。文件时。文件时。文件时。-输出文件名的指定l l命令使命令使用用3.2 C/C+交叉编译器交叉编译器arm-elf-gcc例如,例如,将将将将test.ctest.c编译成编译成编译成编译成test.otest.o:arm-elf-arm-elf-gccgcc c o c o test.otest.o test.ctest.c -c-c将输入的源文件编译成目标文件。将输入的源文件编译成目标文件。将输入的源文件编译成目标文件。将输入的源文件编译成目标文件。-目标文件的生成l l命令使命令使用用3.2 C/C+交叉编译器交叉编译器arm-elf-gcc例如,例如,将将将将test.ctest.c编译生成汇编文件编译生成汇编文件编译生成汇编文件编译生成汇编文件test.stest.s:arm-elf-arm-elf-gccgcc S o S o test.stest.s test.ctest.c -S-S将将将将C/C+C/C+文件生成汇编文件。文件生成汇编文件。文件生成汇编文件。文件生成汇编文件。-将C/C+文件生成汇编文件l l命令使命令使用用3.2 C/C+交叉编译器交叉编译器arm-elf-gcc例如,例如,对对对对test.ctest.c进行预处理并将结果输出到屏幕:进行预处理并将结果输出到屏幕:进行预处理并将结果输出到屏幕:进行预处理并将结果输出到屏幕:arm-elf-arm-elf-gccgcc E E test.ctest.c -E-E只对源文件进行预处理并且缺省输出到标准输出。只对源文件进行预处理并且缺省输出到标准输出。只对源文件进行预处理并且缺省输出到标准输出。只对源文件进行预处理并且缺省输出到标准输出。-预处理文件的生成l l命令使命令使用用3.2 C/C+交叉编译器交叉编译器arm-elf-gcc头文件的头文件的头文件的头文件的引用引用引用引用有两种形式:有两种形式:有两种形式:有两种形式:一种是一种是一种是一种是#include“filenameinclude“filename”,一种是一种是一种是一种是#include#include。前一种形式的前一种形式的前一种形式的前一种形式的路径搜索顺序路径搜索顺序路径搜索顺序路径搜索顺序是:当前目录、指定是:当前目录、指定是:当前目录、指定是:当前目录、指定的搜索路径;后一种形式只搜索指定路径。的搜索路径;后一种形式只搜索指定路径。的搜索路径;后一种形式只搜索指定路径。的搜索路径;后一种形式只搜索指定路径。-I dir -I dir 将目录将目录将目录将目录dirdir添加到头文件搜索目录列表的第一项。添加到头文件搜索目录列表的第一项。添加到头文件搜索目录列表的第一项。添加到头文件搜索目录列表的第一项。-I-I-I-I-以前以前以前以前用用用用-I-I指定的头文件搜索目录只对指定的头文件搜索目录只对指定的头文件搜索目录只对指定的头文件搜索目录只对#include“fileinclude“file”有效,对有效,对有效,对有效,对#include#include 无效;无效;无效;无效;-I-I-以后以后以后以后指定的头文件搜索目录对以上两种形式的头文指定的头文件搜索目录对以上两种形式的头文指定的头文件搜索目录对以上两种形式的头文指定的头文件搜索目录对以上两种形式的头文件都有效。件都有效。件都有效。件都有效。-设置头文件搜索路径l l命令使命令使用用3.2 C/C+交叉编译器交叉编译器arm-elf-gcc头文件的头文件的头文件的头文件的引用引用引用引用有两种形式:有两种形式:有两种形式:有两种形式:一种是一种是一种是一种是#include“filenameinclude“filename”,一种是一种是一种是一种是#include#include。前一种形式的前一种形式的前一种形式的前一种形式的路径搜索顺序路径搜索顺序路径搜索顺序路径搜索顺序是:当前目录、指定是:当前目录、指定是:当前目录、指定是:当前目录、指定的搜索路径;后一种形式只搜索指定路径。的搜索路径;后一种形式只搜索指定路径。的搜索路径;后一种形式只搜索指定路径。的搜索路径;后一种形式只搜索指定路径。-I dir-I dir-I-I-设置头文件搜索路径例如,例如,编译编译编译编译test.ctest.c,在当前目录和,在当前目录和,在当前目录和,在当前目录和/include/include中搜索中搜索中搜索中搜索test.ctest.c所所所所包含的头文件:包含的头文件:包含的头文件:包含的头文件:arm-elf-arm-elf-gccgcc I./I/include c I./I/include c test.ctest.cl l命令使命令使用用3.2 C/C+交叉编译器交叉编译器arm-elf-gcc例如,例如,如果有隐含申明,显示警告信息:如果有隐含申明,显示警告信息:如果有隐含申明,显示警告信息:如果有隐含申明,显示警告信息:arm-elf-arm-elf-gccgcc c c WimplicitWimplicit test.ctest.c不显示对隐含申明的警告:不显示对隐含申明的警告:不显示对隐含申明的警告:不显示对隐含申明的警告:arm-elf-arm-elf-gccgcc c c WnoWnoimplicit implicit test.ctest.c常用的警告选项有:常用的警告选项有:常用的警告选项有:常用的警告选项有:-w-w 关闭所有警告信息。关闭所有警告信息。关闭所有警告信息。关闭所有警告信息。-Wall-Wall 打开所有警告信息。打开所有警告信息。打开所有警告信息。打开所有警告信息。可以使用以可以使用以可以使用以可以使用以-W-W开头的不同选项对特定警告进开头的不同选项对特定警告进开头的不同选项对特定警告进开头的不同选项对特定警告进行设定。对于每种警告类型都有相应以行设定。对于每种警告类型都有相应以行设定。对于每种警告类型都有相应以行设定。对于每种警告类型都有相应以-WnoWno-开开开开始的选项关闭警告。始的选项关闭警告。始的选项关闭警告。始的选项关闭警告。-控制警告产生l l命令使命令使用用3.2 C/C+交叉编译器交叉编译器arm-elf-gcc1.1.-O1-O1 可以部分减小代码尺寸,对运行速度有一定的提高。可以部分减小代码尺寸,对运行速度有一定的提高。可以部分减小代码尺寸,对运行速度有一定的提高。可以部分减小代码尺寸,对运行速度有一定的提高。较多地使用了寄存器变量,提高指令的并行度。较多地使用了寄存器变量,提高指令的并行度。较多地使用了寄存器变量,提高指令的并行度。较多地使用了寄存器变量,提高指令的并行度。2.2.-O2-O2 除了解循环、函数插装和静态变量优化,几乎包含除了解循环、函数插装和静态变量优化,几乎包含除了解循环、函数插装和静态变量优化,几乎包含除了解循环、函数插装和静态变量优化,几乎包含arm-elf-arm-elf-gccgcc所有优化选项。一般在生成固化代码时使用该所有优化选项。一般在生成固化代码时使用该所有优化选项。一般在生成固化代码时使用该所有优化选项。一般在生成固化代码时使用该选项较为适宜。选项较为适宜。选项较为适宜。选项较为适宜。3.3.-O3-O3 包含包含包含包含-O2-O2的所有优化,并且还包含了解循环、函数插的所有优化,并且还包含了解循环、函数插的所有优化,并且还包含了解循环、函数插的所有优化,并且还包含了解循环、函数插装和静态变量优化。通常情况下,该级优化生成的代码执装和静态变量优化。通常情况下,该级优化生成的代码执装和静态变量优化。通常情况下,该级优化生成的代码执装和静态变量优化。通常情况下,该级优化生成的代码执行速度最快,但是代码尺寸比行速度最快,但是代码尺寸比行速度最快,但是代码尺寸比行速度最快,但是代码尺寸比-O2-O2大一些。大一些。大一些。大一些。arm-elf-arm-elf-gccgcc支持多种优化选项,总体上划分支持多种优化选项,总体上划分支持多种优化选项,总体上划分支持多种优化选项,总体上划分为为为为三级优化三级优化三级优化三级优化:-实现优化l l命令使命令使用用3.2 C/C+交叉编译器交叉编译器arm-elf-gcc例如例如:编译编译编译编译test.ctest.c并且预定义宏并且预定义宏并且预定义宏并且预定义宏 RUN_CACHE RUN_CACHE 值为值为值为值为1 1:arm-:arm-elf-elf-gccgcc c D RUN_CACHE c D RUN_CACHE test.ctest.c编译编译编译编译test.ctest.c并且预定义宏并且预定义宏并且预定义宏并且预定义宏 RUN_CACHE RUN_CACHE 值为值为值为值为0 0:arm-:arm-elf-elf-gccgcc c D RUN_CACHE=0 c D RUN_CACHE=0 test.ctest.c-D macro-D macro定义宏定义宏定义宏定义宏macromacro为为为为1 1。-D macro=-D macro=defndefn 定义宏定义宏定义宏定义宏macromacro为为为为defndefn。-在命令行定义 第第 3 章章 目录目录1 GNU GCC简介简介2 C/C+交叉编译器交叉编译器arm-elf-gcc3 交叉连接器交叉连接器arm-elf-ld 4 工程管理器工程管理器 MAKE5 交叉汇编器交叉汇编器 arm-elf-as6 汇编语言编程汇编语言编程7 简单程序设计简单程序设计8 混合语言编程混合语言编程l l概述概述3.2 交叉连接器交叉连接器arm-elf-ld-命令格式arm-elf-ld option filearm-elf-ld option file命令行后跟选项和可重定位的目标文件名。命令行后跟选项和可重定位的目标文件名。命令行后跟选项和可重定位的目标文件名。命令行后跟选项和可重定位的目标文件名。例如例如:链接的输入文件为链接的输入文件为链接的输入文件为链接的输入文件为demo.odemo.o,输出文件为,输出文件为,输出文件为,输出文件为demo.elfdemo.elf,链接的库为链接的库为链接的库为链接的库为libxxx.alibxxx.a,生成内存映象文件,生成内存映象文件,生成内存映象文件,生成内存映象文件map.txtmap.txt,链接定位文件为,链接定位文件为,链接定位文件为,链接定位文件为linkcmdslinkcmds,则命令如下:,则命令如下:,则命令如下:,则命令如下:arm-elf-ld-Map arm-elf-ld-Map map.txtmap.txt-T -T linkcmdslinkcmds-L./lib o -L./lib o demo.elfdemo.elf demo.odemo.o lxxxlxxxl l概述概述3.2 交叉连接器交叉连接器arm-elf-ld-命令选项列表-e entry-e entry指定程序入口指定程序入口指定程序入口指定程序入口-M-M输出链接信息输出链接信息输出链接信息输出链接信息-larlar指定链接库指定链接库指定链接库指定链接库-L dir-L dir添加搜索路径添加搜索路径添加搜索路径添加搜索路径-o-o设置输出文件名设置输出文件名设置输出文件名设置输出文件名-TcommandfileTcommandfile指定链接命令文件指定链接命令文件指定链接命令文件指定链接命令文件-v-v显示版本信息显示版本信息显示版本信息显示版本信息-Map-Map制定输出映像文件制定输出映像文件制定输出映像文件制定输出映像文件l l命令使命令使用用 3.2 交叉连接器交叉连接器arm-elf-ld-程序入口地址-e entry-e entry以符号以符号以符号以符号entryentry作为程序执行的入口地址,而不从默作为程序执行的入口地址,而不从默作为程序执行的入口地址,而不从默作为程序执行的入口地址,而不从默认的入口地址开始。认的入口地址开始。认的入口地址开始。认的入口地址开始。例如例如:链接的输入文件为链接的输入文件为链接的输入文件为链接的输入文件为demo.odemo.o,输出文件为,输出文件为,输出文件为,输出文件为demo.elfdemo.elf,链接定位文件为链接定位文件为链接定位文件为链接定位文件为linkcmdslinkcmds,将入口地址设为,将入口地址设为,将入口地址设为,将入口地址设为_start_start,命令,命令,命令,命令如下:如下:如下:如下:arm-elf-ld T arm-elf-ld T linkcmdslinkcmds e _start o e _start o demo.elfdemo.elf demo.odemo.ol l命令使命令使用用 3.2 交叉连接器交叉连接器arm-elf-ld-输出链接信息-MM在标准端口打印出符号映象表和内存分布信息。在标准端口打印出符号映象表和内存分布信息。在标准端口打印出符号映象表和内存分布信息。在标准端口打印出符号映象表和内存分布信息。例如例如:链接的输入文件为链接的输入文件为链接的输入文件为链接的输入文件为demo.odemo.o,输出文件为输出文件为输出文件为输出文件为demo.elfdemo.elf,在标准端口打印出符号映象表和内存分在标准端口打印出符号映象表和内存分在标准端口打印出符号映象表和内存分在标准端口打印出符号映象表和内存分布信息,命令如下:布信息,命令如下:布信息,命令如下:布信息,命令如下:arm-elf-ld M o arm-elf-ld M o demo.elfdemo.elf demo.odemo.o如果标准输出设置为显示器,运行命令后将在显示器如果标准输出设置为显示器,运行命令后将在显示器如果标准输出设置为显示器,运行命令后将在显示器如果标准输出设置为显示器,运行命令后将在显示器上显示内存映象信息和符号映象表。上显示内存映象信息和符号映象表。上显示内存映象信息和符号映象表。上显示内存映象信息和符号映象表。l l命令使命令使用用 3.2 交叉连接器交叉连接器arm-elf-ld-输出链接信息-Map-Map mapfilemapfile将链接的符号映象表和内存分布信息输出到文件将链接的符号映象表和内存分布信息输出到文件将链接的符号映象表和内存分布信息输出到文件将链接的符号映象表和内存分布信息输出到文件mapfilemapfile里。里。里。里。例如例如:链接的输入文件为链接的输入文件为链接的输入文件为链接的输入文件为demo.odemo.o,输出文件为,输出文件为,输出文件为,输出文件为demo.elfdemo.elf,将链接的符号映象表和内存分布信息输,将链接的符号映象表和内存分布信息输,将链接的符号映象表和内存分布信息输,将链接的符号映象表和内存分布信息输出到文件出到文件出到文件出到文件map.txtmap.txt里,命令如下:里,命令如下:里,命令如下:里,命令如下:arm-elf-ld Map arm-elf-ld Map map.txtmap.txt o o demo.elfdemo.elf demo.odemo.ol l命令使命令使用用 3.2 交叉连接器交叉连接器arm-elf-ld-指定链接的库出-larlar指定库文件指定库文件指定库文件指定库文件libar.alibar.a为链接的库。为链接的库。为链接的库。为链接的库。可以重复使用可以重复使用可以重复使用可以重复使用-l-l来指定多个链接的库。来指定多个链接的库。来指定多个链接的库。来指定多个链接的库。例如例如:链接的输入文件为链接的输入文件为链接的输入文件为链接的输入文件为demo.odemo.o,指定,指定,指定,指定libxxx.alibxxx.a为为为为链接的库,输出文件为链接的库,输出文件为链接的库,输出文件为链接的库,输出文件为demo.elfdemo.elf,命令如下:,命令如下:,命令如下:,命令如下:arm-elf-ld o arm-elf-ld o demo.elfdemo.elf demo.odemo.o lxxxlxxxl l命令使命令使用用 3.2 交叉连接器交叉连接器arm-elf-ld-添加库和脚本文件的搜索路径-LdirLdir将将将将dirdir添加到搜索路径。添加到搜索路径。添加到搜索路径。添加到搜索路径。例如例如:例如例如例如例如:链接的输入文件为链接的输入文件为链接的输入文件为链接的输入文件为demo.odemo.o,输出文件为,输出文件为,输出文件为,输出文件为demo.elfdemo.elf,将,将,将,将/lib/lib添加到库的搜索路径,命令如下:添加到库的搜索路径,命令如下:添加到库的搜索路径,命令如下:添加到库的搜索路径,命令如下:arm-elf-ld-L./lib o arm-elf-ld-L./lib o demo.elfdemo.elf demo.odemo.o l l命令使命令使用用 3.2 交叉连接器交叉连接器arm-elf-ld-设置输出文件的名字-o output-o output将输出文件名字设定为将输出文件名字设定为将输出文件名字设定为将输出文件名字设定为outputoutput。如果不指定输出文件名,。如果不指定输出文件名,。如果不指定输出文件名,。如果不指定输出文件名,arm-elf-ldarm-elf-ld生成文件名默认为生成文件名默认为生成文件名默认为生成文件名默认为a.outa.out。例如例如:链接的输入文件为链接的输入文件为链接的输入文件为链接的输入文件为demo.odemo.o,输出文件为,输出文件为,输出文件为,输出文件为demo.elfdemo.elf,命令如下:,命令如下:,命令如下:,命令如下:arm-elf-ld o arm-elf-ld o demo.elfdemo.elf demo.odemo.ol llinkcmds连接命令文件连接命令文件3.2 交叉连接器交叉连接器arm-elf-ld-调用linkcmds 首先写一个链接命令文件首先写一个链接命令文件首先写一个链接命令文件首先写一个链接命令文件linkcmdslinkcmds,然后在,然后在,然后在,然后在arm-elf-ldarm-elf-ld的命令中使用的命令中使用的命令中使用的命令中使用-T-T linkcmdslinkcmds参数参数参数参数,就能在就能在就能在就能在链接时自动调用链接时自动调用链接时自动调用链接时自动调用linkcmdslinkcmds文件文件文件文件例如例如:链接的输入文件为链接的输入文件为链接的输入文件为链接的输入文件为demo.odemo.o,输出文件为,输出文件为,输出文件为,输出文件为demo.elfdemo.elf,链接定位文件为,链接定位文件为,链接定位文件为,链接定位文件为linkcmdslinkcmds,则命令如,则命令如,则命令如,则命令如下下下下:arm-elf-ld T arm-elf-ld T linkcmdslinkcmds o o demo.elfdemo.elf demo.odemo.ol llinkcmds连接命令文件连接命令文件3.2 交叉连接器交叉连接器arm-elf-ld-编写linkcmds arm-elf-ldarm-elf-ld的命令语言是一种描述性的脚本语言,它主的命令语言是一种描述性的脚本语言,它主的命令语言是一种描述性的脚本语言,它主的命令语言是一种描述性的脚本语言,它主要应用于控制要应用于控制要应用于控制要应用于控制:有哪些输入文件、文件的格式怎样、输出文有哪些输入文件、文件的格式怎样、输出文有哪些输入文件、文件的格式怎样、输出文有哪些输入文件、文件的格式怎样、输出文件中的模块怎样布局、分段的地址空间怎样分布、以及未初件中的模块怎样布局、分段的地址空间怎样分布、以及未初件中的模块怎样布局、分段的地址空间怎样分布、以及未初件中的模块怎样布局、分段的地址空间怎样分布、以及未初始化的数据段怎样处理等。始化的数据段怎样处理等。始化的数据段怎样处理等。始化的数据段怎样处理等。用命令语言写成的文件用命令语言写成的文件用命令语言写成的文件用命令语言写成的文件(通常称为通常称为通常称为通常称为linkcmdslinkcmds)具有可重用具有可重用具有可重用具有可重用性性性性,不必每次在命令行输入一大堆命令选项不必每次在命令行输入一大堆命令选项不必每次在命令行输入一大堆命令选项不必每次在命令行输入一大堆命令选项