资源描述
单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,单击此处编辑母版标题样式,第二章补充,嵌入式操作系统,1,目标,了解嵌入式操作系统,了解Linux,独立安装Linux,熟练操作Linux常用命令,熟练使用Linux下的编辑器,熟练使用GCC编译器,能够使用GDB调试器,了解Linux编程库,2,嵌入式操作系统,嵌入式操作系统,实时系统,主流嵌入式操作系统,Linux的发展历史,Linux发行版本,Linux安装,Linux编程环境,3,Linus Torvalds,Linux的创始人,4,Linux项目,1991年8月,芬兰研究生Linus Torvalds谨慎地发布了一个新的类Unix的操作系统内核,内容如下:,来自:(Linus Benedict Torvalds),新闻组:,主题:在minix中你最想看到什么?,摘要:关于我的新操作系统的小调查,时间:1991年8月25日 20:57:08格林尼治时间,每个使用minix的朋友,你们好。,我正在做一个(免费的)用在386(486)AT上的操作系统(只是业余爱好,它不会像GNU那样庞大和专业)。这个想法从4月份起就开始酝酿,现在快要完成了。我希望得到各位对minix的任何反馈意见,因为我的操作系统在某些方面是与它相类似的(其中包括相同的文件系统的物理设计(因为某些实际的原因)。,我现在已经移植了bash(1.08)和gcc(1.40),并且看上去能运行。这意味着我需要用几个月的时间使它变得更实用一些,并且我想知道大多数人想要的特性。欢迎提出任何建议,但是我无法保证都能实现。:-),Linus(torvaldskruuna.helsinki.?),接下来,如他们所说,这就成为了历史。Linux逐渐发展成为一个技术和文化现象。通过结合GNU项目的力量,Linux项目发展成为一个完整的、符合Posix标准的Unix操作系统的版本,包括内核和所有支撑的基础设施。从手持设备到大型计算机,Linux在范围如此广泛的计算机上得到了应用。IBM的一个工作组甚至把Linux移植到了一块腕表中!,5,Linux发行版本,RedHat,Fedora Core,Mandrake,Suse,Debian,CentOS,Ubuntu,RedFlag,6,Linux的编程环境,1.1 Shell简介及常用Shell命令,1.2 Linux与GNU,1.4编译器GCC的使用,1.5调试器GDB的使用,1.6 Make工程管理器,1.7 Linux编程库,1.3 Linux程序编辑器Vi,7,Shell简介及常用Shell命令,Shell作为操作系统的最外层,也称为外壳,内核、Shell和用户的关系,Shell是一种Linux中的命令行解释程序,为用户提供使用操作系统的接口。用户在提示符下输入的命令都由Shell先解释然后传给Linux内核。,Linux中运行Shell的环境是“系统工具”下的“终端”,可以单击“终端”以启动Shell环境。这时屏幕上显示类似“,linuxwww home$,”的信息,其中,linux是指系统用户,而home是指当前所在的目录。,Shell也是一种程序设计语言,用户可利用多条shell命令构成一个文件。,8,Shell命令使用说明,Shell命令的一般格式,命令名【选项】【参数1】【参数2】,命令行中的第一部分必须是一个命令的名字,第二部分是命令的选项或参数,命令行中的每个部分必须有空格或Tab键隔开;【】内表示可选项,对于选项和参数的说明,【选项】是一个包括一个或多个字母的代码,它前面有一个减号(-)。,【参数】提供命令运行的信息或者命令执行所使用的文件名。,命令历史列表,使用箭头键、F3等功能键翻查历史命令,输入命令行自动补齐,输入命令的任何时刻按【Tab】键,系统将试图补齐已输入的命令,中断Shell命令的方法Ctrl+C,Shell简介及常用Shell命令,9,常用Shell命令,对目录和文件的操作,cd,pwd,mkdir,rm,cp,ln,grep,find,chmod,chown,用户管理,adduser,userdel,su,进程管理,ps,kill,文件的打包与压缩(gzip和bzip2两种压缩包),打包并压缩:tar cvzf *.jpg或tar cvjf test.tar.bz2*.jpg,解压缩包:tar xvzf 或tar xvjf,rmp软件包的安装,源码维护基本命令,diff创建补丁:diff ruN a.txt b.txt c.patch,patch打补丁:patch p1 c.patch,配置、编译、安装源码包软件,./configure,make,make install,模块管理命令,帮助命令,man 命令名,如:man ls,查看帮助时,按下空格键进行翻页,按下“q”键退出帮助,Linux命令大全,Shell简介及常用Shell命令,10,Linux与GNU,Linux是一套免费使用和自由传播的类UNIX操作系统。该项目由荷兰的Linus Torvalds所启动。,Linux是一个Unix兼容的系统,大部分通用的Unix工具和程序都可以在Linux系统下运行,GNU=,G,NU is,N,ot,U,nix,1984:由Richard Stallman创建 免税慈善项目,2002:发展成为一个Unix操作系统的所有主要部件构成的环境,内核除外(内核由Linux项目发展而来),GNU环境包括:EMACS编辑器、GCC编译器、GDB调试器、汇编器、链接器、处理二进制文件的工具以及其它部件,Richard Stallman自由软件运动的精神领袖、GNU计划以及自由软件基金会的创立者,11,Linux编辑器Vi的使用,Linux编辑器,行编辑器(ed、ex),行编辑器每次只能对单行进行操作,使用起来很不方便,全屏幕编辑器(vi、emacs),全屏幕编辑器可以对整个屏幕进行编辑,用户编辑的文件直接显示在屏幕上,vi是Linux系统的第一个全屏幕交互式编辑程序,12,vi的模式,vi有3种模式:命令行模式、插入模式、底行模式,(1)命令行模式,用户在用vi编辑文件时,最初进入的为一般模式。在该模式中可以通过上下移动光标进行“删除字符”或“整行删除”等操作,也可以进行“复制”、“粘贴”等操作,但无法编辑文字。,(2)插入模式,只有在该模式下,用户才能进行文字编辑输入,用户课按ESC键回到命令行模式。,(3)底行模式,在该模式下,光标位于屏幕的底行。用户可以进行文件保存或退出操作,也可以设置编辑环境,如寻找字符串、列出行号等。,Linux编辑器Vi的使用,13,vi的基本流程,(1)进入vi,即在命令行下键入vi hello(文件名)。此时进入的是命令行模式,光标位于屏幕的上方,如图3.1所示。,(2)在命令行模式下键入i进入到插入模式,如图3.2所示。可以看出,在屏幕底部显示有“插入”表示插入模式,在该模式下可以输入文字信息。,(3)最后,在插入模式中,输入“Esc”,则当前模式转入命令行模式,并在底行行中输入“:wq”(存盘退出)进入底行模式,如图3.3所示。,这样,就完成了一个简单的vi操作流程:命令行模式插入模式底行模式。,Linux编辑器Vi的使用,14,vi的各模式功能键,命令行模式常见功能键如表:,插入模式的功能键只有一个,,也就是Esc退出到命令行模式。,底行模式常见功能键如表所示:,Linux编辑器Vi的使用,15,程序被其它程序翻译成不同的格式,16,GCC编译器的使用,GNU CC(简称为Gcc)是GNU项目中符合ANSI C标准的编译系统,能够编译用C、C+和Object C等语言编写的程序。gcc不仅功能强大,而且可以编译如C、C+、Object C、Java、Fortran、Pascal、Modula-3和Ada等多种语言,而且gcc又是一个交叉平台编译器,它能够在当前CPU平台上为多种不同体系结构的硬件平台开发软件,因此尤其适合在嵌入式领域的开发编译。,下表是gcc支持编译源文件的后缀及其解释。,17,gcc编译流程分为4个步骤,预处理阶段,预处理器(cpp)根据以字符开头的命令,修改原始的C程序。如C程序第一行include,与处理器将读需stdio.h的内容并将它插入到C程序中。结果生成一个.i为扩展名的文件。,编译阶段,编译器(ccl)将.i文件翻译成文本文件.s,它包含一个汇编语言程序。,汇编阶段,汇编器(as)将.s文件翻译成机器语言指令,把这些指令打包成一种叫做可重定位目标程序的格式,并将结果保存在目标文件.o中。它是一个二进制文件,它的字节编码是机器指令而不是字符。,链接阶段,链接器(ld)负责将程序中所使用的C库函数,如printf函数所在的printf.o并入到前面生成的.o程序中,最终得到一个可执行目标文件(可执行文件)。可执行文件加载到存储器后,由系统负责执行。,GCC编译器的使用,18,gcc编译选项分析,(1)总体选项,右表:,(2)告警和出错选项,右表:,(3)优化选项,gcc可以对代码进行优化,,它通过编译选项“-On”来控制,优化代码的生成,其中n是一,个代表优化级别的整数。对,于不同版本的gcc来讲,n的取,值范围及其对应的优化效果可,能并不完全相同,比较典型的,范围是从0变化到2或3。,(4)体系结构相关选项,GCC编译器的使用,19,调试是所有程序员都会面临的问题。如何提高程序员的调试效率,更好更快地定位程序中的问题从而加快程序开发的进度,是大家共同面对的。,Windows下的一些调试工具,如VC自带的如设置断点、单步跟踪等,在Linux下有什么很好的调试工具呢?,GDB调试器是一款GNU开发组织并发布的UNIX/Linux下的程序调试工具。虽然,它没有图形化的友好界面,但是它强大的功能也足以与微软的VC工具等媲美。,GDB调试器的使用,20,打开Linux下的编辑器vi,编辑如下代码,#,vi test.c,在保存退出后首先使用gcc对test.c进行编译,注意一定要加上选项“-g”,这样编译出的可执行代码中才包含调试信息,否则之后gdb无法载入该可执行文件,#,gcc-g test.c-o test,启动gdb进行调试。注意,gdb进行调试的是可执行文件,而不是如“.c”的源代码,因此,需要先通过gcc编译生成可执行文件才能用gdb进行调试,gdb test,在gdb的启动画面中指出了gdb的版本号、使用的库文件等信息,接下来就进入了由“(gdb)”开头的命令行界面了,(1)查看文件,在gdb中键入“l”(list)就可以查看所载入的文件,(2)设置断点,在gdb中设置断点非常简单,只需在“b”后加入对应的行号即可,(3)查看断点情况,在设置完断点之后,用户可以键入“info b”来查看设置断点情况,在gdb中可以设置多个断点,(4)运行代码,gdb默认从首行开始运行代码,可键入“r”(run)即可,(5)查看变量值,在gdb中只需键入“p”变量值即可,(6)单步运行,单步运行可以使用命令“n”(next)或“s”(step),(7)恢复程序运行,可以使用命令“c”(continue)恢复程序的正常运行了,GDB调试器的使用,21,gdb基本命令,1工作环境相关命令,2设置断点与恢复命令,gdb中设置断点有多种方式:,其一是按行设置断点,另外,还可以设置函数断点和条件,断点,函数断点,gdb中按函,数设置断点只需把函数名,列在命令“b”之后,条件断点,gdb中设置,条件断点的格式为:b 行,数或函数名 if 表达式,GDB调试器的使用,22,GDB调试器的使用,gdb基本命令,gdb中源码查看相关命令,gdb中查看运行数据相关命令,gdb中修改运行参数相关命令,gdb还可以修改运行时的参数,并使该变量按照用户当前输入的值继续运行。它的设置方法为:在单步执行的过程中,键入命令“set 变量设定值”。这样,在此之后,程序就会按照该设定的值运行了。,23,工
展开阅读全文