嵌入式操作系统编程环境.ppt

上传人:本田雅阁 文档编号:2134862 上传时间:2019-02-20 格式:PPT 页数:36 大小:1.37MB
返回 下载 相关 举报
嵌入式操作系统编程环境.ppt_第1页
第1页 / 共36页
嵌入式操作系统编程环境.ppt_第2页
第2页 / 共36页
嵌入式操作系统编程环境.ppt_第3页
第3页 / 共36页
亲,该文档总共36页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

《嵌入式操作系统编程环境.ppt》由会员分享,可在线阅读,更多相关《嵌入式操作系统编程环境.ppt(36页珍藏版)》请在三一文库上搜索。

1、2019年2月20日星期三,1,第二章补充,嵌入式操作系统,2,目标,了解嵌入式操作系统 了解Linux 独立安装Linux 熟练操作Linux常用命令 熟练使用Linux下的编辑器 熟练使用GCC编译器 能够使用GDB调试器 了解Linux编程库,3,嵌入式操作系统,嵌入式操作系统 实时系统 主流嵌入式操作系统 Linux的发展历史 Linux发行版本 Linux安装 Linux编程环境,4,Linus Torvalds Linux的创始人,5,Linux项目,1991年8月,芬兰研究生Linus Torvalds谨慎地发布了一个新的类Unix的操作系统内核,内容如下: 来自:torvald

2、sklaava.Helsinki.FI (Linus Benedict Torvalds) 新闻组:comp.os.minix 主题:在minix中你最想看到什么? 摘要:关于我的新操作系统的小调查 时间:1991年8月25日 20:57:08格林尼治时间 每个使用minix的朋友,你们好。 我正在做一个(免费的)用在386(486)AT上的操作系统(只是业余爱好,它不会像GNU那样庞大和专业)。这个想法从4月份起就开始酝酿,现在快要完成了。我希望得到各位对minix的任何反馈意见,因为我的操作系统在某些方面是与它相类似的(其中包括相同的文件系统的物理设计(因为某些实际的原因)。 我现在已经移

3、植了bash(1.08)和gcc(1.40),并且看上去能运行。这意味着我需要用几个月的时间使它变得更实用一些,并且我想知道大多数人想要的特性。欢迎提出任何建议,但是我无法保证都能实现。: - ) Linus (torvaldskruuna.helsinki.?) 接下来,如他们所说,这就成为了历史。Linux逐渐发展成为一个技术和文化现象。通过结合GNU项目的力量,Linux项目发展成为一个完整的、符合Posix标准的Unix操作系统的版本,包括内核和所有支撑的基础设施。从手持设备到大型计算机,Linux在范围如此广泛的计算机上得到了应用。IBM的一个工作组甚至把Linux移植到了一块腕表中

4、!,6,Linux发行版本,RedHat Fedora Core Mandrake Suse Debian CentOS Ubuntu RedFlag,7,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,8,Shell简介及常用Shell命令,Shell作为操作系统的最外层,也称为外壳 内核、Shell和用户的关系 Shell是一种Linux中的命令行解释程序,为用户提供使用操作系统的接口。用户在提示符下输入的

5、命令都由Shell先解释然后传给Linux内核。 Linux中运行Shell的环境是“系统工具”下的“终端”,可以单击“终端”以启动Shell环境。这时屏幕上显示类似“linuxwww home$”的信息,其中,linux是指系统用户,而home是指当前所在的目录。 Shell也是一种程序设计语言,用户可利用多条shell命令构成一个文件。,9,Shell命令使用说明 Shell命令的一般格式 命令名 【选项】【参数1】【参数2】 命令行中的第一部分必须是一个命令的名字,第二部分是命令的选项或参数,命令行中的每个部分必须有空格或Tab键隔开;【】内表示可选项 对于选项和参数的说明 【选项】是一

6、个包括一个或多个字母的代码,它前面有一个减号(-)。 【参数】提供命令运行的信息或者命令执行所使用的文件名。 命令历史列表 使用箭头键、F3等功能键翻查历史命令 输入命令行自动补齐 输入命令的任何时刻按【Tab】键,系统将试图补齐已输入的命令 中断Shell命令的方法Ctrl+C,Shell简介及常用Shell命令,10,常用Shell命令 对目录和文件的操作 cd,pwd,mkdir,rm,cp,ln,grep,find chmod,chown 用户管理 adduser,userdel,su 进程管理 ps,kill 文件的打包与压缩(gzip和bzip2两种压缩包) 打包并压缩:tar c

7、vzf test.tar.gz *.jpg或tar cvjf test.tar.bz2 *.jpg 解压缩包:tar xvzf test.tar.gz或tar xvjf test.tar.bz2 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简介

8、及常用Shell命令,11,Linux与GNU,Linux是一套免费使用和自由传播的类UNIX操作系统 。该项目由荷兰的Linus Torvalds所启动。 Linux是一个Unix兼容的系统,大部分通用的Unix工具和程序都可以在Linux系统下运行 GNU = GNU is Not Unix 1984:由Richard Stallman创建 免税慈善项目 2002:发展成为一个Unix操作系统的所有主要部件构成的环境,内核除外(内核由Linux项目发展而来) GNU环境包括:EMACS编辑器、GCC编译器、GDB调试器、汇编器、链接器、处理二进制文件的工具以及其它部件,Richard St

9、allman自由软件运动的精神领袖、GNU计划以及自由软件基金会的创立者,12,Linux编辑器Vi的使用,Linux编辑器 行编辑器(ed、ex) 行编辑器每次只能对单行进行操作,使用起来很不方便 全屏幕编辑器(vi、emacs) 全屏幕编辑器可以对整个屏幕进行编辑,用户编辑的文件直接显示在屏幕上 vi是Linux系统的第一个全屏幕交互式编辑程序,13,vi的模式 vi有3种模式:命令行模式、插入模式、底行模式 (1)命令行模式 用户在用vi编辑文件时,最初进入的为一般模式。在该模式中可以通过上下移动光标进行“删除字符”或“整行删除”等操作,也可以进行“复制”、“粘贴”等操作,但无法编辑文字

10、。 (2)插入模式 只有在该模式下,用户才能进行文字编辑输入,用户课按ESC键回到命令行模式。 (3)底行模式 在该模式下,光标位于屏幕的底行。用户可以进行文件保存或退出操作,也可以设置编辑环境,如寻找字符串、列出行号等。,Linux编辑器Vi的使用,14,vi的基本流程 (1)进入vi,即在命令行下键入vi hello(文件名)。此时进入的是命令行模式,光标位于屏幕的上方,如图3.1所示。 (2)在命令行模式下键入i进入到插入模式,如图3.2所示。可以看出,在屏幕底部显示有“插入”表示插入模式,在该模式下可以输入文字信息。 (3)最后,在插入模式中,输入“Esc”,则当前模式转入命令行模式,

11、并在底行行中输入“:wq”(存盘退出)进入底行模式,如图3.3所示。 这样,就完成了一个简单的vi操作流程:命令行模式插入模式底行模式。,Linux编辑器Vi的使用,15,vi的各模式功能键 命令行模式常见功能键如表: 插入模式的功能键只有一个, 也就是Esc退出到命令行模式。 底行模式常见功能键如表所示:,Linux编辑器Vi的使用,16,程序被其它程序翻译成不同的格式,17,GCC编译器的使用,GNU CC(简称为Gcc)是GNU项目中符合ANSI C标准的编译系统,能够编译用C、C+和Object C等语言编写的程序。gcc不仅功能强大,而且可以编译如C、C+、Object C、Java

12、、Fortran、Pascal、Modula-3和Ada等多种语言,而且gcc又是一个交叉平台编译器,它能够在当前CPU平台上为多种不同体系结构的硬件平台开发软件,因此尤其适合在嵌入式领域的开发编译。 下表是gcc支持编译源文件的后缀及其解释。,18,gcc编译流程分为4个步骤 预处理阶段 预处理器(cpp)根据以字符开头的命令,修改原始的C程序。如C程序第一行include,与处理器将读需stdio.h的内容并将它插入到C程序中。结果生成一个.i为扩展名的文件。 编译阶段 编译器(ccl)将.i文件翻译成文本文件.s,它包含一个汇编语言程序。 汇编阶段 汇编器(as)将.s文件翻译成机器语言

13、指令,把这些指令打包成一种叫做可重定位目标程序的格式,并将结果保存在目标文件.o中。它是一个二进制文件,它的字节编码是机器指令而不是字符。 链接阶段 链接器(ld)负责将程序中所使用的C库函数,如printf函数所在的printf.o并入到前面生成的.o程序中,最终得到一个可执行目标文件(可执行文件)。可执行文件加载到存储器后,由系统负责执行。,GCC编译器的使用,19,gcc编译选项分析 (1)总体选项,右表: (2)告警和出错选项,右表: (3)优化选项 gcc可以对代码进行优化, 它通过编译选项“-On”来控制 优化代码的生成,其中n是一 个代表优化级别的整数。对 于不同版本的gcc来讲

14、,n的取 值范围及其对应的优化效果可 能并不完全相同,比较典型的 范围是从0变化到2或3。 (4)体系结构相关选项,GCC编译器的使用,20,调试是所有程序员都会面临的问题。如何提高程序员的调试效率,更好更快地定位程序中的问题从而加快程序开发的进度,是大家共同面对的。 Windows下的一些调试工具,如VC自带的如设置断点、单步跟踪等,在Linux下有什么很好的调试工具呢? GDB调试器是一款GNU开发组织并发布的UNIX/Linux下的程序调试工具。虽然,它没有图形化的友好界面,但是它强大的功能也足以与微软的VC工具等媲美。,GDB调试器的使用,21,打开Linux下的编辑器vi,编辑如下代

15、码 # 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)设置断点 ,在gd

16、b中设置断点非常简单,只需在“b”后加入对应的行号即可 (3)查看断点情况,在设置完断点之后,用户可以键入“info b”来查看设置断点情况,在gdb中可以设置多个断点 (4)运行代码,gdb默认从首行开始运行代码,可键入“r”(run)即可 (5)查看变量值,在gdb中只需键入“p”变量值即可 (6)单步运行,单步运行可以使用命令“n”(next)或“s”(step) (7)恢复程序运行,可以使用命令“c”(continue)恢复程序的正常运行了,GDB调试器的使用,22,gdb基本命令 1工作环境相关命令 2设置断点与恢复命令 gdb中设置断点有多种方式: 其一是按行设置断点,另外 还可以

17、设置函数断点和条件 断点 函数断点,gdb中按函 数设置断点只需把函数名 列在命令“b”之后 条件断点,gdb中设置 条件断点的格式为:b 行 数或函数名 if 表达式,GDB调试器的使用,23,GDB调试器的使用,gdb基本命令 gdb中源码查看相关命令 gdb中查看运行数据相关命令 gdb中修改运行参数相关命令 gdb还可以修改运行时的参数,并使该变量按照用户当前输入的值继续运行。它的设置方法为:在单步执行的过程中,键入命令“set 变量设定值”。这样,在此之后,程序就会按照该设定的值运行了。,24,工程管理器,顾名思义,是指管理较多的文件的。可以试想一下,有一个上百个文件的代码构成的项目

18、,如果其中只有一个或少数几个文件进行了修改,按照之前所学的gcc编译工具,就不得不把这所有的文件重新编译一遍,因为编译器并不知道哪些文件是最近更新的,而只知道需要包含这些文件才能把源代码编译成可执行文件,于是,程序员就不能不再重新输入数目如此庞大的文件名以完成最后的编译工作。 希望有一个工程管理器能够自动识别更新了的文件代码,同时又不需要重复输入冗长的命令行,这样,Make工程管理器也就应运而生了。 实际上,Make工程管理器也就是个“自动编译管理器”,这里的“自动”是指它能够根据文件时间戳自动发现更新过的文件而减少编译的工作量,同时,它通过读入Makefile文件的内容来执行大量的编译工作。

19、用户只需编写一次简单的编译语句就可以了。它大大提高了实际项目的工作效率,而且几乎所有Linux下的项目编程均会涉及它,Make工程管理器,25,Make工程管理器,Makefile基本结构 Makefile是Make读入的惟一配置文件,在一个Makefile中通常包含如下内容: 需要由make工具创建的目标体(target),通常是目标文件或可执行文件; 要创建的目标体所依赖的文件(dependency_file); 创建每个目标体时需要运行的命令(command)。 它的格式为: target: dependency_files command 例如,有两个文件分别为hello.c和hell

20、o.h,创建的目标体为hello.o,执行的命令为gcc编译指令:gcc c hello.c,那么,对应的Makefile就可以写为: #The simplest example hello.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.o gcc c hello.c

21、o hello.o rootlocalhost makefile# ls hello.c hello.h hello.o Makefile 可以看到,Makefile执行了“hello.o”对应的命令语句,并生成了“hello.o”目标体。,26,Make工程管理器,Makefile变量 Makefile中常见预定义变量 Makefile中常见自动变量 在Makefile中还可以使用环境变量。使用环境变量的方法相对比较简单,make在启动时会自动读取系统当前已经定义了的环境变量,并且会创建与之具有相同名称和数值的变量。但是,如果用户在Makefile中定义了相同名称的变量,那么用户自定义变量将

22、会覆盖同名的环境变量。,27,Makefile规则 Makefile的规则是Make进行处理的依据,它包括了目标体、依赖文件及其之间的命令语句。一般的,Makefile中的一条语句就是一个规则。在上面的例子中,都显示地指出了Makefile中的规则关系,如“$(CC) $(CFLAGS) -c $ -o $”,但为了简化Makefile的编写,make还定义了隐式规则和模式规则 隐含规则:告诉make怎样使用传统的技术完成任务,这样,当用户使用它们时就不必详细指定编译的具体细节,而只需把目标文件列出即可。Make会自动搜索隐式规则目录来确定如何生成目标文件。Make的隐式规则指出:所有“.o”

23、文件都可自动由“.c”文件使用命令“$(CC) $(CPPFLAGS) $(CFLAGS) -c file.c o file.o”生成。 模式规则:是用来定义相同处理规则的多个文件的。它不同于隐式规则,隐式规则仅仅能够用make默认的变量来进行操作,而模式规则还能引入用户自定义变量,为多个文件建立相同的规则,从而简化Makefile的编写。模式规则的格式类似于普通规则,这个规则中的相关文件前必须用“%”标明。,Make工程管理器,28,Make管理器的使用 使用Make管理器非常简单,只需在make命令的后面键入目标名即可建立指定的目标,如果直接运行make,则建立Makefile中的第一个目

24、标。 make的命令行选项,Make工程管理器,29,Linux编程库介绍 编程库是指可以被多个Linux软件项目重复使用的代码集 Linux下的库文件分为共享库和静态库 共享库是运行时动态加载,以.so结尾 静态库在编译时静态加载,以.a结尾 Linux的库一般在/lib或/usr/lib下 常用的Linux编程库 标准C库libc.so Linux多线程库libpthread.so,Linux编程库,30,Linux编程库,Linux系统调用 系统调用是操作系统提供给用户程序调用的一组特殊接口 使用系统调用的主要目的是使得用户可以使用操作系统提供的有关设备管理、输入/输出系统、文件系统和进

25、程控制、通信以及存储管理等功能而不必了解系统程序的内部结构和有关硬件细节。 Linux的运行空间划分为用户空间和内核空间 目的是为了对系统作“保护” 系统调用运行在内核空间,31,Linux编程库,Linux系统调用 Linux系统有200多个系统调用 进程控制 文件系统控制 系统控制 内存管理 网络管理 Socket控制 用户管理 进程间通信 使用man syscalls命令查看完整列表 使用man 2 intro命令查看_syscall宏的描述 Linux的API主要通过C库(libc)实现 Linux下可以添加新的系统调用,32,Linux系统调用列表,33,Linux系统调用列表,34,Linux系统调用列表,35,Linux线程库 进程是资源管理最小单位,线程是程序执行的最小单位,一个进程至少有一个线程 Linux系统下的多线程遵循POSIX接口,称为pthread 实现了基于核心轻量级进程的“一对一”线程模型 线程之间的管理在核外函数库中实现,Linux编程库,36,小结,

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

当前位置:首页 > 其他


经营许可证编号:宁ICP备18001539号-1