您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 质量控制/管理 > 基于s3c44B0X嵌入式uCLinux系统原理及应用
基于s3c44B0X嵌入式uCLinux系统原理及应用主讲人:李岩哈尔滨理工大学计算机学院本章主要内容:(1)GCC编译过程(2)C/C++交叉编译器arm-elf-gcc(3)交叉汇编器arm-elf-as(4)交叉连接器arm-elf-ld(5)工程管理器make(6)汇编语言编程(7)混合编程第3章目录★1GNUGCC简介★2C/C++交叉编译器arm-elf-gcc★3交叉连接器arm-elf-ld3.1需求分析★4工程管理器MAKE★5交叉汇编器arm-elf-as★6汇编语言编程★7简单程序设计★8混合语言编程第3章目录★1GNUGCC简介★2C/C++交叉编译器arm-elf-gcc★3交叉连接器arm-elf-ld3.1需求分析★4工程管理器MAKE★5交叉汇编器arm-elf-as★6汇编语言编程★7简单程序设计★8混合语言编程3.1GNUGCC简介GNU集成编译环境GCC(GNUCompilerCollection)是一种面向嵌入式领域、支持多种编程语言、支持多种CPU的交叉编译工具。输出预处理后的C/C++源程序(展开头文件和替换宏)输出C/C++源程序的汇编代码输出二进制目标文件生成静态库生成可执行程序转换文件格式GNUGCC的基本功能3.1GNUGCC简介GCC组成--------------C/C++交叉编译器arm-elf-gccarm-elf-gcc是编译的前端程序,它通过调用其他程序来实现将程序源文件编译成目标文件的功能。arm-elf-gcc具有丰富的命令选项,可以控制编译的各个阶段,满足用户的各种编译需求。3.1GNUGCC简介GCC组成--------------汇编器arm-elf-asarm-elf-as将汇编语言程序转换为ELF(ExecutableandLinkingFormat,执行时链接文件格式)格式的可重定位目标代码,这些目标代码同其它目标模块或函数库易于定位和链接。说明:arm-elf-as产生一个交叉参考表和一个标准的符号表,产生的代码和数据能够放在多个区(Section)中。3.1GNUGCC简介GCC组成--------------连接器arm-elf-ldarm-elf-gcc是编译的前端程序,arm-elf-ld根据链接定位文件Linkcmds中的代码区、数据区、BSS区和栈区等定位信息,将可重定位的目标模块链接成一个单一的、绝对定位的目标程序。3.1GNUGCC简介GCC组成--------------库管理器arm-elf-ararm-elf-ar将多个可重定位的目标模块归档为一个函数库文件。3.1GNUGCC简介GCC组成--------------工程管理器MAKEarm-elf-gccMake是用于自动编译、链接程序的实用工具,使用make后就不需要手工的编译每个程序文件。要使用make,首先要编写makefile。Makefile描述程序文件之间的依赖关系,并提供更新文件的命令。3.1GNUGCC简介GCC组成-------------其他实用程序arm-elf-objcopy目标文件格式转换工具等;3.1GNUGCC简介GCC编译程序的基本过程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章目录★1GNUGCC简介★2C/C++交叉编译器arm-elf-gcc★3交叉连接器arm-elf-ld3.1需求分析★4工程管理器MAKE★5交叉汇编器arm-elf-as★6汇编语言编程★7简单程序设计★8混合语言编程概述3.2C/C++交叉编译器arm-elf-gcc------------------命令格式arm-elf-gcc[options]file…在命令arm-elf-gcc后面跟一个或多个选项,选项间用空格隔开,然后跟一个或多个目标文件。例如,将test.c编译成目标文件test.o并且生成调试信息:arm-elf-gcc–g–c–otest.otest.c概述3.2C/C++交叉编译器arm-elf-gcc------------------命令选项列表-c将输入的源文件编译成目标文件-S将C/C++文件生成汇编文件-ofile将输出内容存于文件file-pipe在编译的不同阶段之间采用管道通讯方式-v打印出编译过程中执行的命令-xlanguage说明文件的输入类型为language输出控制选项:概述3.2C/C++交叉编译器arm-elf-gcc------------------命令选项列表-ansi支持所有ANSIC程序C语言选项:概述3.2C/C++交叉编译器arm-elf-gcc------------------命令选项列表-w关闭所有警告-Wall打开所有警告-Wimplicit如果有隐含申明,显示警告信息-Wno-implicit不显示对隐含申明的警告警告选项:概述3.2C/C++交叉编译器arm-elf-gcc------------------命令选项列表-g在文件中产生调试信息(调试信息的文件格式有stabs、COFF、XCOFF、DWARF)调试选项:概述3.2C/C++交叉编译器arm-elf-gcc------------------命令选项列表-O0不优化-O1一级优化-O2二级优化-O3三级优化优化选项:概述3.2C/C++交叉编译器arm-elf-gcc------------------命令选项列表-E运行C的预处理器-C在运用-E进行预处理时不去掉注释-Dmacro定义宏macro为1-Dmacro=defn定义宏macro为defn预处理选项:概述3.2C/C++交叉编译器arm-elf-gcc------------------命令选项列表-Wa,option将选项option传递给汇编器汇编选项:概述3.2C/C++交叉编译器arm-elf-gcc------------------命令选项列表-Idir设置搜索路径为dir-I-指定只对#include“file”,有效的头文件搜索目录搜索路径选项:概述3.2C/C++交叉编译器arm-elf-gcc------------------源文件类型的识别*.c——C源文件*.i——经过预处理后的C源文件*.h——C头文件*.ii——经过预处理后的C++源文件*.cc——C++源文件*.cxx——C++源文件*.cpp——C++源文件*.C——C++源文件*.s——不需要预处理的汇编文件*.S——需要预处理的汇编文件arm-elf-gcc能够自动根据文件名后缀识别文件类型.命令使用3.2C/C++交叉编译器arm-elf-gcc例如,将test.c编译成汇编程序并存放于文件test.txt:arm-elf-gcc–S–otest.txttest.c-ofile将输出内容存于文件file,仅适用于只有一个输出文件时。-----------输出文件名的指定命令使用3.2C/C++交叉编译器arm-elf-gcc例如,将test.c编译成test.o:arm-elf-gcc–c–otest.otest.c-c将输入的源文件编译成目标文件。-----------目标文件的生成命令使用3.2C/C++交叉编译器arm-elf-gcc例如,将test.c编译生成汇编文件test.s:arm-elf-gcc–S–otest.stest.c-S将C/C++文件生成汇编文件。---------将C/C++文件生成汇编文件命令使用3.2C/C++交叉编译器arm-elf-gcc例如,对test.c进行预处理并将结果输出到屏幕:arm-elf-gcc–Etest.c-E只对源文件进行预处理并且缺省输出到标准输出。---------预处理文件的生成命令使用3.2C/C++交叉编译器arm-elf-gcc头文件的引用有两种形式:一种是#include“filename”,一种是#includefilename。前一种形式的路径搜索顺序是:当前目录、指定的搜索路径;后一种形式只搜索指定路径。-Idir将目录dir添加到头文件搜索目录列表的第一项。-I--I-以前用-I指定的头文件搜索目录只对#include“file”有效,对#includefile无效;-I-以后指定的头文件搜索目录对以上两种形式的头文件都有效。---------设置头文件搜索路径命令使用3.2C/C++交叉编译器arm-elf-gcc头文件的引用有两种形式:一种是#include“filename”,一种是#includefilename。前一种形式的路径搜索顺序是:当前目录、指定的搜索路径;后一种形式只搜索指定路径。-Idir-I----------设置头文件搜索路径例如,编译test.c,在当前目录和/include中搜索test.c所包含的头文件:arm-elf-gcc–I./–I/include–ctest.c命令使用3.2C/C++交叉编译器arm-elf-gcc例如,如果有隐含申明,显示警告信息:arm-elf-gcc–c–Wimplicittest.c不显示对隐含申明的警告:arm-elf-gcc–c–Wno–implicittest.c常用的警告选项有:-w关闭所有警告信息。-Wall打开所有警告信息。可以使用以-W开头的不同选项对特定警告进行设定。对于每种警告类型都有相应以-Wno-开始的选项关闭警告。---------控制警告产生命令使用3.2C/C++交叉编译器arm-elf-gcc1.-O1可以部分减小代码尺寸,对运行速度有一定的提高。较多地使用了寄存器变量,提高指令的并行度。2.-O2除了解循环、函数插装和静态变量优化,几乎包含arm-elf-gcc所有优化选项。一般在生成固化代码时使用该选项较为适宜。3.-O3包含-O2的所有优化,并且还包含了解循环、函数插装和静态变量优化。通常情况下,该级优化生成的代码执行速度最快,但是代码尺寸比-O2大一些。arm-elf-gcc支持多种优化选项,总体上划分为三级优化:---------实现优化命令使用3.2C/C++交叉编译器arm-elf-gcc例如:编译test.c并且预定义宏RUN_CACHE值为1:arm-elf-gcc–c–DRUN_CACHEtest.c编译test.c并且预定义宏RUN_CACHE值为0:arm-elf-gcc–c–DRUN_CACHE=0test.c-Dmacro定义宏macro为1。-Dmacro=defn定义宏macro为defn。---------在命令行定义第3章目录★1GNUGCC简介★2C/C++交叉编译器arm-elf-gcc★3交叉连接器arm-elf-ld★4工程管理器MAKE★5交叉汇编器arm-elf-as★6汇编语言编程★7简单程序设计★8混合语言编程概述3.2交叉连接器arm-elf-ld---------命令格式arm-elf-ld[option]file…命令行后跟选项和可重定位的目标文件名。例如:链接的输入文件为demo.o,输出文件为demo.elf,链接的库为libxxx.a,生成内存映象文件map.txt,链接定位文件为linkcmds,则命令如下:arm-elf-ld-Mapmap.txt-Tlinkcmds-L./lib–odemo.elfdemo.o–lxxx概述3.2交叉连接器arm-elf-ld--
本文标题:基于s3c44B0X嵌入式uCLinux系统原理及应用
链接地址:https://www.777doc.com/doc-443176 .html