第5章嵌入式系统的软件ppt课件.ppt
第5章 嵌入式系统的软件,5.1 嵌入式系统软件的开发方式5.2 嵌入式系统软件的结构5.3 基于嵌入式Linux的嵌入式系统的软件,5.1 嵌入式系统软件的开发方式,5.1 嵌入式系统软件的开发方式,5.1.1 嵌入式系统的软件,嵌入式系统软件通常包括:操作系统 应用软件,软硬件结合是嵌入式系统软件开发最大的特点,主要体现在两方面 处理器体系结构Windows和桌面Linux系统通常只运行在x86单一的体系结构上嵌入式系统具有ARM、x86、MIPS等多种体系结构的处理器,在这些处理器上运行的本地程序需要使用不同的编译工具进行编译,生成不同的二进制代码 软件和硬件之间的接口Windows和桌面Linux系统的驱动程序是比较标准化的,通常在驱动程序之上,还具有硬件抽象层(Hardware Abstract Layer,HAL),它可以进一步的“屏蔽”硬件之间的差异嵌入式系统具有多种多样的接口、设备等硬件(嵌入式处理器芯片内部或外接),需要软件支持,特别是需要关注软硬件的交互另外,嵌入式系统因为成本原因,处理器性能、内存容量以及外围接口和设备资源均有限,需要对软件进行裁剪、优化,5.1 嵌入式系统软件的开发方式,5.1.2 软硬件结合的方式,5.2 嵌入式系统软件的结构,5.2.1 软件的层次结构,第一章回顾嵌入式系统结构自下而上,通常可以分成四个层次:硬件(Hardware)操作系统(OS)中间件(Middle Ware)应用层程序(Application),5.2 嵌入式系统软件的结构,5.2 嵌入式系统软件的结构,嵌入式系统软件的层次结构,操作系统需要包含了核心的功能,操作系统和中间件之间的差别在同一个系统中通常可以区分。但是在不同系统中,某些功能即可以放在操作系统中实现,也可以放在中间件来实现,如文件系统、网络协议(网络管理),5.2 嵌入式系统软件的结构,中间件是比较底层的软件,通常只提供功能的接口,不实现具体的逻辑。中间件起着承上启下的作用,将操作系统的功能和应用层程序作出恰当的隔离和联系对于比较简单的功能,可以不经过中间件,直接调用操作系统的API实现,即使在同一个系统中,那些软件是中间件,那些是应用层,也不存在完全的区分,5.2 嵌入式系统软件的结构,5.2.2 嵌入式软件的分类,1、操作系统 操作系统的核心通常包括了进程(任务)调度、进程(任务)间通讯、内存管理、文件系统、设备管理等方面,5.2 嵌入式系统软件的结构,第一章回顾 嵌入式操作系统的主要功能:处理器管理:在多任务环境下,合理分配任务来共享处理器,提高处理器的利用率,同时提供任务间的通信机制内存管理:为多任务环境下的程序运行提供良好的环境,包括内存分配、内存保护、地址映射、内存扩充文件管理:对系统文件和用户文件进行管理,包括存储空间的管理、目录管理、文件的读写管理以及文件的共享与保护设备管理:根据用户提出的设备请求,为用户分配I/O设备,提高CPU和I/O设备的利用率,5.2 嵌入式系统软件的结构,2、文件系统(File System,FS)文件系统可以提供一致的“文件”功能,有利于统一各不同具体文件系统之间的差异,简化系统的开发过程。在嵌入式Linux中,文件系统属于操作系统的一部分,而设备管理需要文件系统的支持3、协议栈(Protocol)TCP/IP网络协议是目前最常使用的协议栈,除此之外,还有蓝牙协议、红外协议等各个层次的协议栈 在嵌入式Linux中,网络协议(网络管理)有的认为属于操作系统的一部分,有的认为不属于,本书按“属于”论述4、GUI(图形用户界面)系统 GUI系统可以提供给上层(比如应用层)一个接口,让上层的程序实现各种具体的图形界面,5.3 基于嵌入式Linux的嵌入式系统的软件,5.3 基于嵌入式Linux的嵌入式系统的软件,5.3.1 嵌入式Linux操作系统、中间件、应用层程序的关系,5.3 基于嵌入式Linux的嵌入式系统的软件,在基于嵌入式Linux的嵌入式系统中,软件系统通常包含了操作系统,中间件,应用层程序等几个层次,设备管理,嵌入式Linux操作系统如何支持中间件/应用层?嵌入式Linux操作系统提供系统调用(一些基础的功能)来完成和中间件/应用层的交互:系统调用Linux操作系统(位于内核空间)和中间件/应用层(位于用户空间)之间的基础接口是系统调用(System Call)Linux的系统调用按照功能逻辑大致可分为:进程控制、进程间通信存储管理文件系统设备管理网络管理等,5.3 基于嵌入式Linux的嵌入式系统的软件,5.3 基于嵌入式Linux的嵌入式系统的软件,系统调用在许多操作系统(包括嵌入式Linux)中,为了更好地保护操作系统内核,将程序的运行空间分为内核空间和用户空间(内核态和用户态),它们分别运行在不同的级别上,逻辑上是相互隔离的用户程序(中间件/应用层)在通常情况下不允许访问内核数据,也无法使用内核函数,它们只能在用户空间访问用户数据,调用用户空间的函数。而系统调用接口正是操作系统向用户程序提供支持的接口,通过这些接口,用户程序向操作系统请求服务,控制转向操作系统,而操作系统在完成服务后,将控制和结果返回给用户程序,数据,函数,数据,函数,5.3 基于嵌入式Linux的嵌入式系统的软件,用户编程接口API实际上,呈现给中间件/应用层调用的是并不是系统调用(进程控制、进程间通信、存储管理、文件系统、设备管理、网络管理等),而是用户编程接口API(Application Programming Interface)API对系统调用进行了适当的封装,符合POSIX接口标准,5.3 基于嵌入式Linux的嵌入式系统的软件,文件系统文件系统作为Linux操作系统的一部分,向用户程序(中间件/应用层)提供一个操作文件的统一接口,包括:新建、打开、读写等标准的文件I/O操作支持多种类型的文件系统,其中比较常用的包括EXT2、EXT3、FAT、NTFS、Cramfs、JFFS、ROMFS、NFS 等支持不同类型的存储介质,中间件/应用层,Linux OS,5.3 基于嵌入式Linux的嵌入式系统的软件,open:打开文件准备I/O 操作。release/close:关闭由open()函数打开的文件read:从文件读数据write:往文件写数据lseek:移动文件指针的位置ioctl:执行读、写之外的操作,主要是一些自定义的命令fcntl:文件/记录上锁等select:处理文件复用mmap:主要用于设备文件,文件系统API(操作文件的统一接口),设备管理设备管理Linux操作系统的一部分由于I/O设备(比如:第四章的外围接口和设备)千差万别,这就给操作系统对I/O设备管理造成了不少的难度和麻烦。为此,在Linux中引入了“设备文件”这个概念。即:Linux系统把每个设备映射为一种特殊的文件,Linux对各类设备的输入、输出看起来就好像对普通文件的输入输出一样使用设备文件好处:Linux为文件和设备提供了一致的用户接口,对用户而言,设备文件与普通文件并无区别,可以象操作文件一样打开和关闭设备文件、读写数据等在Linux系统中,硬件设备(包括字符设备和块设备)使用文件来表示,这些文件在/dev/目录中,5.3 基于嵌入式Linux的嵌入式系统的软件,5.3 基于嵌入式Linux的嵌入式系统的软件,Linux 将所有的设备看作文件,通过文件系统对设备进行访问。这样可以很好的做到“设备无关性”Linux对设备的管理划分成四个层次:用户程序(中间件/应用层)文件系统层设备驱动层硬件层,位于Linux OS,5.3 基于嵌入式Linux的嵌入式系统的软件,设备管理API(操作设备文件的统一接口),open:打开设备准备I/O 操作。release/close:关闭由open()函数打开的设备read:从设备上读数据write:往设备上写数据lseek:移动文件指针的位置,仅用于随机存取的设备ioctl:执行读、写之外的操作,主要是一些自定义的命令,如对设备的参数设置等fcntl:设备文件上锁等select:处理设备复用mmap:内存映射(因为设备内存位于内核空间),网络管理,5.3 基于嵌入式Linux的嵌入式系统的软件,TCP/IP网络分层模型网络接口层(MAC层):负责管理硬件(网络硬件设备驱动)网络层(IP层):负责处理主机之间(点到点)的通信,每个主机在网络层有一个网内唯一的IP地址传输层:负责处理应用程序(端到端)之间的通信,如TCP/UDP应用层:通过调用网络层/传输层提供的API函数(主要是传输层提供的应用程序之间通信服务API)来进行网络通信,一般通过套接字Socket(一整套的API及使用流程)的方式,网络层,5.3 基于嵌入式Linux的嵌入式系统的软件,socket是进程之间通信机制,通过它不同机器上的进程之间能够通过网络进行通信,也能实现本地机器上的进程之间的通信 一个完整的socket需要用一个相关描述(包括协议(TCP/IP)、本地地址、本地端口、远程地址、远程端口)来表示。,5.3 基于嵌入式Linux的嵌入式系统的软件,网络管理API(包括使用流程),TCP通信流程,UDP通信流程,5.3 基于嵌入式Linux的嵌入式系统的软件,对于中间件/应用层(位于用户空间),C语言库提供了程序运行的基本函数操作和标准库函数,C语言库除了API以外还有一些其他的函数,这些函数中许多也需要调用API来实现C函数库包括两类:静态库(归档文件)和动态库(动态链接库/共享库),C语言库,静态库在编译时就被链接到可执行程序中动态库在程序运行时被加载(动态链接),动态库可以经过若干个层次的“链接”可执行程序使用动态库的另外一种方式是动态打开,这种动态库不需要被链接在目标系统中,只有可执行程序和动态库,静态库在使用的时候会被连接到可执行程序和动态库之内,5.3 基于嵌入式Linux的嵌入式系统的软件,C函数库文件名由前缀lib和库名以及后缀组成静态库的后缀名为.a,如 libm.a动态库的后缀名为.so 加版本号,如 libm.so.6,应用层的应用程序不仅可以是可执行程序,也可以是若干个层次的动态库中间件不仅可以是动态库,也可以是可执行程序,C语言库,5.3.2 嵌入式Linux中的中间件,5.3 基于嵌入式Linux的嵌入式系统的软件,1、用户终端在嵌入式Linux系统的中,用户终端(shell)是操作系统之外的最基本软件,它提供一个可以进行人机交互的界面,通过这个界面我们可以输入并执行Linux中常用的命令在Linux中,用户终端通常需要建立在一个系统的标准终端中,这个终端通常是一个Linux中的tty设备。用户终端使用这个设备作为的输入输出的基础,并提供一个基本的界面,一些比较好的终端可以实现历史纪录、自动完成命令等功能。用户终端所支持的各种命令(比如mv,ls,cp,ifconfig等)通过调用Linux系统调用(API)来实现。例如:完成mkdir命令,可以通过mkdir API函数完成,5.3 基于嵌入式Linux的嵌入式系统的软件,Linux的用户终端工具,5.3 基于嵌入式Linux的嵌入式系统的软件,嵌入式Linux中常用的用户终端BusyBox它是一个多功能应用软件,小巧但功能繁多,特别适合于嵌入式系统使用Busybox是一组小程序,可以提供一些在命令行使用的工具,实现shell人机交互界面的功能,为任何一个嵌入式系统提供了相当完整的环境Busybox被称为嵌入式系统中的“瑞士军刀”,5.3 基于嵌入式Linux的嵌入式系统的软件,2、GUI(图形用户界面)系统给用户提供友好的界面,可以将用户从枯燥的命令行界面中解脱随着嵌入式系统的发展和普及,GUI在嵌入式系统中作用越来越突出GUI系统层次GUI系统移植层:属于中间件GUI系统核心:属于中间件GUI应用程序:属于应用层,5.3 基于嵌入式Linux的嵌入式系统的软件,图形层:,控件层:,GUI系统核心包括图形层:提供基本的绘制功能,比如画点、线、圆等几何图形的绘制控件(Widget)层:提供各种控件,如文本框、菜单、对话框等应用层控件层的实现需要调用图形层应用层程序需要调用控件层来实现其功能,当然也可以直接调用图形层,5.3 基于嵌入式Linux的嵌入式系统的软件,在移植方面,GUI系统通常需要考虑图形输出设备和用户输入设备两方面情况图形输出设备:在Linux操作系统中通常使用帧缓冲(framebuffer)设备用户输入设备:具有多样性,包括了触摸屏、按键、鼠标、键盘等类型。事件(Event)驱动是比较标准的GUI输入编程框架。为了屏蔽图形输出设备和用户输入设备硬件之间的差异,GUI系统移植层需要考虑驱动程序的差异,5.3 基于嵌入式Linux的嵌入式系统的软件,5.3 基于嵌入式Linux的嵌入式系统的软件,帧缓冲(framebuffer)设备,图4.9 LCD控制器的内部结构图,LCD驱动器,LCD屏,DAM从位于系统内存的帧缓冲区(显示缓存)中读取视频数据,帧缓冲区(显示缓存),第四章回顾 LCD接口(LCD控制器),5.3 基于嵌入式Linux的嵌入式系统的软件,帧缓冲(framebuffer)设备,帧缓冲(FrameBuffer)设备代表了与LCD控制器相关的帧缓冲区(显示缓存),Linux将这个帧缓冲区(显示缓存)看成是一个内存设备中间件/应用层程序通过帧缓冲设备文件的用户访问接口,访问与LCD控制器相关的帧缓冲区(显示缓存),直接对显存进行读/写等操作对于中间件/应用层程序来说,帧缓冲设备是一块显示缓冲区,向这个显示缓冲区中写入的特定格式的数据就意味着更新LCD显示屏的输出。显示缓冲区与显示屏上的点存在着映射关系,显示屏上的每个点都与显示缓冲区某个特定位置相关联,5.3 基于嵌入式Linux的嵌入式系统的软件,事件(Event)驱动,GUI 输入编程框架:窗口和事件驱动键盘、鼠标、触摸动作产生事件,这些事件发生之后,GUI系统将事件转换为消息,发送到具有焦点的窗口,由该窗口相关联的消息处理函数来处理,常见的嵌入式GUI系统Qt/Embedded等:Qt的嵌入式系统版本,可移植性好MiniGUI:原是由魏永明主持和开发的一个自由软件项目,现由北京飞漫软件技术有限公司维护并开展后续开发。支持Linux、uClinux、VxWorks、eCos、uC/OS-II、pSOS、ThreadX 等操作系统MicroWindows:开放源码的嵌入式GUI软件,可移植性好,图形功能出色OpenGUI:自由软件,汇编实现内核,运行速度非常快,可在MS-DOS,QNX和Linux下运行,5.3 基于嵌入式Linux的嵌入式系统的软件,3、嵌入式数据库数据库用来组织系统内部的资料信息,在各种计算机系统中数据库都有广泛的应用数据库=数据+对数据的管理数据库中对数据的管理,常用到结构化查询语言SQL(Structured Query Language)。美国国家标准局(ANSI)与国际标准化组织(ISO)已经制定了 SQL 标准。SQL一种数据库查询和程序设计语言,用于数据的存取、查询、更新和管理关联式数据库系统,5.3 基于嵌入式Linux的嵌入式系统的软件,5.3 基于嵌入式Linux的嵌入式系统的软件,嵌入式数据库与非嵌入式数据库的差别,在于运行模式的差别。嵌入式数据库是指运行在嵌入式系统本机上、不用启动服务端的轻型数据库,它与应用程序紧密集成,被应用程序所启动,并伴随应用程序的退出而终止,非嵌入式数据库,嵌入式数据库,非嵌入式数据库基于客户机-服务器(C/S)模式,嵌入式系统只要支持网络,完全可以运行运行,4、其他中间件在基于嵌入式Linux的嵌入式系统中,有可能实现和桌面电脑类似的功能,因此其涉及到各种各样的中间件。通过移植和使用桌面电脑中间件,可以加快开发流程,迅速获得和桌面电脑类似的功能。Linux中常用的中间件还包括:与网络相关的组件、图形图像文件处理库、文件压缩-解压缩工具、字体工具、浏览器引擎等。中间件的使用一般都涉及到移植的问题。移植问题上比较特殊的是涉及到一些硬件操作的问题,5.3 基于嵌入式Linux的嵌入式系统的软件,