《最新嵌入式操作系统程编环境PPT课件》由会员分享,可在线阅读,更多相关《最新嵌入式操作系统程编环境PPT课件(37页珍藏版)》请在金锄头文库上搜索。
1、嵌入式操作系统程编环境嵌入式操作系统程编环境目标v了解嵌入式操作系统v了解Linuxv独立安装Linuxv熟练操作Linux常用命令v熟练使用Linux下的编辑器v熟练使用GCC编译器v能够使用GDB调试器v了解Linux编程库Evaluation only.Created with Aspose.Slides for .NET 3.5 Client Profile 5.2.0.0.Copyright 2004-2011 Aspose Pty Ltd.2vShell命令使用说明Shell命令的一般格式命令名 【选项】【参数1】【参数2】命令行中的第一部分必须是一个命令的名字,第二部分是命令的选
2、项或参数,命令行中的每个部分必须有空格或Tab键隔开;【】内表示可选项对于选项和参数的说明【选项】是一个包括一个或多个字母的代码,它前面有一个减号(-)。【参数】提供命令运行的信息或者命令执行所使用的文件名。命令历史列表使用箭头键、F3等功能键翻查历史命令输入命令行自动补齐输入命令的任何时刻按【Tab】键,系统将试图补齐已输入的命令中断Shell命令的方法Ctrl+CShell简介及常用Shell命令Evaluation only.Created with Aspose.Slides for .NET 3.5 Client Profile 5.2.0.0.Copyright 2004-2011
3、 Aspose Pty Ltd.9v常用Shell命令对目录和文件的操作cd,pwd,mkdir,rm,cp,ln,grep,findchmod,chown用户管理adduser,userdel,su进程管理ps,kill文件的打包与压缩(gzip和bzip2两种压缩包)打包并压缩:tar cvzf test.tar.gz *.jpg或tar cvjf test.tar.bz2 *.jpg解压缩包:tar xvzf test.tar.gz或tar xvjf test.tar.bz2rmp软件包的安装源码维护基本命令diff创建补丁: diff ruN a.txt b.txt c.patchpa
4、tch打补丁: patch p1 c.patch配置、编译、安装源码包软件./configuremakemake install模块管理命令帮助命令man 命令名,如:man ls查看帮助时,按下空格键进行翻页,按下“q”键退出帮助Linux命令大全Shell简介及常用Shell命令Evaluation only.Created with Aspose.Slides for .NET 3.5 Client Profile 5.2.0.0.Copyright 2004-2011 Aspose Pty Ltd.10Linux与GNUvLinux是一套免费使用和自由传播的类UNIX操作系统 。该项目
5、由荷兰的Linus Torvalds所启动。vLinux是一个Unix兼容的系统,大部分通用的Unix工具和程序都可以在Linux系统下运行vGNU = GNU is Not Unix1984:由Richard Stallman创建 免税慈善项目2002:发展成为一个Unix操作系统的所有主要部件构成的环境,内核除外(内核由Linux项目发展而来)GNU环境包括:EMACS编辑器、GCC编译器、GDB调试器、汇编器、链接器、处理二进制文件的工具以及其它部件Richard Stallman自由软件运动的精神领袖、GNU计划以及自由软件基金会的创立者Evaluation only.Created
6、with Aspose.Slides for .NET 3.5 Client Profile 5.2.0.0.Copyright 2004-2011 Aspose Pty Ltd.11Linux编辑器Vi的使用vLinux编辑器行编辑器(ed、ex)行编辑器每次只能对单行进行操作,使用起来很不方便全屏幕编辑器(vi、emacs)全屏幕编辑器可以对整个屏幕进行编辑,用户编辑的文件直接显示在屏幕上vi是Linux系统的第一个全屏幕交互式编辑程序 Evaluation only.Created with Aspose.Slides for .NET 3.5 Client Profile 5.2.0.
7、0.Copyright 2004-2011 Aspose Pty Ltd.12vvi的模式vi有3种模式:命令行模式、插入模式、底行模式(1)命令行模式用户在用vi编辑文件时,最初进入的为一般模式。在该模式中可以通过上下移动光标进行“删除字符”或“整行删除”等操作,也可以进行“复制”、“粘贴”等操作,但无法编辑文字。(2)插入模式只有在该模式下,用户才能进行文字编辑输入,用户课按ESC键回到命令行模式。(3)底行模式在该模式下,光标位于屏幕的底行。用户可以进行文件保存或退出操作,也可以设置编辑环境,如寻找字符串、列出行号等。Linux编辑器Vi的使用Evaluation only.Create
8、d with Aspose.Slides for .NET 3.5 Client Profile 5.2.0.0.Copyright 2004-2011 Aspose Pty Ltd.13vvi的基本流程(1)进入vi,即在命令行下键入vi hello(文件名)。此时进入的是命令行模式,光标位于屏幕的上方,如图3.1所示。(2)在命令行模式下键入i进入到插入模式,如图3.2所示。可以看出,在屏幕底部显示有“插入”表示插入模式,在该模式下可以输入文字信息。 (3)最后,在插入模式中,输入“Esc”,则当前模式转入命令行模式,并在底行行中输入“:wq”(存盘退出)进入底行模式,如图3.3所示。这样
9、,就完成了一个简单的vi操作流程:命令行模式插入模式底行模式。 Linux编辑器Vi的使用Evaluation only.Created with Aspose.Slides for .NET 3.5 Client Profile 5.2.0.0.Copyright 2004-2011 Aspose Pty Ltd.14vvi的各模式功能键命令行模式常见功能键如表:插入模式的功能键只有一个, 也就是Esc退出到命令行模式。底行模式常见功能键如表所示:Linux编辑器Vi的使用Evaluation only.Created with Aspose.Slides for .NET 3.5 Clie
10、nt Profile 5.2.0.0.Copyright 2004-2011 Aspose Pty Ltd.15程序被其它程序翻译成不同的格式Evaluation only.Created with Aspose.Slides for .NET 3.5 Client Profile 5.2.0.0.Copyright 2004-2011 Aspose Pty Ltd.16GCC编译器的使用vGNU CC(简称为Gcc)是GNU项目中符合ANSI C标准的编译系统,能够编译用C、C+和Object C等语言编写的程序。gcc不仅功能强大,而且可以编译如C、C+、Object C、Java、For
11、tran、Pascal、Modula-3和Ada等多种语言,而且gcc又是一个交叉平台编译器,它能够在当前CPU平台上为多种不同体系结构的硬件平台开发软件,因此尤其适合在嵌入式领域的开发编译。v下表是gcc支持编译源文件的后缀及其解释。Evaluation only.Created with Aspose.Slides for .NET 3.5 Client Profile 5.2.0.0.Copyright 2004-2011 Aspose Pty Ltd.17vgcc编译流程分为4个步骤预处理阶段预处理器(cpp)根据以字符开头的命令,修改原始的C程序。如C程序第一行include,与处理
12、器将读需stdio.h的内容并将它插入到C程序中。结果生成一个.i为扩展名的文件。编译阶段编译器(ccl)将.i文件翻译成文本文件.s,它包含一个汇编语言程序。汇编阶段汇编器(as)将.s文件翻译成机器语言指令,把这些指令打包成一种叫做可重定位目标程序的格式,并将结果保存在目标文件.o中。它是一个二进制文件,它的字节编码是机器指令而不是字符。链接阶段链接器(ld)负责将程序中所使用的C库函数,如printf函数所在的printf.o并入到前面生成的.o程序中,最终得到一个可执行目标文件(可执行文件)。可执行文件加载到存储器后,由系统负责执行。GCC编译器的使用Evaluation only.C
13、reated with Aspose.Slides for .NET 3.5 Client Profile 5.2.0.0.Copyright 2004-2011 Aspose Pty Ltd.18vgcc编译选项分析v(1)总体选项,右表:v(2)告警和出错选项,右表:v(3)优化选项vgcc可以对代码进行优化,它通过编译选项“-On”来控制优化代码的生成,其中n是一个代表优化级别的整数。对于不同版本的gcc来讲,n的取值范围及其对应的优化效果可能并不完全相同,比较典型的范围是从0变化到2或3。v(4)体系结构相关选项GCC编译器的使用Evaluation only.Created with
14、 Aspose.Slides for .NET 3.5 Client Profile 5.2.0.0.Copyright 2004-2011 Aspose Pty Ltd.19调试是所有程序员都会面临的问题。如何提高程序员的调试效率,更好更快地定位程序中的问题从而加快程序开发的进度,是大家共同面对的。Windows下的一些调试工具,如VC自带的如设置断点、单步跟踪等,在Linux下有什么很好的调试工具呢?GDB调试器是一款GNU开发组织并发布的UNIX/Linux下的程序调试工具。虽然,它没有图形化的友好界面,但是它强大的功能也足以与微软的VC工具等媲美。GDB调试器的使用Evaluation
15、 only.Created with Aspose.Slides for .NET 3.5 Client Profile 5.2.0.0.Copyright 2004-2011 Aspose Pty Ltd.20打开Linux下的编辑器vi,编辑如下代码# vi test.c在保存退出后首先使用gcc对test.c进行编译,注意一定要加上选项“-g”,这样编译出的可执行代码中才包含调试信息,否则之后gdb无法载入该可执行文件# gcc -g test.c -o test 启动gdb进行调试。注意,gdb进行调试的是可执行文件,而不是如“.c”的源代码,因此,需要先通过gcc编译生成可执行文件才
16、能用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”(ste
17、p)(7)恢复程序运行,可以使用命令“c”(continue)恢复程序的正常运行了GDB调试器的使用Evaluation only.Created with Aspose.Slides for .NET 3.5 Client Profile 5.2.0.0.Copyright 2004-2011 Aspose Pty Ltd.21vgdb基本命令1工作环境相关命令2设置断点与恢复命令gdb中设置断点有多种方式:其一是按行设置断点,另外还可以设置函数断点和条件断点 函数断点,gdb中按函数设置断点只需把函数名列在命令“b”之后 条件断点,gdb中设置条件断点的格式为:b 行数或函数名 if 表达
18、式 GDB调试器的使用Evaluation only.Created with Aspose.Slides for .NET 3.5 Client Profile 5.2.0.0.Copyright 2004-2011 Aspose Pty Ltd.22GDB调试器的使用vgdb基本命令gdb中源码查看相关命令gdb中查看运行数据相关命令gdb中修改运行参数相关命令gdb还可以修改运行时的参数,并使该变量按照用户当前输入的值继续运行。它的设置方法为:在单步执行的过程中,键入命令“set 变量设定值”。这样,在此之后,程序就会按照该设定的值运行了。 Evaluation only.Created
19、 with Aspose.Slides for .NET 3.5 Client Profile 5.2.0.0.Copyright 2004-2011 Aspose Pty Ltd.23v工程管理器,顾名思义,是指管理较多的文件的。可以试想一下,有一个上百个文件的代码构成的项目,如果其中只有一个或少数几个文件进行了修改,按照之前所学的gcc编译工具,就不得不把这所有的文件重新编译一遍,因为编译器并不知道哪些文件是最近更新的,而只知道需要包含这些文件才能把源代码编译成可执行文件,于是,程序员就不能不再重新输入数目如此庞大的文件名以完成最后的编译工作。v希望有一个工程管理器能够自动识别更新了的文件
20、代码,同时又不需要重复输入冗长的命令行,这样,Make工程管理器也就应运而生了。v实际上,Make工程管理器也就是个“自动编译管理器”,这里的“自动”是指它能够根据文件时间戳自动发现更新过的文件而减少编译的工作量,同时,它通过读入Makefile文件的内容来执行大量的编译工作。用户只需编写一次简单的编译语句就可以了。它大大提高了实际项目的工作效率,而且几乎所有Linux下的项目编程均会涉及它 Make工程管理器Evaluation only.Created with Aspose.Slides for .NET 3.5 Client Profile 5.2.0.0.Copyright 2004
21、-2011 Aspose Pty Ltd.24Make工程管理器vMakefile基本结构Makefile是Make读入的惟一配置文件,在一个Makefile中通常包含如下内容: 需要由make工具创建的目标体(target),通常是目标文件或可执行文件; 要创建的目标体所依赖的文件(dependency_file); 创建每个目标体时需要运行的命令(command)。它的格式为:target: dependency_files command例如,有两个文件分别为hello.c和hello.h,创建的目标体为hello.o,执行的命令为gcc编译指令:gcc c hello.c,那么,对应的
22、Makefile就可以写为:#The simplest examplehello.o: hello.c hello.h gcc c hello.c o hello.o接着就可以使用make了。使用make的格式为:make target,这样make就会自动读入Makefile(也可以是首字母小写makefile)并执行对应target的command语句,并会找到相应的依赖文件。 rootlocalhost makefile# make hello.ogcc c hello.c o hello.orootlocalhost makefile# lshello.c hello.h hello.
23、o Makefile可以看到,Makefile执行了“hello.o”对应的命令语句,并生成了“hello.o”目标体。Evaluation only.Created with Aspose.Slides for .NET 3.5 Client Profile 5.2.0.0.Copyright 2004-2011 Aspose Pty Ltd.25Make工程管理器vMakefile变量Makefile中常见预定义变量Makefile中常见自动变量在Makefile中还可以使用环境变量。使用环境变量的方法相对比较简单,make在启动时会自动读取系统当前已经定义了的环境变量,并且会创建与之具有
24、相同名称和数值的变量。但是,如果用户在Makefile中定义了相同名称的变量,那么用户自定义变量将会覆盖同名的环境变量。Evaluation only.Created with Aspose.Slides for .NET 3.5 Client Profile 5.2.0.0.Copyright 2004-2011 Aspose Pty Ltd.26vMakefile规则Makefile的规则是Make进行处理的依据,它包括了目标体、依赖文件及其之间的命令语句。一般的,Makefile中的一条语句就是一个规则。在上面的例子中,都显示地指出了Makefile中的规则关系,如“$(CC) $(CF
25、LAGS) -c $ -o $”,但为了简化Makefile的编写,make还定义了隐式规则和模式规则隐含规则:隐含规则:告诉make怎样使用传统的技术完成任务,这样,当用户使用它们时就不必详细指定编译的具体细节,而只需把目标文件列出即可。Make会自动搜索隐式规则目录来确定如何生成目标文件。Make的隐式规则指出:所有“.o”文件都可自动由“.c”文件使用命令“$(CC) $(CPPFLAGS) $(CFLAGS) -c file.c o file.o”生成。 模式规则:模式规则:是用来定义相同处理规则的多个文件的。它不同于隐式规则,隐式规则仅仅能够用make默认的变量来进行操作,而模式规则
26、还能引入用户自定义变量,为多个文件建立相同的规则,从而简化Makefile的编写。模式规则的格式类似于普通规则,这个规则中的相关文件前必须用“%”标明。Make工程管理器Evaluation only.Created with Aspose.Slides for .NET 3.5 Client Profile 5.2.0.0.Copyright 2004-2011 Aspose Pty Ltd.27vMake管理器的使用使用Make管理器非常简单,只需在make命令的后面键入目标名即可建立指定的目标,如果直接运行make,则建立Makefile中的第一个目标。make的命令行选项Make工程管
27、理器Evaluation only.Created with Aspose.Slides for .NET 3.5 Client Profile 5.2.0.0.Copyright 2004-2011 Aspose Pty Ltd.28vLinux编程库介绍编程库是指可以被多个Linux软件项目重复使用的代码集Linux下的库文件分为共享库和静态库共享库是运行时动态加载,以.so结尾静态库在编译时静态加载,以.a结尾Linux的库一般在/lib或/usr/lib下常用的Linux编程库标准C库libc.soLinux多线程库libpthread.soLinux编程库Evaluation onl
28、y.Created with Aspose.Slides for .NET 3.5 Client Profile 5.2.0.0.Copyright 2004-2011 Aspose Pty Ltd.29Linux编程库vLinux系统调用系统调用是操作系统提供给用户程序调用的一组特殊接口使用系统调用的主要目的是使得用户可以使用操作系统提供的有关设备管理、输入/输出系统、文件系统和进程控制、通信以及存储管理等功能而不必了解系统程序的内部结构和有关硬件细节。Linux的运行空间划分为用户空间和内核空间目的是为了对系统作“保护”系统调用运行在内核空间Evaluation only.Created
29、with Aspose.Slides for .NET 3.5 Client Profile 5.2.0.0.Copyright 2004-2011 Aspose Pty Ltd.30Linux编程库vLinux系统调用Linux系统有200多个系统调用进程控制文件系统控制系统控制内存管理网络管理Socket控制用户管理进程间通信使用man syscalls命令查看完整列表使用man 2 intro命令查看_syscall宏的描述Linux的API主要通过C库(libc)实现Linux下可以添加新的系统调用Evaluation only.Created with Aspose.Slides f
30、or .NET 3.5 Client Profile 5.2.0.0.Copyright 2004-2011 Aspose Pty Ltd.31vLinux系统调用列表Evaluation only.Created with Aspose.Slides for .NET 3.5 Client Profile 5.2.0.0.Copyright 2004-2011 Aspose Pty Ltd.32vLinux系统调用列表Evaluation only.Created with Aspose.Slides for .NET 3.5 Client Profile 5.2.0.0.Copyright
31、 2004-2011 Aspose Pty Ltd.33vLinux系统调用列表Evaluation only.Created with Aspose.Slides for .NET 3.5 Client Profile 5.2.0.0.Copyright 2004-2011 Aspose Pty Ltd.34vLinux线程库进程是资源管理最小单位,线程是程序执行的最小单位,一个进程至少有一个线程Linux系统下的多线程遵循POSIX接口,称为pthread实现了基于核心轻量级进程的“一对一”线程模型线程之间的管理在核外函数库中实现Linux编程库Evaluation only.Created with Aspose.Slides for .NET 3.5 Client Profile 5.2.0.0.Copyright 2004-2011 Aspose Pty Ltd.35小结Evaluation only.Created with Aspose.Slides for .NET 3.5 Client Profile 5.2.0.0.Copyright 2004-2011 Aspose Pty Ltd.36