第7章嵌入式开发工具.ppt

上传人:sccc 文档编号:5147776 上传时间:2023-06-08 格式:PPT 页数:27 大小:172.51KB
返回 下载 相关 举报
第7章嵌入式开发工具.ppt_第1页
第1页 / 共27页
第7章嵌入式开发工具.ppt_第2页
第2页 / 共27页
第7章嵌入式开发工具.ppt_第3页
第3页 / 共27页
第7章嵌入式开发工具.ppt_第4页
第4页 / 共27页
第7章嵌入式开发工具.ppt_第5页
第5页 / 共27页
点击查看更多>>
资源描述

《第7章嵌入式开发工具.ppt》由会员分享,可在线阅读,更多相关《第7章嵌入式开发工具.ppt(27页珍藏版)》请在三一办公上搜索。

1、第七章嵌入式开发工具,导论,GNU(GNU is not UNIX)是由Richard Stallman开发的一个与UNIX兼容的软件系统。大多数Linux软件是经过自由软件基金会FSF的GNU(www.gnu.org)公开认证授权的,因此通称为GNU软件。GNU软件免费提供给用户使用,并被证明是非常可靠和高效,如GNU gcc编译器,GNU make项目管理器等。gcc和make都是建立在内核基础上的开发工具和编译工具,其中,gcc是Linux程序开发的基础。,主要内容,7.1 GNU gcc编译器7.2 GNU make工具,7.1 GNU gcc工具,7.1 GNU gcc工具,编译器的

2、作用是将用高级语言或汇编语言编写的源代码翻译成处理器上等效的一系列操作指令。针对嵌入式系统来说,编译器数不胜数。gcc编译器和汇编器as是非常优秀的编译工具。,7.1.1 gcc简介,gcc是GNU C Complier的缩写。Linux系统下的gcc是GNU推出的功能强大、性能优越的多平台编译器,是GNU的代表作之一。gcc可以在多种硬件平台上编译出可执行程序的超级编译器,其执行效率与一般的编译器相比,平均效率要高20%-30%。gcc编译器能将C、C+语言源程序、汇编语言程序和目标程序编译、链接成可执行文件。,7.1.1 gcc简介,gcc是通过后缀名来区别输入文件的类型,下面是gcc所遵

3、循的部分约定规则。.c为后缀的文件,C语言源代码文件;.a为后缀的文件,是由目标文件构成的档案库文件;.C,.cc或.cxx 为后缀的文件,是C+源代码文件;.h为后缀的文件,是程序所包含的头文件;.i 为后缀的文件,是已经预处理过的C源代码文件;.ii为后缀的文件,是已经预处理过的C+源代码文件;.m为后缀的文件,是Objective-C源代码文件;.o为后缀的文件,是编译后的目标文件;.s为后缀的文件,是汇编语言源代码文件;.S为后缀的文件,是经过预编译的汇编语言源代码文件。,7.1.2 gcc所包含的工具,cc C编译器cpp C预处理器。编译器用它来将#include和#define

4、这类声明在源文件中展开。g+C+编译器 gcc C编译器 gccbug 一个shell脚本,帮助创建有价值的bug报告。gcov 覆盖测试工具,用来分析在程序的哪里做优化的效果最好。libgcc gcc的运行时库 libstdc+准C+库,包含许多常用的函数。libsupc+为C+语言提供支持的库函数。,7.1.3 gcc的执行过程,使用gcc由C语言源代码文件生成可执行文件的过程不仅仅是编译的过程,而是要经历四个相互关联的步骤预处理(也称预编译,Preprocessing)编译(Compilation)汇编(Assembly)连接(Linking)1、命令gcc首先调用cpp进行预处理,在预

5、处理过程中,对源代码文件中的文件包含(include)、预编译语句(如宏定义define等)进行分析。,7.1.3 gcc的执行过程,2、接着调用cc1进行编译,这个阶段根据输入文件生成以.o为后缀的目标文件。3、汇编过程是针对汇编语言的步骤,调用as进行工作,一般来讲,.S为后缀的汇编语言源代码文件和汇编、.s为后缀的汇编语言文件经过预编译和汇编之后都生成以.o为后缀的目标文件。4、当所有的目标文件都生成之后,gcc就调用ld来完成最后的关键性工作,这个阶段就是连接。在连接阶段,所有的目标文件被安排在可执行程序中的恰当的位置,同时,该程序所调用到的库函数也从各自所在的档案库中连到合适的地方。

6、,7.1.4 gcc的基本语法和选项,gcc最基本的用法是gcc options filenamesoptions就是编译器所需要的参数,filenames给出相关的文件名称。-c,只编译,不连接成为可执行文件,编译器只是由输入的.c等源代码文件生成.o为后缀的目标文件,通常用于编译不包含主程序的子程序文件。-o output_filename,确定输出文件的名称为output_filename,同时这个名称不能和源文件同名。如果不给出这个选项,gcc就给出预设的可执行文件a.out。-g,产生符号调试工具(GNU的gdb)所必要的符号资讯,要想对源代码进行调试,我们就必须加入这个选项。-O,

7、对程序进行优化编译、连接,采用这个选项,整个源代码会在编译、连接过程中进行优化处理,这样产生的可执行文件的执行效率可以提高,但是,编译、连接的速度就相应地要慢一些。,7.1.4 gcc的基本语法和选项,gcc基于命令行的。当作为交叉编译工具使用时,gcc支持很多种的平台和“宿主机目标机”的组合。对应交叉编译,常用的命令就是arm-linux-gcc。这样,当用C语言写好一个应用程序时,使用此命令就是以生成可以在目标平台上执行的可执行文件,通过超级终端执行后,就可以在目标板上看到程序的结果。,7.2 GNU make工具,7.2.1 GNU make工具,在大型的开发项目中,通常有几十个到上百个

8、的源文件,如果每次均手工键入gcc命令进行编译,会非常不方便。Linux专门为软件开发提供了一个自动化的管理工具GNU make。make可以自动地更新和编译程序。make将整个软件项目的代码分开在几个小的源文件里,在改动其中一个文件的时候,可以只对该文件重新进行编译,然后重新连接所有的目标文件。,7.2.1 make概述,make依靠Makefile文件完成。默认情况下,GNU make工具在当前工作目录中按如下顺序搜索makefile:”GNU makefile”makefile”Makefile”。在Linux系统中,习惯使用Makefile作为makefile文件。如果要使用其他文件作

9、为makefile,则可利用下面make命令指令makefile文件:”#make f Makefile.debug”。Makefile是一个文本格式的数据库文件,包含一些规则,告诉make编译哪些文件,在什么条件下编译。,7.2.1 make概述,Makefile中的每条规则包括下面内容:一个目标体(target):make最终需创建的对象。包含一个或多个依赖体(Dependency)的列表,依赖体指明编译目标时需要用到的其它文件。命令(Command)列表,指明从依赖体文件创建出目标对象所需要执行的命令。样式:(注:每个命令行前必须是一个Tab字符)target:dependency de

10、pendency command command,7.2.2 实例通过automake产生makefile文件,Makefile 基本构造虽然简单,许多刚开始学习写 Makefile 时会感到没有规范可循,而且常常会受限於自己的开发环境,只要环境变数不同或路径改一下,可能Makefile 就得跟着修改。为了减轻程式设计师维护 Makefile 的负担,因此有了 Automake。程式设计人员只需写一些预先定义好的巨集(macro),交给 Automake 处理後会产生一个可供 Autoconf 使用的 Makefile.in 档。再配合利用Autoconf 产生的自动设定档 configure

11、 即可产生一份符合 GNU Makefile惯例的 Makefile 了。,步骤一,1、编写一个简单的c程序#cd/home#mkdir hello#cd hello#vi hello.c#include“stdio.h”int main()printf(“hello GNUn”);return 0;,步骤二,2、用 autoscan 产生一个 configure.in 的雏型,执行 autoscan 后会产生一个configure.scan 的档案,我们可以用它做为 configure.in档的蓝本。#autoscan#lsautoscan.log configure.scan hello.

12、c,步骤三,3、configure.scan包含了系统配置的基本选项,里面都是一些宏定义,我们需要对它进行编辑。此外,我们需要将它改名为configure.in#vi configure.scan主要内容:AC_INIT(hello.c)#原型AC_INIT(FILE),这个宏用来检查源代码所在的路径。AM_INIT_AUTOMAKE(hello,1.0)#这个宏是必须的,它描述了我们将要生成的软件包的名字及其版本。PACKAGE是软件包的名字,VERSION是版本号。当你使用make dist命令时,它会给你生成一个类似helloworld-1.0.tar.gz的软件发行包,其中就有对应的软

13、件包的名字和版本号。AC_PROG_CC#这个宏将检查系统所用的C编译器。AC_OUTPUT(Makefile)#这个宏是我们要输出的Makefile的名字。#mv configure.scan configure.in#configure.in是configure脚本的输入文件。,步骤四,4、执行 aclocal 和 autoconf,分别会产生 aclocal.m4 及 configure 两个档案。aclocal是一个perl 脚本程序。aclocal根据configure.in文件的内容,自动生成aclocal.m4文件。aclocal的定义是:“aclocal-create aclo

14、cal.m4 by scanning configure.ac”。autoconf是用来产生configure文件的。configure是一个脚本,它能设置源程序来适应各种不同的操作系统平台,并且根据不同的系统来产生合适的Makefile,从而可以使你的源代码能在不同的操作系统平台上被编译出来。#aclocal#autoconf,步骤五,4.编辑 Makefile.am 档#vi Makefile.am AUTOMAKE_OPTIONS=foreign bin_PROGRAMS=hello hello_SOURCES=hello.c automake会根据你写的Makefile.am来自动生成

15、Makefile.in。,步骤五,AUTOMAKE_OPTIONS 这个是automake的选项。在执行automake时,它会检查目录下是否存在标准GNU软件包中应具备的各种文件,例如AUTHORS、ChangeLog、NEWS等文件。我们将其设置成foreign时,automake会改用一般软件包的标准来检查。bin_PROGRAMS这个是指定我们所要产生的可执行文件的文件名。如果你要产生多个可执行文件,那么在各个名字间用空格隔开。helloworld_SOURCES 这个是指定产生“helloworld”时所需要的源代码。如果它用到了多个源文件,那么请使用空格符号将它们隔开。比如需要he

16、lloworld.h,helloworld.c那么请写成helloworld_SOURCES=helloworld.h helloworld.c。,步骤六,6、执行 automake-add-missing,Automake 会根据 Makefile.am 档产生一些档案,包含最重要的 Makefile.in。#automake-add-missing#选项“”-add-missing,会让automake加入一个标准的软件包所必须的一些文件。,步骤七、八、九,7、最后执行“./configure”,产生Makefile。#./configure8、根据Makefile编译源代码,连接,生成目

17、标文件,可执行文件。#make9、执行可执行文件#./helloHello GNU!,Makefile的预定义操作,make clean清除上次的make命令所产生的object文件(后缀为“.o”的文件)及可执行文件。make install将编译成功的可执行文件安装到系统目录中,一般为/usr/local/bin目录。make dist 产生发布软件包文件(即distribution package)。这个命令将会将可执行文件及相关文件打包成一个tar.gz压缩的文件用来作为发布软件的软件包。它会在当前目录下生成一个名字类似“PACKAGE-VERSION.tar.gz”的文件。PACKA

18、GE和VERSION,是我们在configure.in中定义的AM_INIT_AUTOMAKE(PACKAGE,VERSION)。,Makefile的预定义操作,make distcheck生成发布软件包并对其进行测试检查,以确定发布包的正确性。这个操作将自动把压缩包文件解开,然后执行configure命令,并且执行make,来确认编译不出现错误,最后提示你软件包已经准备好,可以发布了。=helloworld-1.0.tar.gz is ready for distribution=make distclean类似make clean,但同时也将configure生成的文件全部删除掉,包括Makefile。,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 建筑/施工/环境 > 农业报告


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号