嵌入式linux开发chapter3.ppt

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

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

1、第3章 嵌入式linux开发 3.1 开发环境和常用开发工具3.1.1 vi编辑器3.1.2 gcc编译器 3.1.3 make与makefile 3.1.4 交叉编译3.1.5 gdb调试器 3.2 嵌入式linux内核编译 3.2.1 内核源代码布局 3.2.2 内核编译步骤 3.2.3 内核配置 3.3 系统编程简介,3.1 开发环境和常用开发工具,VI 简介,Unix 下的全屏幕可视化编辑器由于其源代码不可获得,衍生了许多克隆版本nvi、elvis、vile、VIM.,vi的操作模式,图2-2 vi编辑器的三种工作模式,vi的常用命令,GCC,功能:高级语言(.c、.cpp、.F)汇编

2、语言(.s)用户界面,驱动各工具的执行组成:一组可执行程序+一组库cpp、gcc、g+、g77 cpp0、cc1、cc1plus、f771 libgcc.a、crtbegin.o、crtend.o 支持多种语言和目标机,GNU工具链的组成,GCCGNU Compiler CollectionBinutilsGNU binary utilitiesGlibcGNU C Library软件开发的基本工具集合,Binutils,功能:汇编语言(.s)目标文件可执行程序查看二进制文件信息组成:一组可执行程序as、ldobjdump、readelf、ar 支持多种目标机,Glibc,功能:提供语言和操作

3、系统的标准库函数组成:若干可执行程序+大量库ldd、iconv、localeISO C、POSIX、UNIX、GNU绝大部分与目标机无关,编译工具链的基本工作流程,一个“hello world”程序的演变历程,gcc最基本的用法是gcc options filenames基本参数说明:-E:只进行预处理-S:只进行编译;产生汇编代码-c:只编译、汇编,不连接成为可执行文件,编译器只是由输入的.c等源代码文件生成.o为后缀的目标文件,通常用于编译不包含主程序的子程序文件-ooutput_filename:确定输出文件的名称为output_filename,同时这个名称不能和源文件同名。如果不给出

4、这个选项,gcc就给出预设的可执行文件a.out-v:打印程序的编译过程,以及编译器的版本-g:产生符号调试工具(GNU的gdb)所必要的符号资讯,要想对源代码进行调试,必须加入这个选项-o:对程序进行优化编译、连接-O2:比-O更好的优化-Dmacro或-Dmacro=defn其作用类似于源程序里的#define。,-Idirname:将dirname所指出的目录加入到程序头文件目录列表中,是在预编译过程中使用的参数.C程序中的头文件包含两种情况 A)#include B)#include“myinc.h”其中,A类使用尖括号(),B类使用双引号(“”)。对于A类,预处理程序cpp在系统预设

5、包含文件目录(如/usr/include)中搜寻相应的文件,而对于B类,cpp在当前目录中搜寻头文件,这个选项的作用是告诉cpp,如果在当前目录中没有找到需要的文件,就到指定的dirname目录中去寻找。在程序设计中,如果我们需要的这种包含文件分别分布在不同的目录中,就需要逐个使用-I选项给出搜索路径-Ldirname:将dirname所指出的目录加入到程序函数档案库文件的目录列表中,是在连接过程中使用的参数。在预设状态下,连接程序ld在系统的预设路径中(如/usr/lib)寻找所需要的档案库文件,这个选项告诉连接程序,首先到-L指定的目录中去寻找,然后到系统预设路径中寻找,如果函数库存放在多

6、个目录下,就需要依次使用这个选项,给出相应的存放目录-lname:在连接时,装载名字为“libname.a”的函数库,该函数库位于系统预设的目录或者由-L选项确定的目录下。例如,-lm表示连接名为“libm.a”的数学函数库,gcc 常用方式,gcc 选项 源文件 目标文件$gcc hello.c o hello$gcc c hello.cpp o hello.o$gcc myapp.c L/home/silver/lib I/home/silver/include lnew o myapp,GDB调试器,还可以用下面的方式来运行gdb:gdb filename其中,filename是要调试的

7、可执行文件。用这种方式运行gdb可以直接指定想要调试的程序。这和启动gdb后执行file filename命令效果完全一样。也可以用gdb去检查一个因程序异常终止而产生的core文件,或者与一个正在运行的程序相连。,gdb支持很多的命令且能实现不同的功能。这些命令从简单的文件装入到允许你检查所调用的堆栈内容的复杂命令,下面列出了在使用gdb 调试时会用到的一些命令。1)file命令:装入想要调试的可执行文件。2)cd命令:改变工作目录。3)pwd命令:返回当前工作日录。4)run命令:执行当前被调试的程序。5)kill命令:停止正在调试的应用程序。,6)list命令:列出正在调试的应用程序的源

8、代码。7)break命令:设置断点。8)Tbreak命令;设置临时断点。它的语法与break相同。区别在于用tbreak设置的断点执行一次之后立即消失。9)watch命令:设置监视点,监视表达式的变化。10)awatch命令:设置读写监视点。当要监视的表达式被读或写时将应用程序挂起。它的语法与watch命令相同。11)rwatch命令:设置读监视点,当监视表达式被读时将程序挂起,等侍调试。此命令的语法与watch相同。,12)next命令:执行下一条源代码,但是不进入函数内部。也就是说,将一条函数调用作为一条语句执行。执行这个命令的前提是已经run,开始了代码的执行。13)step命令:执行下

9、一条源代码,进入函数内部。如果调用了某个函数,会跳到函数所在的代码中等候一步步执行。执行这个命令的前提是已经用run开始执行代码。14)display命令:在应用程序每次停止运行时显示表达式的值。15)info break命令:显示当前断点列表,包括每个断点到达的次数。,16)info files命令:显示调试文件的信息。17)info func命令:显示所有的函数名。18)info local命令:显示当前函数的所有局部变量的信息。19)info prog命令:显示调试程序的执行状态。20)print命令;显示表达式的值。21)delete命令:删除断点。指定一个断点号码,则删除指定断点。不

10、指定参数则删除所有的断点。22)Shell命令:执行Linux Shell命令。23)make命令:不退出gdb而重新编译生成可执行文件。24)Quit命令:退出gdb。,3、6 Make工程管理器,一、Makefile基本结构一个Makefile文件主要含有一系列的规则,每条规则包含以下内容。一个目标(target),即make最终需要创建的文件,如可执行文件和目标文件;目标也可以是要执行的动作,如“clean”。一个或多个依赖文件(dependency)列表,通常是编译目标文件所需要的其他文件。一系列命今(command),是make执行的动作,通常是把指定的相关文件编译成目标文件的编译命

11、令,每个命令占一行,且每个命令行的起始字符必须为TAB字符。,Makefile规则的一般形式如下:target:dependency dependency(tab),例如有两个文件hello.c和hello.h:/*hello.c*/int main()printf(firstn);return 0;/*hello.h*/#include,创建的目标为可执行程序hello,则对应的Makefike写为:hello:hello.c hello.hgcc hello.c-o hello,二、Makefile变量例如,有以下的Makefile文件:test:prog.o code.ogcc o te

12、st prog.o code.oprog.o:prog.c prog.h code.hgcc c prog.c o prog.ocode.o:code.c code.hgcc c code.c o code.oclean:rm f*.o,变量的主要作用如下:保存文件名列表。保存可执行命令名。保存编译器的参数。定义变量的语法:VARNAME=string使用时,把变量用括号括起来,并在前面加上$符号,就可以引用变量的值:$VARNAME,现在利用变量把前面的Makefile重写一遍:OBJS=prog.o code.oCC=gcctest:$OBJS$CC o test$OBJS prog.o:

13、prog.c prog.h code.h$CC c prog.c o prog.ocode.o:code.c code.h$CC c code.c o code.oclean:rm f*.o,Makefile中还有一些预定义变量和自动变量,但是看起来并不像自定义变量那样直观。P89表3.15给出了常见的自动变量。除了自动变量外,Makefile中还有一些预定义的内部变量,用于定义编译命令名、编译参数等,如表3.14所示,现在利用自动变量把前面的Makefile重写一遍:OBJS=prog.o code.oCC=gcctest:$OBJS$CC o test$OBJS prog.o:prog.c

14、 prog.h code.h$CC c prog.c o prog.ocode.o:code.c code.h$CC c code.c o code.oclean:rm f*.o,OBJS=prog.o code.oCC=gcctest:$OBJS$CC o$prog.o:prog.c prog.h code.h$CC c$o$code.o:code.c code.h$CC c$o$clean:rm f*.o,三、Makefile的隐规则,make知道一些默认的动作,它有一些称作隐含规则的内置的规则,这些规则告诉make当用户没有完整地给出某些命令的时候,应该怎样执行。这样用户就不必指定详细而又负责的具体细节,只用写出目标文件就可以了。,在上面的例子中,利用隐含规则,可以简化为:OBJS=prog.o code.oCC=gcctest:$OBJS$CC o$prog.o:prog.c prog.h code.hcode.o:code.c code.hclean:rm f*.o,

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

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


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号