开发工具介绍课件

上传人:n85ho7****4h85bh 文档编号:243095378 上传时间:2024-09-15 格式:PPTX 页数:80 大小:899.12KB
返回 下载 相关 举报
开发工具介绍课件_第1页
第1页 / 共80页
开发工具介绍课件_第2页
第2页 / 共80页
开发工具介绍课件_第3页
第3页 / 共80页
点击查看更多>>
资源描述
,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,开发工具介绍,1,2,“,工欲善其事,,必先利其器”,-,论语,3,主要内容,GNU Tools,简介,GNU Tools,交叉开发环境及其安装,4,本地开发,vs,交叉平台开发,本地开发:一般软件的开发属于本地开发,也就是说开发软件的系统与运行软件的系统是相同的。,交叉平台开发:本课程所涉及到的嵌入式系统开发属于交叉平台开发,也就是说开发软件的系统与运行软件的系统不同。,2019-7-18,谢谢欣赏,5,交叉开发平台,主机:开发软件的平台,称为主机,往往是通用电脑;,目标机:运行软件的平台,称为目标机,在这里是嵌入式系统。,2019-7-18,谢谢欣赏,6,嵌入式交叉开发工具,掌握嵌入式开发工具的使用是进行嵌入式开发的前提条件之一,与主流软件开发工具类似,嵌入式交叉开发工具也包括,编译器,即能够把一个源程序编译生成一个可执行程序的软件,调试工具,即能够对执行程序进行源码或汇编级调试的软件,软件工程工具,用于协助多人开发或大型软件项目的管理的软件,2019-7-18,谢谢欣赏,7,GNU tools,GNU tools,和其他一些优秀的开源软件可以完全覆盖上述类型的软件开发工具。为了更好的开发嵌入式系统,需要了解如下一些软件,GCC,Binutils,辅助,GCC,的主要软件,Gdb,make,cvs,2019-7-18,谢谢欣赏,8,GCC,很多人认为,GCC,只是一个,C,编译器,其实,GCC = GNU Compiler Collection,目前,,GCC,可以支持多种高级语言,如,C,、,C+,ADA,Object C,JAVA,Fortran,PASCAL,2019-7-18,谢谢欣赏,9,GCC,下的工具,cpp,预处理器,GNU C,编译器在编译前自动使用,cpp,对用户程序进行预处理,gcc,符合,ISO,等标准的,C,编译器,g+,基本符合,ISO,标准的,C+,编译器,gcj,GCC,的,java,前端,gnat,GCC,的,GNU ADA 95,前端,2019-7-18,谢谢欣赏,10,GNU Tools,gcc,gcc,是一个强大的工具集合,它包含了预处理器,编译器,汇编器,链接器等组件。它会在需要的时候调用其他组件。输入文件的类型和传递给,gcc,的参数决定了,gcc,调用具体的哪些组件。,对于开发者,它提供的足够多的参数,可以让开发者全面控制代码的生成,这对嵌入式系统级的软件开发非常重要,2019-7-18,谢谢欣赏,11,gcc,使用举例(,1,)源程序,2019-7-18,谢谢欣赏,12,gcc,使用举例(,2,)编译和运行,编译,运行,2019-7-18,谢谢欣赏,13,gcc,的工作工程(,1,),如果使用,-v,选项,则可以看到许多被隐藏的信息,2019-7-18,谢谢欣赏,14,2019-7-18,谢谢欣赏,15,gcc,的编译过程,一般情况下,,c,程序的编译过程为,预处理,编译成汇编代码,汇编成目标代码,链接,2019-7-18,谢谢欣赏,16,gcc,的工作过程(,2,),预处理使用,-E,参数输出文件的后缀为“,.cpp”,gcc E o gcctest.cpp gcctest.c,使用,wc,命令比较预处理后的文件与源文件,可以看到两个文件的差异,2019-7-18,谢谢欣赏,17,行数 单词数 字节数,预编译,2019-7-18,谢谢欣赏,18,预处理文件,汇编代码,1,)使用,-x,参数说明根据指定的步骤进行工作,,cpp-output,指明从预处理得到的文件开始编译,2,)使用,-S,说明生成汇编代码后停止工作,gcc x cpp-output S o gcctest.s gcctest.cpp,也可以直接编译到汇编代码,gcc S gcctest.c,gcc,的工作过程(,3,),2019-7-18,谢谢欣赏,19,预处理文件,汇编代码,直接编译到汇编代码,2019-7-18,谢谢欣赏,20,gcc,的工作过程(,4,),汇编代码,目标代码,gcc x assembler c gcctest.s,直接编译成目标代码,gcc c gcctest.c,使用汇编器生成目标代码,as o gcctest.o gcctest.s,2019-7-18,谢谢欣赏,21,汇编代码,目标代码,直接编译成目标代码,使用汇编器,2019-7-18,谢谢欣赏,22,gcc,的工作过程(,5,),目标代码,执行代码,gcc o gcctest gcctest.o,直接生成执行代码,gcc o gcctest gcctest.c,2019-7-18,谢谢欣赏,23,目标代码,执行代码,直接生成执行代码,2019-7-18,谢谢欣赏,24,gcc,的高级选项,-Wall,:打开所有的警告信息,2019-7-18,谢谢欣赏,25,根据警告信息检查源程序,Main,函数的返回值为,int,在函数的末尾应当返回一个值,2019-7-18,谢谢欣赏,26,修改源程序,2019-7-18,谢谢欣赏,27,优化编译,优化编译选项有:,-O0,缺省情况,不优化,-O1,-O2,-O3,等等,不同程度的优化,2019-7-18,谢谢欣赏,28,gcc,的优化编译举例(,1,)考虑如下的源代码,不同的优化,编译选项,2019-7-18,谢谢欣赏,29,gcc,的优化编译举例(,2,)使用,time,命令统计程序的运行,2019-7-18,谢谢欣赏,30,GNU binutils,binutils,是一组二进制工具程序集,是辅助,GCC,的主要软件,它主要包括,addr2line,把程序地址转换为文件名和行号。在命令行中给它一个地址和一个可执行文件名,它就会使用这个可执行文件的调试信息指出在给出的地址上是哪个文件以及行号。,ar,建立、修改、提取归档文件。归档文件是包含多个文件内容的一个大文件,其结构保证了可以恢复原始文件内容。,2019-7-18,谢谢欣赏,31,as,是,GNU,汇编器,主要用来编译,GNU C,编译器,gcc,输出的汇编文件,他将汇编代码转换成二进制代码,并存放到一个,object,文件中,该目标文件将由连接器,ld,连接,C+filt,解码,C+,符号名,连接器使用它来过滤,C+,和,Java,符号,防止重载函数冲突。,gprof,显示程序调用段的各种数据。,ld,是连接器,它把一些目标和归档文件结合在一起,重定位数据,并链接符号引用,最终形成一个可执行文件。通常,建立一个新编译程序的最后一步就是调用,ld,。,2019-7-18,谢谢欣赏,32,nm,列出目标文件中的符号。,objcopy,把一种目标文件中的内容复制到另一种类型的目标文件中,.,objdump,显示一个或者更多目标文件的信息。使用选项来控制其显示的信息。它所显示的信息通常只有编写编译工具的人才感兴趣。,ranlib,产生归档文件索引,并将其保存到这个归档文件中。在索引中列出了归档文件各成员所定义的可重分配目标文件。,readelf,显示,ebf,格式可执行文件的信息。,2019-7-18,谢谢欣赏,33,size,列出目标文件每一段的大小以及总体的大小。默认情况下,对于每个目标文件或者一个归档文件中的每个模块只产生一行输出。,strings,打印某个文件的可打印字符串,这些字符串最少,4,个字符长,也可以使用选项,-n,设置字符串的最小长度。默认情况下,它只打印目标文件初始化和可加载段中的可打印字符;对于其它类型的文件它打印整个文件的可打印字符,这个程序对于了解非文本文件的内容很有帮助。,strip,丢弃目标文件中的全部或者特定符号。,2019-7-18,谢谢欣赏,34,libiberty,包含许多,GNU,程序都会用到的函数,这些程序有:,getopt, obstack, strerror, strtol,和,strtoul.,libbfd,二进制文件描述库,.,libopcodes,用来处理,opcodes,的库,在生成一些应用程序的时候也会用到它,比如,objdump.Opcodes,是文本格式可读的处理器操作指令,.,2019-7-18,谢谢欣赏,35,binutils,开发工具使用举例,ar,nm,Objcopy,Objdump,readelf,2019-7-18,谢谢欣赏,36,ar,ar,用于建立、修改、提取归档文件,(archive),,一个归档文件,是包含多个被包含文件的单个文件(也可以认为归档文件是一个库文件)。,被包含的原始文件的内容、权限、时间戳、所有者等属性都保存在归档文件中,并且在提取之后可以还原,2019-7-18,谢谢欣赏,37,使用,ar,建立库文件(,1,),源程序,add.c,和,minus.c,2019-7-18,谢谢欣赏,38,使用,ar,建立库文件(,2,),编译成目标文件,建立库文件,将库文件拷贝到,/usr/lib,目录下,Ar,的,rv,参数的说明:,r,:将多个文件组成一个文件,v,:输出信息,2019-7-18,谢谢欣赏,39,库文件使用举例在代码中使用,Add,和,Minus,函数,2019-7-18,谢谢欣赏,40,在编译时指定库文件,指明将,libtest.a,链接进来,运行结果,2019-7-18,谢谢欣赏,41,nm,nm,的主要功能是列出目标文件中的符号,这样程序员就可以定位和分析执行程序和目标文件中的符号信息和它的属性,2019-7-18,谢谢欣赏,42,nm,显示的符号类型,A,:符号的值是绝对值,并且不会被将来的链接所改变,B,:符号位于未初始化数据部分(,BSS,段),C,:符号是公共的。公共符号是未初始化的数据。在链接时,多个公共符号可能以相同的名字出现。如果符号在其他地方被定义,则该文件中的这个符号会被当作引用来处理,D,:符号位于已初始化的数据部分,T,:符号位于代码部分,U,:符号未被定义,?:符号类型未知,或者目标文件格式特殊,2019-7-18,谢谢欣赏,43,nm,使用举例,如果对,test,可执行文件使用,nm,,,会有什么结果呢?,2019-7-18,谢谢欣赏,44,objcopy,可以将一种格式的目标文件内容进行转换,并输出为另一种格式的目标文件。它使用,GNU BFD(binary format description),库读,/,写目标文件,通过这个,BFD,库,,objcopy,能以一种不同于源目标文件的格式生成新的目标文件,$objcopy -h,在,makefile,里面用,-O binary,选项来生成原始的二进制文件,即通常说的,image,文件,2019-7-18,谢谢欣赏,45,Objcopy,使用举例,使用,file,命令查看文件类型,生成,srec,格式的目标文件,使用,file,命令查看新文件的类型,2019-7-18,谢谢欣赏,46,文件格式,a.outassembler and link editor output,汇编器和链接编辑器的输出,coffcommon object file format,一种通用的对象文件格式,ELFexcutive linked fileLinux,系统所采用的一种通用文件格式,支持动态连接。,ELF,格式可以比,COFF,格式包含更多的调试信息,2019-7-18,谢谢欣赏,47,文件格式,Flatelf,格式有很大的文件头,,flat,文件对文件头和一些段信息做了简化,uClinux,系统使用,flat,可执行文件格式,SRECMOTOROLA S-Recoder,格式(,S,记录格式文件),等等,2019-7-18,谢谢欣赏,48,objdump,显示一个或多个目标文件的信息,由其选项来控制显示哪些信息。一般来说,,objdump,只对那些要编写编译工具的程序员有帮助,但是我们通过这个工具可以方便的查看执行文件或者库文件的信息,2019-7-18,谢谢欣赏,49,Objdump,使用举例(,1,),-f,选项:显示文件头中的内容,2019-7-18,谢谢欣赏,50,Objdump,使用举例(,2,),-d,选项进行反汇编,2019-7-18,谢谢欣赏,51,readelf,readelf,软件显示一个或多个,ELF,格式的目标文件信息。,2019-7-18,谢谢欣赏,52,Readelf,使用举例,2019-7-18,谢谢欣赏,53,其他,GNU,工具,Gdb,调试器,GNU make,软件工程工具,diff,,,patch,补丁工具,CVS,版本控制系统,2019-7-18,谢谢欣赏,54,GNU Toolchain,gdb,Gdb = GNU debuger,GNU tools,中的调试器,功能强大,设置断点,监视、修改变量,单步执行,显示,/,修改寄存器的值,堆栈查看,远程调试,2019-7-18,谢谢欣赏,55,gdb,使用举例(,1,),源代码如下,编译,:,gcc o bug bug.c,2019-7-18,谢谢欣赏,56,gdb,使用举例(,2,)编译并运行,?,编译,2019-7-18,谢谢欣赏,57,gdb,使用举例(,3,)使用,gdb,调试,bug,运行,bug,输入字符串,出错位置,能不能看到源代码呢?,2019-7-18,谢谢欣赏,58,使用,gcc,的,-g,参数,gcc g o bug bug.c,重新调试,源代码,2019-7-18,谢谢欣赏,59,2019-7-18,谢谢欣赏,60,使用,GNU make,管理项目,GNU make,是一种代码维护工具,在使用,GNU,编译器开发大型应用时,往往要使用,make,管理项目。,如果不使用,make,管理项目,就必须重复使用多个复杂的命令行维护项目和生成目标代码。,Make,通过将命令行保存到,makefile,中简化了编译工作。,Make,的主要任务是根据,makefile,中定义的规则和步骤,根据各个模块的更新情况,自动完成整个软件项目的维护和代码生成工作。,2019-7-18,谢谢欣赏,61,Make,可以识别出,makefile,中哪些文件已经被修改,并且在再次编译的时候只编译这些文件,从而提高编译的效率,Make,会检查文件的修改和生成时间戳,如果目标文件的修改或者生成时间戳比它的任意一个依赖文件旧,则,make,就执行,makefile,文件中描述的相应命令,以便更新目的文件,只更新那些需要更新的文件,而不重新处理那些并不过时的文件,2019-7-18,谢谢欣赏,62,特点:,适合于支持多文件构成的大中型软件项目的编译,链接,清除中间文件等管理工作,提供和识别多种默认规则,方便对大型软件项目的管理,支持对多目录的软件项目进行递归管理,对软件项目具有很好的可维护性和扩展性,2019-7-18,谢谢欣赏,63,makefile,Makefile,告诉,make,该做什么、怎么做,makefile,主要定义了,1,)依赖关系即有关哪些文件的最新版本是依赖于哪些别的文件产生或者组成的,2,)需要用什么命令来产生目标文件的最新版本,3,)以及一些其他的功能,2019-7-18,谢谢欣赏,64,Makefile,的规则,规则,一条规则包含,3,个方面的内容,,1,)要创建的目标(文件),,2,)创建目标(文件)所依赖的文件列表;,3,)通过依赖文件创建目标文件的命令组,2019-7-18,谢谢欣赏,65,规则一般形式,target,. :,prerequisites,.,command,.,.,例如,test:test.c;gcc O o test test.c,2019-7-18,谢谢欣赏,66,一个简单的,makefile,edit : main.o kbd.o command.o display.o insert.o search.o files.o utils.o,cc -o edit main.o kbd.o command.o display.o insert.o ,search.o files.o utils.o,main.o : main.c defs.h,cc -c main.c,kbd.o : kbd.c defs.h command.h,cc -c kbd.c,command.o : command.c defs.h command.h,cc -c command.c,display.o : display.c defs.h buffer.h,cc -c display.c,insert.o : insert.c defs.h buffer.h,cc -c insert.c,search.o : search.c defs.h buffer.h,cc -c search.c,files.o : files.c defs.h buffer.h command.h,cc -c files.c,utils.o : utils.c defs.h,cc -c utils.c,clean : rm edit main.o kbd.o command.o display.o insert.o ,search.o files.o utils.o,2019-7-18,谢谢欣赏,67,Make,的工作过程,default goal,在缺省的情况下,,make,从,makefile,中的第一个目标开始执行,Make,的工作过程类似一次深度优先遍历过程,2019-7-18,谢谢欣赏,68,Makefile,中的变量,使用变量可以,降低错误风险,简化,makefile,objects,变量(,$(objects),),objects = main.o kbd.o command.o ,display.o insert.o search.o files.o utils.o,edit : $(objects),cc -o edit $(objects),2019-7-18,谢谢欣赏,69,有点像环境变量,环境变量在,make,过程中被解释成,make,的变量,可以被用来,贮存一个文件名列表。,贮存可执行文件名。如用变量代替编译器名。,贮存编译器,FLAG,2019-7-18,谢谢欣赏,70,预定义变量,Make,使用了许多预定义的变量,如,AR,AS,CC,CXX,CFLAGS,CPPFLAGS,等等,2019-7-18,谢谢欣赏,71,简化后的,makefile,文件,objects = main.o kbd.o command.o display.o ,insert.o search.o files.o utils.o,edit : $(objects),cc -o edit $(objects),main.o : defs.h,kbd.o : defs.h command.h,command.o : defs.h command.h,display.o : defs.h buffer.h,insert.o : defs.h buffer.h,search.o : defs.h buffer.h,files.o : defs.h buffer.h command.h,utils.o : defs.h,.PHONY : clean,clean :,rm edit $(objects),2019-7-18,谢谢欣赏,72,内部变量,$,扩展成当前规则的目的文件名,$,扩展成依靠列表中的第一个依靠文件,$,扩展成整个依靠的列表(除掉了里面所有重复的文件名),等等,不需要括号括住,例如:,CC = gccCFLAGS = -Wall -O -g foo.o : foo.c foo.h bar.h$(CC) $(CFLAGS) -c $ -o $,2019-7-18,谢谢欣赏,73,隐含规则,(Implicit Rules),内置的规则,告诉,make,当没有给出某些命令的时候,应该怎么办。,用户可以使用预定义的变量改变隐含规则的工作方式,如,一个编译的具体命令将会是:,$(CC) $(CFLAGS) $(CPPFLAGS) $(TARGET_ARCH) -c $ -o $,2019-7-18,谢谢欣赏,74,设定目标(,Phony Targets,),设定目标,目标不是一个文件,其目的是为了让一些命令得以执行,使用,PHONY,显式声明设定目标,.PHONY: clean,使用设定目标实现多个目的,all: prog1 prog2,2019-7-18,谢谢欣赏,75,典型的设定目标,设定目的,也可以用来描述一些其他的动作。例如,想把中间文件和可执行文件删除,可以在,makefile,里设立这样一个规则:,clean:,$rm *.o exec_file,前提是没有其它的规则依靠这个,clean,目的,它将永远 不会被执行。但是,如果你明确的使用命令,make clean,,,make,会把这个目的做为它的主要目标,执行那些,rm,命令,2019-7-18,谢谢欣赏,76,Makefile,中的函数,(Functions),用来计算出要操作的文件、目标或者要执行的命令,使用方法:,$(function arguments),典型的函数,$(subst,from,to,text,),$(subst ee,EE,feet on the street),相当于,fEEt on the strEEt,2019-7-18,谢谢欣赏,77,$(patsubst,pattern,replacement,text,),$(patsubst %.c,%.o,x.c.c bar.c),相当于,x.c.o bar.o,$(wildcard,pattern,),$(wildcard *.c),objects := $(wildcard *.o),2019-7-18,谢谢欣赏,78,makefile,中的条件语句,conditional-directive,text-if-true,endif,or,conditional-directive,text-if-true,else,text-if-true,endif,2019-7-18,谢谢欣赏,79,四种条件语句,ifeq.else.endif,ifneq,else,endif,ifndef,else,endif,ifndef.else,endif,2019-7-18,谢谢欣赏,80,实际项目中的,makefile,
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 办公文档 > 教学培训


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!