2.2 嵌入式系统的软件基础

Post on 02-Jan-2016

88 views 10 download

description

2.2 嵌入式系统的软件基础. 2.2.1 软件系统概述 软件 (software) 是计算机系统中与硬件 (hardware) 相互依存的另一部分,它包括程序 (program) 、相关数据 (data) 及其说明文档 (document) 。 其中: 程序 是按照事先设计的功能和性能要求执行的指令序列; 数据 是程序能正常操纵信息的数据结构; 文档 是与程序开发维护和使用有关的各种图文资料。. 软件系统概述. 软件没有明显的制造过程。 一旦研制开发成功,就可以大量拷贝同一内容的副本。所以对软件的质量控制,必须着重在软件开发方面下工夫。. - PowerPoint PPT Presentation

Transcript of 2.2 嵌入式系统的软件基础

1

2.2 嵌入式系统的软件基础

2.2.1 软件系统概述软件 (software) 是计算机系统中与硬件

(hardware) 相互依存的另一部分,它包括程序 (program) 、相关数据 (data) 及其说明文档 (document) 。 其中:

程序是按照事先设计的功能和性能要求执行的指令序列;

数据是程序能正常操纵信息的数据结构;文档是与程序开发维护和使用有关的各种图文资料。

软件系统概述软件是一种逻辑实体,具有抽象性。

这个特点使它与其它工程对象有着明显的差异。人们可以把它记录在纸上、内存、和磁盘、光盘上,但却无法看到软件本身的形态,必须通过观察、分析、思考、判断,才能了解它的功能、性能等特性。

软件产品的特性

软件产品的特性

• 软件没有明显的制造过程。 一旦研制开发成功,就可以大量拷贝同一内容的副本。所以对软件的质量控制,必须着重在软件开发方面下工夫。

软件在使用过程中,没有磨损、老化的问题。 软件在生存周期后期不会因为磨损而老化,但会为了适应硬件、环境以及需求的变化而进行修改,而这些修改有不可避免的引入错误,导致软件失效率升高,从而使的软件退化。当修改的成本变得难以接受时,软件就被抛弃。

• 软件对硬件和环境有着不同程度的依赖性。这导致了软件移植的问题。

• 软件的开发至今尚未完全摆脱手工作坊式的开发方式,生产效率低。

软件是复杂的,而且以后会更加复杂。 软件是人类有史以来生产的复杂度最高的工业产品。软件涉及人类社会的各行各业、方方面面,软件开发常常涉及其它领域的专门知识,这对软件工程师提出了很高的要求。

• 软件的成本相当昂贵。 软件开发需要投入大量、高强度的脑力劳动,成本非常高,风险也大。现在软件的开销已大大超过了硬件的开销。

软件工作牵涉到很多社会因素。许多软件的开发和运行涉及机构、体制和管理方式等问题,还会涉及到人们的观念和心理。这些人的因素,常常成为软件开发的困难所在,直接影响到项目的成败。

3

软件系统概述

嵌入式系统软件也是嵌入式系统的核心之一,它由嵌入式操作系统及相应的各种应用软件构成。面向嵌入式系统的操作软件有以下特点:

编码体积小,在嵌入式系统的有效存储空间运行;面向应用,可裁减和移置;实时性强,有时也称为实时多任务操作系统 RTOS;可靠性高,无需人工干预独立运行,并处理不同时间的故障。

4

1 、嵌入式软件系统的分类

嵌入式软件

系统软件

支撑软件

应用软件

控制、管理计算机系统的资源

嵌入式操作系统嵌入式中间件( CORBA 、 Java )等等

辅助软件开发的工具

系统分析设计工具仿真开发工具交叉开发工具测试工具配置管理工具维护工具等

面向应用领域 手机软件、路由器软件交换机软件、飞控软件视频图像、语音、网络等

5

嵌入式软件系统的分类

从运行平台来分,嵌入式软件可以分为运行在开发平台上的软件:设计、开发、测试工具等。

运行在嵌入式系统上的软件:嵌入式操作系统、应用程序、驱动程序及部分开发工具。

2 、嵌入式软件系统的体系结构

硬件硬件

应用层 应用层

驱动层驱动层

操作系统层操作系统层

中间件层中间件层

板级初始化板级初始化

FLASH驱动

FLASH驱动

RTC/定时器驱动RTC/定时器驱动

串口 驱动串口 驱动

以太网驱动

以太网驱动

LCD 驱动LCD 驱动

键盘驱动键盘驱动

其他驱动其他驱动

内核内核TCP/IP

网络系统TCP/IP

网络系统文件系统文件系统

嵌入式GUI

嵌入式GUI

电源管理电源管理

嵌入式 CORBA

嵌入式 CORBA

嵌入式 JAVA

嵌入式 JAVA

嵌入式DCOM嵌入式DCOM

面向应用领域的中间件

面向应用领域的中间件

应用任务 1

应用任务 1

应用任务 2

应用任务 2

………… 应用任务 n

应用任务 n

7

嵌入式系统软件设计的层次结构

嵌入式系统软件结构一般包含 4个层面:设备驱动层、操作系统 OS、中间层、应用程序层。也有些书籍将应用程序接口 API 归属于 OS 层。由于硬件电路的可裁减性和嵌入式系统本身的特点,其软件部分也是可裁减的。

8

( 1)驱动层

驱动层程序是嵌入式系统中不可缺少的重要部分,使用任何外部设备都需要有相应驱动层程序的支持,它为上层软件提供了设备的接口。上层软件不用理会设备的具体内部操作,只需调用驱动层程序提供的接口即可。驱动层程序一般包括硬件抽象层 HAL(提高系统的可移植性)、板极支持包 BSP(提供访问硬件设备寄存器的函数包)和设备驱动程序。

9

驱动层板级初始化程序

这些程序在嵌入式系统上电后初始化系统的硬件环境,包括嵌入式微处理器、存储器、中断控制器、 DMA、定时器等的初始化。

与系统软件相关的驱动这类驱动是操作系统和中间件等系统软件所需的驱动程序,它们的开发要按照系统软件的要求进行。

10

目前操作系统内核所需的硬件支持一般都已集成在嵌入式微处理器中了,因此操作系统厂商提供的内核驱动一般不用修改。

与应用软件相关的驱动 与应用软件相关的驱动不一定需要与操作系统连接,这些驱动的设计和开发由应用决定。

11

( 2 )操作系统 OS 层在设计一个简单的应用程序时,可以不使用操作系统。仅有应用程序和设备驱动程序。

比如一个指纹识别系统只是完成简单的指纹录入和指纹识别,它在指纹识别的过程中需要高速的算法,所以需要 32位处理器。但是它的任务并不复杂,也不牵连什么复杂的协议和管理,对于这样的系统就没有安装操作系统的必要。如果一定要安装操作系统,反而会带来新的系统开销,降低系统的性能。因为运行和存储操作系统需要大量的 RAM和 ROM,启动操作系统需要时间。

12

在设计较复杂的程序时,可能就需要一个操作系统( OS)来管理和控制内存、多任务、周边资源等。依据系统所提供的程序界面来编写应用程序,可大大减少应用程序员的负担。现代高性能嵌入式系统的应用越来越广泛,操作系统的使用成为必然发展趋势。

一般如果系统具有以下特点,系统运行较多任务,任务调度、内存分配复杂;系统需要大量协议支持,如网络协议、文件系统等;系统需要很好的图形用户接口 GUI。那么建议使用操作系统。

13

操作系统的功能简单来说就是隐藏硬件细节,而只提供给应用程序开发人员一个个抽象的接口。用户只需要和这些抽象的接口打交道,而不用在意这些抽象的接口和函数是如何与物理资源相联系的,也不用去管那些功能是如何通过操作系统调用具体的硬件资源来完成的。这样,如果以后硬件体系发生变化,只要在新的硬件体系下还运行着同样的操作系统,那么原来的程序还能一丝不错的完成原有的功能。

14

操作系统 OS 层构成

操作系统层包括嵌入式内核、嵌入式 TCP/IP 网络系统、嵌入式文件系统、嵌入式 GUI系统和电源管理等部分。

其中嵌入式内核是基础和必备的部分,其他部分要根据嵌入式系统的需要来确定。

15

对于使用操作系统的嵌入式系统而言,操作系统一般以内核映像的形式下载到目标系统中。以 μCLinux为例子,在系统开发完成之后,将整个系统部分做成内核映像文件,与文件系统一起传送到目标系统中。然后通过 BootLoader 指定地址运行 μCLinux内核,启动已经下载好的嵌入式 Linux系统;再通过操作系统解开文件系统,运行应用程序。

16

整个嵌入式系统与通用操作系统类似,功能比不带有操作系统的嵌入式系统强大了很多。

内核中通常必需的基本部件是进程管理、进程间通信、内存管理部分,其他部件如文件系统、驱动程序、网络协议等都可根据用户要求进行配置,并以相关的方式实现。

系统中最重要的资源是中央处理单元( CPU ),一般由很多正在执行的程序所共用。操作系统负责确定可在 CPU上执行的程序及其执行时间的长短,此功能称为进程调度,调度的方法由操作系统所定的优先策略决定。另一个很重要的资源是存储器,包括存储空间,这些也由在 CPU上执行的应用程序共享。

除了为高级应用程序管理提供环境以外,操作系统还提供各种硬件中断服务所需的软件,以及驱动系统中存在的外设驱动程序。总之,操作系统将底层硬件细节抽象化,并通过系统调用提供应用程序与硬件之间的接口。

18

一般而言,开机后操作系统会初始化所有外设,如存储器控制器、计时器和输入 / 输出设备,并安装硬件中断服务子程序,以便处理这些设备所产生的各种信号;然后安装软件中断(由软件所产生的中断),以便处理下面将介绍的系统调用(高级应用程序为请求操作系统服务所产生的调用)。

系统调用是应用程序请求操作系统服务的一种机制,很像高级程序语言中的程序或函数调用,当程序需要操作系统服务时,会产生一个预定义的软件中断,由操作系统提供服务。请求服务所需的参数一般由应用程序通过 CPU的寄存器传递给操作系统。

19

操作系统的应用程序接口 API

API ( Application Programming Interface,应用程序编程接口)是一系列复杂的函数、消息和结构的集合体。嵌入式操作系统下的 API和一般操作系统下的 API在功能、含义及知识体系上完全一致。可这样理解 API:在计算机系统中有很多可通过硬件或外部设备去执行的功能,这些功能的执行可通过计算机操作系统或硬件预留的标准指令调用。

20

操作系统的应用程序接口 API API的出现,使软件人员在编制应用程序时,就不需要为各种通过硬件或外设执行的功能而重新编制程序,只需按系统或某些硬件事先提供的 API 函数调用即可完成功能的执行。因此在操作系统中提供标准的 API 函数,可加快用户应用程序的开发,统一应用程序的开发标准,也为操作系统版本的升级带来了方便。在 API 函数中,提供了大量的常用模块,可大大简化用户应用程序的编写。

21

( 3)中间层(驱动层软件) 使用任何外设都需要有驱动程序的支持,驱动程序不仅要实现设备的基本功能函数,如初始化、中断响应、发送、接收等,而且还要提供完备的错误处理函数。中间层为上层软件提供了设备的操作接口。上层程序只需调用驱动程序提供的接口,而不用理会设备具体的内部操作。

驱动层软件(中间层)将系统软件与底层硬件部分进行了隔离,使得系统的底层设备驱动程序与硬件无关。具体包括硬件抽象层 HAL和板级支持包 BSP。

22

( 3 )中间件层

目前在一些复杂的嵌入式系统中也开始采用中间件技术,主要包括嵌入式 CORBA、嵌入式 Java 、嵌入式 DCOM和面向应用领域的中间件软件。

如基于嵌入式 CORBA的应用于软件无线电台的应用中间件 SCA ( Software Core Architecture)等。

23

( 4)应用程序 应用层

应用层软件主要由多个相对独立的应用任务组成

每个应用任务完成特定的工作,如 I/O 任务、计算的任务、通信任务等,由操作系统调度各个任务的运行。

在一般简易的嵌入式系统中常采用汇编语言来编程。较复杂的系统中,汇编语言很难胜任。高级语言就有通用性强、编程方便、易于移植及可维护等优点,常用的高级语言有 C/C++等。

24

应用程序 实际的嵌入式系统应用软件建立在系统的主任务( Main Task)基础之上。用户应用程序主要通过调用系统的 API 函数对系统进行操作,完成用户应用功能开发。在用户的应用程序中,也可创建用户自己的任务。任务之间的协调主要依赖于系统的消息队列。

操作系统是为应用程序提供基础服务的软件。而应用程序是在 CPU上执行的一个或多个程序,在执行过程中会使用输入数据并产生输出数据。应用程序的管理包括程序载入和执行,程序对系统资源的共享和分配,并避免分配到的资源被其他程序破坏。

25

应用程序 应用程序的设计流程是,先用编辑程序编写源代码,源代码可以由多个文件组成,以实现模块化;然后用编译程序或汇编个文件;接着使用链接程序将这些二进制文件组合为可执行文件。

这些工作归结起来,可看作是实现阶段。然后,通过调试程序提供的命令运行得到的可执行文件,以测试所设计的程序。有时可利用解析程序找出程序中存在的性能瓶颈。在此验证阶段,如果找到错误或性能瓶颈,可以返回到实现阶段进行改进,并重复次流程。

3 、嵌入式软件运行流程上电复位

系统升级引导 /升级系统

系统初始化

应用初始化

多任务应用

板级初始化远程升级

本地升级

•基于多任务操作系统的嵌入式软件的主要运行流程•该运行流程主要分为 5个阶段

27

嵌入式软件运行流程 上电复位、板级初始化阶段嵌入式系统上电复位后完成板级初始化工作。板级初始化程序具有完全的硬件特性,一般采用汇编语言实现。不同的嵌入式系统,板级初始化时要完成的工作具有一定的特殊性,但以下工作一般是必须完成的:

CPU中堆栈指针寄存器的初始化。BSS段( Block Storage Space表示未被初始化的数据)的初始化。

CPU芯片级的初始化:中断控制器、内存等。

28

嵌入式软件运行流程系统引导 / 升级阶段

根据需要分别进入系统软件引导阶段或系统升级阶段。

软件可通过测试通信端口数据或判断特定开关的方式分别进入不同阶段。

29

嵌入式软件运行流程系统引导阶段

系统引导有几种情况:将系统软件从 NOR Flash 中读取出来加载到 RAM中运行:这种方式可以解决成本及 Flash速度比 RAM慢的问题。软件可压缩存储在 Flash 中。

不需将软件引导到 RAM中而是让其直接在 NorFlash 上运行,进入系统初始化阶段。

将软件从外存(如 NandFlash 、 CF 卡、 MMC等)中读取出来加载到 RAM中运行:这种方式的成本更低。

30

嵌入式软件运行流程

系统升级阶段进入系统升级阶段后系统可通过网络进行远程升级或通过串口进行本地升级。

远程升级一般支持 TFTP、 FTP、 HTTP等方式。

本地升级可通过 Console口使用超级终端或特定的升级软件进行。

31

嵌入式软件运行流程

系统初始化阶段 在该阶段进行操作系统等系统软件各功能部分必需的初始化工作,如根据系统配置初始化数据空间、初始化系统所需的接口和外设等。

系统初始化阶段需要按特定顺序进行,如首先完成内核的初始化,然后完成网络、文件系统等的初始化,最后完成中间件等的初始化工作。

32

嵌入式软件运行流程

应用初始化阶段在该阶段进行应用任务的创建,信号量、消息队列的创建和与应用相关的其它初始化工作。

多任务应用运行阶段各种初始化工作完成后,系统进入多任务状态,操作系统按照已确定的算法进行任务的调度,各应用任务分别完成特定的功能。

33

5 、集成开发环境( IDE) 进行嵌入式系统开发时,选择合适的开发工具可以加快进度、降低开发成本。因此,含有编辑软件、编译软件、汇编软件、链接软件、调试软件、工程管理以及函数库的集成开发环境 IDE是必不可少的。

嵌入式软件开发的实现是在台式计算机上使用的交叉编译程序( cross compiler)、交叉汇编程序( cross assembler)等可以完成这些工作。然后通过 JTAG、串口或网络接口定位下载到目标机上进行交叉编译和交叉调试。真正的差异存在于嵌入式系统的验证阶段(即测试最后的可执行文件)。下面将介绍一下常用的几种开发工具。

( 1 )常用的几种开发工具。 汇编程序( assembler) 将汇编语言指令翻译成二进制机器指令,除了将操作码、操作数转换为相应的二进制编码外,汇编程序还将符号标签转换为实际地址。

编译程序( complier) 将结构化程序翻译成机器(或汇编)程序。

结构化程序语言具有可以大大简化编程工作的高级结构(如循环结构),因此每个高级结构都可以转变成几条或数十条机器语言指令。编译程序技术应用了许多程序最优化技术,可以生成很大且性能很高的代码。交叉编译程序可以在开发处理器上运行,进而生成在目标处理器上执行的代码。

35

ARM 的 C 编译器的选择

常见的 ARM 的 C 编译器主要有,SDT 2.5(ARM Software Development

Toolkit)ADS 1.1/1.2(ARM Developer Suite)RealView Developer Suitearm-elf-gcc 、 arm-linux-gcc

36

( 2 )链接程序( linker)

可以将分开汇编或编译的文件合并为一个程序。在此过程中,将所有机器指令组合成单个程序,并插入标准函数库中的指令。专为嵌入式处理器所设计的链接程序还可以删除未被调用程序和函数相关的二进制代码,删除分配给未使用变量的存储器,以降低整个程序存储空间的大小。

37

6 、测试和调试阶段 测试和调试阶段是整体设计流程的主要部分,尤其是开发将在嵌入式系统执行的程序。编程很容易出错,在编写大型程序时存在错误和缺陷是难免的。验证程序正确性的最常用方法是运行程序,在运行过程中应使用大量输入数据,以检查系统的行为,尤其是检查边界情况。如果开发的是将在台式计算机上运行的程序,则程序的验证相对容易一些。对于嵌入式系统程序员而言,这项任务更具挑战性,因为在嵌入式系统上运行的程序大都是实时的。

38

( 1)调试程序( debugger)

调试程序( debugger)帮助程序员评估并更正程序。调试程序在宿主机处理器上执行,并支持单步执行。另外还允许程序执行到使用者所定义的断点。程序执行停止后,使用者可检查各存储器地址和寄存器中的值。

由于当今很多程序都相当复杂而且很难一次编写正确,因此具有良好的调试能力是极为重要的。由于调试程序在宿主机处理器上执行,但所执行的代码确是为目标处理器而设计的,因此可以模仿或模拟目标处理器的功能。这些调试程序也称为指令集仿真程序或虚拟机( VM,Virtual Machine)。

39

( 2)测试 测试将在嵌入式系统中执行的程序有 3种方式:利用指令集仿真程序调试;利用硬件仿真器仿真;以及将程序直接下载到目标处理器做现场测试。

这些方法的差别如下:使用在开发计算机上执行的调试程序,其设计周期很快,但较不精确,因为它与系统中其他部分以及环境的交互有限;

使用硬件仿真器时的调试时间要长一些,这是因为程序代码必须下载到仿真器的硬件中后才可以进行仿真调试。但硬件仿真器可以与系统的其他部分实时交互,其测试更精确;

40

利用 JTAG下载器将程序下载到目标处理器的设计周期是三种方法中最长的。这是因为每次调试时必须将经编译和连接后的目标代码程序下载到应用系统中后,启动系统进行实际观察,如发现错误后,再返回到宿主机上重新编辑修改和编译下载后,再人工观察有无错误,这样需经多次反复后,直到无误后才可认为调试结束。但此种方式的优点是让系统和环境可以自由交互,能提供最高的执行精确度。一般具有一定调试经验的工程师常采用此方法。

41

2.2.2 嵌入式实时操作系统简介 操作系统可以简单分为通用操作系统和实时操作系统两类。我们平时在 PC机上使用的 Windows 、Dos 、 Linux等操作系统都属于通用操作系统。这类操作系统的任务类型多种多样,它们一般比较强调系统的运行效率。

实时操作系统就是“在给定的时间内提供某种程度的服务,如果在规定的时间内没有得到结果,那整个的系统就是失败”。对于实时操作系统其首要任务是调度一切可利用的资源完成实时控制任务,其次才着眼提高计算机系统的使用效率。

42

实时多任务操作系统( RTOS)是嵌入式系统应用最多的系统软件。 RTOS 是一段嵌入在目标代码中的程序,系统复位后首先执行,相当于用户的主程序,其他程序都建立在 RTOS之上。同时 RTOS还是一个标准的内核,将 CPU 时间、中断、 I/O 、定时器等资源都包含起来,留给用户一个标准的 API ,并根据各个任务的优先级,合理的在不同任务之间分配 CPU 时间。

43

RTOS 是针对不同处理器优化设计的高效实时多任务内核,可以面对几十个系列的嵌入式处理器提供类似的 API 接口。基于 RTOS 的 C语言工具具有极大的可移植性(只需修改 10%左右的内容)。在RTOS 基础上可以编写出各种硬件驱动程序、专家库函数、行业库函数、产品库函数,和通用性的应用程序一起可以作为可以作为产品销售。

RTOS最关键的部分是实时多任务内核,它的基本功能包括任务管理、定时器管理、存储器管理、资源管理、事件管理、系统管理、消息管理、队列管理、旗语管理等,这些管理功能是通过内核服务函数形式交给用户调用的,也就是 RTOS 的 API 。

45

实时操作系统的特点实时操作系统的特点 ( 1)多任务 一个任务也称作一个线程,是一个简单的运行程序。每个任务都是整个应用的某一部分,每个任务被赋予一定的优先级,有它自己的一套 CPU 寄存器和自己的栈空间

多任务运行的实现,实际上是靠 CPU (中央处理单元)在许多任务之间转换、调度。 CPU 只有一个,轮番服务于一系列任务中的某一个。多任务运行使 CPU的利用率得到最大的发挥,并使应用程序模块化。在实际应用中,多任务的最大特点是,开发人员可以将很复杂的应用程序层次化。

( 2)任务的事件驱动 通用操作系统只注重平均性能,所有任务的平均响应时间是关键,并不关心单个任务的响应时间。而嵌入式实时系统是指在一个确定的时间内,实现系统功能并做出及时响应的系统。

任务

实时任务

非实时任务

事件驱动

时间驱动

内部事件:运算结果、设备请求等

外部事件:开关量输入等

绝对时间驱动

相对时间驱动

CPU中断控制器 1

中断控制器 2

外部事件

( 3)中断与中断优先级 系统实现中断可以带来 CPU和外设间的同步工作、实现实时处理和故障处理。

48

①异常中断的优先级

在嵌入式微处理器中通过给各异常中断赋予一定的优先级来实现这种处理顺序。优先级如下:

复位(最高优先级); 数据异常中止; FIQ; IRQ ; 预取指令异常中止; SWI (软件中断)、 未定义指令(包括缺协处理器)。这两者是互斥的指令编码,因此不可能同时发生。

复位是优先级最高的异常中断,这是因为复位从确定的状态启动微处理器,使得所有其他未解决的异常都没有关系了。

49

②微处理器的异常中断响应过程 当发生异常时,除了复位异常立即中止当前指令外,处理器尽量完成当前指令,然后脱离当前的指令处理序列去处理异常。

ARM 处理器对异常中断的响应过程如下: 首先,将当前程序状态寄存器 CPSR的内容保存到将要执行的异常中断对应的备用程序状态寄存器 SPSR中,以实现对处理器当前状态、中断屏蔽位及各条件标志位的保存。各异常中断模式都有自己相应的物理 SPSR 寄存器。

其次设置 CPSR中的相应位设置 CPSR模式控制位 CPSR[4: 0],使处理器进入相应的执行模式;设置中断标志位( CPSR[7]=1) , 禁止 IRQ中断;

当进入 Reset或 FIQ 模式时,还要设置中断标志位( CPSR[6]=1) , 禁止 FIQ中断。

然后,将引起异常指令的下一条指令的地址保存到新的异常工作模式的 R14 即 R14_mode 中,使异常处理程序执行完后能正确返回原程序。

最后,给程序计数器强制赋值,使程序在对应的矢量地址开始执行中断处理程序。一般矢量地址处将包含一条指向相应程序的转移指令,从而可跳转到相应的异常中断处理程序处执行异常中断处理程序。

51

③从异常中断处理程序中返回 从异常中断处理程序中返回时,需要执行以下4个基本操作:

被修改过的用户寄存器必须从处理程序的保护堆栈中恢复(即出栈,恢复现场)。

将 SPSR_mode寄存器内容复制到 CPSR中,使得 CPSR从相应的 SPSR中恢复,恢复被中断的程序工作状态。

根据异常类型将程序计数器 PC变回到用户指令流中相应的指令处(恢复断点)。

最后清除 CPSR ( 7或 6位)中的中断禁止标志位 I/F。

52

( 4)同步与异步 与系列时间相关事件称为同步事件,驱动的任务为同步任务。随机发生的事件称为异步事件,驱动的任务为异步任务,如中断等。

( 5)资源与临界资源 程序进行时可使用的软硬件环境称为资源, 2个以上任务可同时访问的共享资源称为临界资源。

任何任务所占用的实体都可称为资源。资源可以是输入输出设备,例如打印机、键盘、显示器,资源也可以是一个变量、一个结构或一个数组等。

53

容错:当系统软、硬件发生故障时,系统仍能正常运转,完成预定的任务或某些重要的不允许间断的任务。包括系统自诊断、自恢复、自动切换等功能。

安全性:是指系统对自身文件和用户文件的存取合法性的控制。如口令、加密。

( 6)容错与安全

54

2 )嵌入式操作系统体系结构

体系结构是操作系统的基础,它定义了硬件与软件的界限、内核与操作系统其它组件(文件、网络、GUI等)的组织关系、系统与应用的接口。

体系结构是确保系统的性能、可靠性、灵活性、可移植性、可扩展性的关键,就好比房子的梁架,只有梁架搭牢固了才提得上房子的质量,再做一些锦上添花的工作才有意义。

目前操作系统的体系结构可分为:单块结构、层次结构和客户 /服务器(微内核)结构。

嵌入式操作系统体系结构

硬件

基本进程管理

虚存管理

I/O和设备管理

进程间通信

文件系统

用户用户模式

内核模式

层次结构

56

嵌入式操作系统体系结构

硬 件

进程服务用户态

核心态

应用程序客户 内存服务

微内核

文件服务 网络服务

显示服务

发送

应答

客户 /服务器结构(微内核结构)

嵌入式操作系统体系结构微内核结构的优点

提供一致的接口可扩展性:扩展对新的软件 /硬件支持灵活性:可伸缩可移植性分布式系统支持适用于面向对象操作系统环境

性能问题:通过微内核构造和发送信息、接受应答并解码所花费的时间比进行一次系统调用的时间多

很大程度取决于微内核的大小和功能

58

嵌入式操作系统体系结构目前嵌入式操作系统主要采用分层和模块化相结合的结构或微内核结构。分层和模块化结合的结构将操作系统分为硬件无关层、硬件抽象层和硬件相关层,每层再划分功能模块。

这样移植工作便集中在硬件相关层,与其余两层无关,功能的伸缩则集中在模块上,从而确保其具有良好的可移植性和可伸缩性。

而采用微内核结构,则可利用其可伸缩的特点适应硬件的发展,便于扩展。

嵌入式操作系统体系结构应用程序应用程序

任务管理任务管理

硬 件硬 件

用户扩展处理用户扩展处理

调度管理调度管理

硬件抽象层硬件抽象层

应用编程接口应用编程接口

内存管理内存管理 中断管理中断管理

时钟 / 定时器管理时钟 / 定时器管理

I/O 管理I/O 管理

出错处理出错处理

同步、通信管理(消息队列,信号量,事件,异步信号 ))

同步、通信管理(消息队列,信号量,事件,异步信号 ))

DeltaCORE的体系结构:层次+模块结构

分层次

模块化

60

嵌入式操作系统体系结构

用户模式用户模式

应用应用

应用应用

应用应用

网络管理器网络管理器

图形管理器图形管理器

设备管理器设备管理器

文件系统管理器文件系统管理器

网络驱动网络驱动

图形驱动图形驱动

设备驱动设备驱动

文件系统驱动文件系统驱动

硬件硬件

内核模式 内核(微内核)内核模式 内核(微内核)

QNX4.25的体系结构:客户 /服务器结构

嵌入式操作系统

嵌入式内核

嵌入式TCP/IP

网络系统

嵌入式文件系统

( 1 )嵌入式操作系统的组成

…………

62

嵌入式系统软件 - 操作系统( EOS )

Embedded Operating System (EOS) 应用在嵌入式系统上的操作系统

主要功能 负责嵌入式系统的全部软、硬件资源的分配、调度,将 C

PU 时钟、 I/O 、中断等资源封装起来给用户提供一个标准的 API 接口,供用户调用。

组成 应用程序接口、设备驱动程序接口、设备驱动、操作系

统内核等组成。

63

EOS 的发展

嵌入式软件

单线程程序

事件驱动程序

循环轮询系统

有限状态机

多任务系统

中断驱动系统

分布式系统

单机多任务系统

( 2 )嵌入式内核内核是嵌入式操作系统的基础,也是必备的部分。内核还提供特定的应用编程接口,但目前没有统一的标准。

任务管理

任务管理

内存管理

内存管理

通信同步与互斥机制

通信同步与互斥机制

中断管理

中断管理

时间管理

时间管理

任务扩展

任务扩展

…………

…………

65

多任务系统中,内核负责管理各个任务,或者说为每个任务分配 CPU时间,并且负责任务之间的通信。

内核提供的基本服务是任务切换。内核本身也增加了应用程序的额外负荷,代码空间增加了 ROM的用量,内核本身的数据结构增加了 RAM的用量。内核本身对 CPU的占用时间一般在 2到 5个百分点左右。

系统内核

66

嵌入式内核任务管理

内核的核心部分,具有任务调度、创建任务、删除任务、挂起任务、解挂任务、设置任务优先级等功能。

通用计算机的操作系统追求的是最大的吞吐率,为了达到最佳整体性能,其调度原则是公平,采用 Round-Robin或可变优先级调度算法,调度时机主要以时间片为主驱动。

而嵌入式操作系统多采用基于静态优先级的可抢占的调度,任务优先级是在运行前通过某种策略静态分配好的,一旦有优先级更高的任务就绪就马上进行调度。

67

嵌入式内核

内存管理嵌入式操作系统的内存管理比较简单。通常不采用虚拟存储管理,而采用静态内存分配和动态内存分配(固定大小内存分配和可变大小内存分配)相结合的管理方式。

有些内核利用 MMU机制提供内存保护功能。通用操作系统广泛使用了虚拟内存的技术,为用户提供一个功能强大的虚存管理机制。

返回返回

68

嵌入式内核

通信、同步和互斥机制这些机制提供任务间、任务与中断处理程序间的通信、同步和互斥功能。

一般包括信号量、消息、事件、管道、异步信号和共享内存等功能。

与通用操作系统不同的是,嵌入式操作系统需要解决在这些机制的使用中出现的优先级反转问题。

返回返回

69

嵌入式内核

中断管理,一般具有以下功能:安装中断服务程序中断发生时,对中断现场进行保存,并且转到相应的服务程序上执行

中断退出前,对中断现场进行恢复中断栈切换中断退出时的任务调度

返回返回

70

嵌入式内核

时间管理提供高精度、应用可设置的系统时钟,该时钟是嵌入式系统的时基,可设置为十毫秒以下。

提供日历时间,负责与时间相关的任务管理工作如任务对资源有限等待的计时、时间片轮转调度等,提供软定时器的管理功能等。

通用操作系统的系统时钟的精度由操作系统确定,应用不可调,且一般是几十个毫秒。

返回返回

71

嵌入式内核

任务扩展功能任务扩展功能就是在内核中设置一些 Hook的调用点,在这些调用点上内核调用应用设置的、应用自己编写的扩展处理程序,以扩展内核的有关功能。

Hook调用点有任务创建、任务切换、任务删除、出错处理等。

返回返回

嵌入式 TCP/IP

• TCP/IP 协议已经广泛地应用于嵌入式系统中

• 嵌入式 TCP/IP 网络系统提供符合 TCP/IP 协议标准的协议栈,提供 Socket编程接口。

Socket 接 口Socket 接 口

UDP 协议 UDP 协议 TCP 协议 TCP 协议

IP 协议 IP 协议 ICMP/IGMP 协议 ICMP/IGMP 协议

网络接口层 网络接口层

ARP/PPP 协议 ARP/PPP 协议

以太网驱动 以太网驱动 异步串口驱动 异步串口驱动

物 理 设 备物 理 设 备

应用程序 /应用协议应用程序 /应用协议

73

嵌入式 TCP/IP

嵌入式 TCP/IP 网络系统具有以下的特点:可剪裁: 能根据嵌入式系统的功能的要求选择所需的协议,对完整的 TCP/IP 协议簇进行剪裁,以满足用户的需要。

采用“零拷贝”( Zero Copy)技术,提高实时性

所谓“零拷贝”技术,是指 TCP/IP 协议栈没有用于各层间数据传递的缓冲区,协议栈各层间传递的都是数据指针,只有当数据最终要被驱动程序发送出去或是被应用程序取走时,才进行真正的数据搬移。

74

嵌入式 TCP/IP

采用静态分配技术 在网络初始化时就静态分配通信缓冲区,设置了专门的发送和接收缓冲(其大小一般小于或等于物理网络上的 MTU值),从而确保了每次发送或接收时处理的数据不会超过 MTU值,也就避免了数据处理任务的阻塞等待。

75

嵌入式文件系统

通用操作系统文件系统通常具有以下功能:提供用户对文件操作的命令提供用户共享文件的机制管理文件的存储介质提供文件的存取控制机制,保障文件及文件系统的安全性

提供文件及文件系统的备份和恢复功能提供对文件的加密和解密功能

76

嵌入式文件系统

嵌入式文件系统相比之下较为简单,主要具有文件的存储、检索、更新等功能,一般不提供保护和加密等安全机制。

它以系统调用和命令方式提供对文件的各种操作,主要有:设置和修改对文件和目录的存取权限 提供建立、修改、改变、删除目录等服务提供创建、打开、读、写、关闭、撤消文件等服务

77

实时系统是面向具体应用,对外来事件在限定时间内能做出反应的系统。限定时间的范围很广可以从微秒级(如信号处理)到分钟级(如联机查询系统)。

在实时系统中主要有三个指标来衡量系统的实时性,即响应时间( Response Time)、生存时间( Survival Time)、吞吐量( Throughput)。

3 )实时系统的评价指标

78

响应时间( Response Time):是计算机识别一个外部事件到作出响应的时间,在控制应用中它是最重要的指标,如果事件不能及时的处理,系统可能就会崩溃。

生存时间( Survival Time):是数据有效等待时间,在这段时间里数据是有效的。

吞吐量( Throughput):是在一给定时间内(秒),系统可以处理的事件总数。例如通讯控制器用每秒钟处理的字符数来表示吞吐量,吞吐量是平均响应时间的倒数。

79

这是操作系统的主要职责之一,它决定该轮到哪个任务运行了。

往往调度是基于任务的优先级,根据其重要不同被赋予任务不同的优先级。 CPU 总是让处在就绪态的优先级最高的任务先运行。

何时让高优先级任务掌握 CPU的使用权,有两种不同的情况,这要看用的是什么类型的内核,是非占先式的还是占先式的内核。

(2)任务调度( dispatcher)

80

(3)任务优先级 (priority)

首先介绍一下任务优先级的种类,每个任务都有其优先级( priority),静态优先级和动态优先级。

应用程序执行过程中,如果各任务优先级不变,则称之为静态优先级。在静态优先级系统中,各任务以及它们的时间约束在程序编译时是已知的。

应用程序执行过程中,如果任务的优先级是可变的,则称之为动态优先级。

81

(4 )非占先式调度法与占先式调度法

①非占先式( non-preemptive)式调度法非占先式也称作合作型多任务( coopera

tive multitasking),各个任务彼此合作共享一个 CPU。中断服务可以使一个高优先级的任务由挂起状态变为就绪状态。但中断服务以后控制权还是回到原来被中断了的那个任务,直到该任务主动放弃 CPU的使用权时,那个高优先级的任务才能获得 CPU的使用权。

非占先式内核的一个特点是几乎不需要使用信号量保护共享数据。正在运行着的任务占有 CPU,而不必担心被别的任务抢占。非占先式内核的最大缺陷在于其响应高优先级的任务慢,中断优先级高的任务虽然已经进入中断就绪状态,但还不能立即运行,也许还需要等很长时间,直到当前正在运行的任务释放 CPU。内核的任务及响应时间是不确定的,不知道什么时候最高优先级的任务才能拿到 CPU的控制权,完全取决于当前被中断的任务什么时候释放 CPU。

低优先级任务

ISR

高优先级任务

( 1 ) ( 2 )

( 3 )

( 4 )

( 5 )

( 6 )

( 7 )

中断服务程序使高优先级任务就绪

低优先级任务释放CPU 使用权

TIME

非占先式 (Non-Preemptive)图

84

②占先式(抢先式) preemptive)

当系统响应时间很重要时,要使用占先式内核。最高优先级的任务一旦就绪,总能得到 CPU的控制权。即当一个运行着的任务使一个比它优先级高的任务进入了就绪态,当前任务的 CPU使用权就被剥夺了,或者说被挂起了,那个高优先级的任务立刻得到了CPU的控制权。

使用占先式内核时,应用程序应使用可重入型函数,这样在被多个任务同时调用,而不必担心会破坏数据。

也就是说,可重入型函数在任何时候都可以被中断执行,过一段时间以后又可以继续运行,而不会在函数中断的时候被其他的任务重新调用,影响函数中的数据。即可重入型函数使用的是局部变量,在通常的 C 编译器中把局部变量分配在栈中。所以,多次调用同一个函数可以保证每次的变量互不受到影响。

如果调入不可重入型函数时,低优先级的任务 CPU的使用权被高优先级任务剥夺,不可重入型函数中的数据有可能被破坏。比如,不可重入型函数中使用的是全局变量,这样全局变量可能会被更改。

86

低优先级任务

ISR 高优先级任务

( 1 ) ( 2 )

( 3 )

( 4 )( 5 )

( 6 )

中断服务程序使高优先级任务就绪

高优先级任务得到CPU 使用权

TIME

占先式 (Preemptive) 图

占先式内核的中断处理

低优先级任务

高优先级任务

时间中断处理

高优先级任务就绪

是否

88

2.2.3 常用的嵌入式操作系统概述

简单的嵌入式系统可以不使用操作系统,被称为裸机设计,如 8位单片机。复杂的系统常常使用嵌入式操作系统,这样的系统一般可以扩展程序存储器,资源相对较多,系统实现的功能比较复杂,软件开发的工作量和开发难度比较大,维护费用较高。使用嵌入式操作系统可以有效的提高这些系统的开发效率。

89

1 、操作系统功能的概述 现在的操作系统十分复杂,它管理着计算机系统中各种不同的软硬件资源。一般来说,操作系统主要功能有进程管理(处理机管理)、存储器管理、设备管理和文件管理。进程管理的主要功能是完成 CPU资源的调度和分配,以某种预定的策略运行系统中的任务。存储器管理是操作系统的一个重要职责,主要完成计算机内存资源的管理和分配任务。设备管理负责管理各种计算机外设,主要有设备驱动程序完成。文件管理负责管理磁盘上的各种文件和目录。

1 )进程管理程序、进程与线程的定义程序是由程序员编写的、存储在外存上的一组计算机指令。程序是一个静态的概念。

进程是一个描述程序执行时动态特征的概念,即执行中的程序就叫进程。进程是动态的。一个进程的生命周期就是程序从程序开始运行到结束的过程。程序的每次执行都要形成一个新的进程,因此机器会存在多个不同进程的情况。

线程是进程中的一个实体,一个进程可以有多个线程。线程的引入是为了减少进程切换的开销。

进程控制 :创建进程、分配资源和撤销进程、释放其所占用的各类资源以及控制进程的状态转换。

进程管理的功能进程调度:其任务就是按照调度策略和分配处理机,提高 CPU的利用率。进程调度由调度程序负责,调度程序根据调度算法从可运行的进程中选择一个进程来执行。

进程同步:由于进程是并发运行的,多个进程序共享一个 CPU、内存和 I/O设备。其任务是对各进程的运行进行协调,协调方式有进程互斥(指进程在访问只允许一个进程独立访问的资源时应互斥进行)和进程同步(采用同步机制对完成共同任务的进程的执行次序加以协调)两种方式。

进程通信:实现相互合作进程间的信息交换。主要是用管道、信号量、消息队列、共享内存和 Socket套接字等方式进行。

92

2 )存储器管理其任务是对主存储器资源的管理,提高存储器的利用率,为程序的并发运行提供一个良好的环境,以便用户使用。

完成的功能:存储器分配和回收;内存共享与保护;地址映像;地址变换;存储扩充。

其中地址映像是把主存相应地址的内容定位存放到 Cache 中某个地址中。

地址变换是指把程序地址空间中的逻辑地址转换为机器内部主存空间对应的物理地址。

93

3 )设备管理 主要任务是:管理 I/O设备,以提高 CPU和 I/O设备的利用率;处理用户程序的 I/O设备申请,并完成其请求的 I/O操作;

简化 I/O设备的使用并提高 I/O设备的速度。 具体完成时需具有缓冲管理、设备分配、设备处理和虚拟设备功能。

虚拟设备功能是为使多个用户能共享独占设备(每次只允许一个进程是用的设备),系统通过某种技术是该设备在逻辑上能被多个用户共享,以提高设备利用率及加速程序的执行过程。

94

4 )文件管理 文件是信息和数据在外部存储设备的保存方式。文件管理既是对文件的组织和管理。文件管理应具有以下功能:

文件存储空间的管理:由文件系统对文件的存储空间进行统一管理,对文件存储空间进行分配和回收。

目录管理:系统为每个文件建立了一个文件目录项,它包含文件名、文件属性、文件所在的物理位置等信息。每个目录项就是一个文件的索引,目录管理通过目录项实现文件的有效组织和文件按名存取。

95

文件读、写管理:系统在对文件进行读操作时,根据永固制定的目标地址、传送字节数,把文件信息从外存读入缓冲区后,再复制到指定的区域。文件的写操作是根据用户指定的源地址、传送字节数,把信息从指定的区域写到外部设备上。

文件保护:为防止文件被偷窃和破坏,文件系统必须提供文件保护功能,以防止未经核准的用户存取文件,冒名顶替存取文件或者异步正当的方式使用文件。

96

随着集成电路规模的不断提高,涌现出大量价格低廉、结构小巧、功能强大的微处理器,这样给嵌入式系统提供了丰富的硬件平台。目前限制嵌入式系统发展的瓶颈突出的表现在软件方面。从 20世纪 80年代开始,出现了一些嵌入式操作系统。这些操作系统经过不断的发展,已经逐渐成熟,在各个领域得到了广泛的应用。比较常用的操作系统有 uC/OS-II 、 Linux、 Windows CE和 VxWorks 等。

97

2 、嵌入式操作系统的演变

在嵌入式系统的发展过程中,从操作系统的角度来看,大致经历了以下几个阶段:无操作系统阶段简单操作系统阶段实时操作系统阶段面向 Internet 的阶段

104

3、 uC/OS-II操作系统简介

uC/OS-II ( MicroControler Operating System )是美国人 Jean J.Labrosse 开发的实时操作系统内核。这个内核的产生与 Linux 优点相似,他花了一年多的时间开发了这个最初名为 uC/OS的实时操作系统,并且将介绍文章在 1992年的《 Embedded System Programming》杂志上发表,其源代码公布在该杂志的网站上, 1993年出书。这本书的热销以及源代码的公开推动了 uC/OS-II 本身的发展。 uC/OS-II 目前已经被移植到 Intel、 Philips 、Motorola 等公司不同的处理器上了。

105

µC/OS-II 简介µC/OS-II是一个抢占式实时多任务内核。它是用 ANSI的 C 语言编写的,包含一小部分汇编语言代码,使之可以提供给不同架构的微处理器使用。

至今,从 8位到 64 位, µC/OS-II 已经在 40多种不同架构的微处理器上使用。

使用 µC/OS的领域包括:照相机行业、航空业、医疗器械、网络设备、自动提款机以及工业机器人等。

106

嵌入式实时操作系统 µC/OS-II 简介

µC/OS-II全部以源代码的方式提供,大约有 5500行。

CPU相关的部分使用的是针对 Intel80x86微处理器的代码。

µC/OS-II可以很容易地移植到不同架构的嵌入式微处理器上。

107

1 ) uC/OS-II内核的基本功能包括 作为一个实时操作系统, uC/OS-II的进程调度是按抢占式、多任务系统设计的,即它总是执行处于就绪队列中优先级最高的任务。 uC/OS-II 将进程的状态分为 5个:就绪状态( Ready)、运行( Running)、等待( Waiting)、休眠( Dormant)和中断 ISR。

uC/OS-II内核的基本功能包括:任务管理、定时器管理、事件管理、系统管理、消息管理、信号量管理等,这些管理功能都是通过应用接口函数 API由用户调用的。

108

uC/OS-II不支持时间片轮转调度法,所以赋予每个任务的优先级必须是不同。优先级号越低,任务的优先级越高。它的基本代码尺寸不到 5KB,对存储器容量要求低,满足了嵌入式系统对体积苛刻。 uC/OS-II 由完整的 TCP/IP 协议栈、 GUI和文件管理系统,可以随内核一起移动。

109

2 )嵌入式实时操作系统 µC/OS-II 简介µC/OS-II的特点:

源代码可移植可固化可裁减可抢占性支持多任务

可确定性任务栈系统服务中断管理稳定性和可靠性

110

嵌入式 uC/OS-II的特点

公开源代码,全部核心代码只有 8.3KB。它只包含了进程调度、时钟管理、内存管理和进程间的通信与同步等基本功能,没有包括 I/O 管理、文件系统、网络等额外模块。

可移植性、可固化、可裁减。在 uC/OS-II操作系统中涉及到系统移植的源代码文件只有 3个,只要编写 4个汇编语言的函数、 6个 C 函数、定义 3个宏和 1个常量,代码长度不过二三百行,移植起来并不困难。

111

占先式 uC/OS-II 总是运行就需条件下优先级最高的任务。

多任务 uC/OS-II可以管理 64个任务,其中 8个系统占用。

可确定性 uC/OS-II的函数调用与服务的执行时间具有其可确定性。

另外还有任务栈、系统服务、中断管理和稳定性和可靠性。

uC/OS-II的源代码绝大部分是用 C 语言编写的,经过编译就能在 PC机上运行。仅有与 CPU密切相关的一部分是用汇编语言写成的。

源代码文件介绍 对函数和环境的定义: PC.C 与处理器类型无关部分:

OS_CORE.C OS_FLAG.C OS_MBOX.C OS_MEM.C OS_MUTEX.C OS_Q.C OS_SEM.C OS_TASK.C OS_TIME.C µCOS-II.C µCOS-II.H

与处理器类型相关部分: OS_CPU_A.S OS_CPU_C.C OS_CPU.H

给整个内核库提供总体的 include 文件: INCLUDES.H

配置文件,定义使用 µC/OS-II 中的哪些功能: OS_CFG.H

113

uCOS-II 的不足之处

只有多任务调度的简单内核内存管理过于简单,几乎没有动态内存管理功能

文件系统和图形界面需要外挂对于设备驱动程序没有专门统一的接口

114

对 uCOS-II 进行必要的扩展要想实现一个相对完整、实用的嵌入式操

作系统,还需要相当多的扩展性的工作。以在 UP-NETARM3000平台所开展的工作为例:

建立了 FAT兼容的文件系统——可用 U盘方式交互

外设及驱动程序的实现基于 Unicode 的汉字库基本绘图函数的实现其它实用 API 函数

总体扩展框图

LCD USB 键盘海量存储器

硬件

LCD240. h

USB. h

Keyboard16. h

Fl ash. h

时钟日历

Rtc. h

驱动程序drv. h

uCOS- I I基于RTOS的 内核

消息队列

信号量 邮箱

API函数

绘图函数Di spl ay. h

文件管理函数Fi l e. h

文件读写函数OSFi l e. h

后台缓冲区

任务调度模块

双向链表函数Li st. h

动态内存管理

系统消息队列

OSMessage. h

LCD刷新

键盘扫描

1用户任务

主任务 2用户任务

n用户任务

系统任务

信号量

系统消息

用户应用程序

系统控件函数Control . h

任务之间的通讯用户界面

116

注意: µC/OS-II

117

4、 Linux操作系统简介 嵌入式系统越来越追求数字化、网络化和智能化。因此原来在某些设备或领域中占主导地位的软件系统越来越难以为继,整个系统必须是开放的、提供标准的 API,并且能够方便地与众多第三方的软硬件沟通。

Linux在嵌入式领域异军突起,不过是近两年的事情。过去的一年中有 13%的用户已经开始使用嵌入式 Linux系统进行开发工作;有 52%的用户决定在未来 24个月内开始使用 Linux作为嵌入式操作系统的开发原型。

118

随着 Linux的迅速发展,嵌入式 Linux 现在已经有了许多版本,包括强实时的嵌入式 Linux ( RT-Linux和 KURT-Linux )和一般的嵌入式 Linux (如 uClinux和 Porket Linux等)。其中, RT-Linux通过把通常的 Linux任务优先级设为最低,而所有的实时任务的优先级都高于它,以达到既兼容通常的 Linux 任务,又保证强实时性能的目的。

119

( 1)嵌入式 uCLinux 另一种常用的嵌入式 Linux是 uClinux,它是指对 Linux 经过小型化裁剪后,能够固化在容量只有几百 K字节或几兆字节的存储器芯片中,即针对没有 MMU的处理器而设计的。它不能使用处理器的虚拟内存管理技术,对内存的访问是直接的,所有程序中的地址都是实际的物理地址。它专为嵌入式系统作了许多小型化的工作。嵌入式 Linux(Embedded Linux) 应用于特定嵌入式场合。嵌入式Linux的开发和研究是目前操作系统领域的一个热点。

120

( 2) Linux的特点 自由免费软件 Linux的出现对目前商用嵌入式操作系统带来了冲击。它可移植到多个不同结构的 CPU和硬件平台上,具有一定的稳定性、各种性能的升级能力,而且开发更加容易。由于嵌入式系统越来越追求数字化、网络化和智能化,因此要求整个系统必须是开放的、提供标准的 API,并能够方便的与第三方的软硬件沟通。

开放源代码,不存在黑箱技术。内核小、功能强大、运行稳定、效率高。

121

特点开放源代码的操作系统易于定制裁减,在价格上极具竞争力。

不仅支持 X86CPU,还可支持其他数十种 CPU芯片。有大量的且不断增加的开发工具和开发环境。沿用了 Unix的发展方式,遵循国际标准,可方便的获得众多第三方软硬件厂商的支持。

Linux内核的结构在网络方面是非常完整的,提供了对十兆、百兆、千兆以太网、无线网络、令牌网、光纤网、卫星等多种联网方式的全面支持。此外在图像处理、文件管理及多任务支持诸多方面也都非常出色。

122

国外应用 Linux的产品有 PDA、照相机、机顶盒、手机、书写板等。国内的中科红旗软件、蓝点、网虎科技等公司也推出了一些相应的产品。

一个可用的 Linux系统包括内核和应用程序两个部分。应用程序包括系统的部分初始化、基本的人机界面和必要的命令等内容。内核为应用程序提供了一个虚拟的硬件平台,以统一的方式对资源进行访问,并且透明的支持多任务。

Linux内核可分为 6部分:进程调度、内存管理、文件管理、进程间通信、网络和驱动程序。

123

3 、嵌入式中的 LinuxLinux 的版本

ucLinuxRTLinux嵌入式 linux

ARM-Linux 2.6.0

124

1 ) Linux 开发工具

vim 或 vi

文本编辑器gcc

编译,生成可执行代码gdb

调试,通过串口可进行交叉编译Makefile (或 makefile )

用于形成 make, make clean 等命令,实现自动编译、清除等操作。

125

2 )内核的裁减

配置内核三种方式make config

最老的配置方式,以文本行的形式逐行回答 yes 或者 no

make menuconfig以文本窗口的形式进行配置,具有较好的人机界面。

make xconfig 与 make menuconfig 相同,当都只能在 X window下运行

126

裁剪内核界面

127

3 )驱动的编写及过程

Linux 系统的设备分为字符设备 (char device) ,块设备 (block device) 和网络设备 (network device)三种。字符设备是指存取时没有缓存的设备。块设备的读写都有缓存来支持,并且块设备必须能够随机存取 (random access) ,字符设备则没有这个要求。典型的字符设备包括鼠标,键盘,串行口等。块设备主要包括硬盘软盘设备, CD-ROM 等。一个文件系统要安装进入操作系统必须在块设备上。

网络设备在 Linux 里做专门的处理。 Linux 的网络系统主要是基于 BSD unix 的 socket 机制。在系统和驱动程序之间定义有专门的数据结构 (sk_buff) 进行数据的传递。系统里支持对发送数据和接收数据的缓存,提供流量控制机制,提供对多协议的支持。

128

4 )应用程序的开发

图形界面miniguiqt

多线程网络

129

5、 Windows CE操作系统简介 1)概述 Windows CE是 Microsoft公司为开发各类信息

设备而开发出来的一个嵌入式软实时操作系统。 Windows CE是一个非常小巧精致的操作系统。

这个操作系统的核心全部是由 C语言开发的,操作系统本身还包含许多由各个厂家用 C 语言和汇编语言开发的驱动程序。 Windows CE的内核提供内存管理、抢先多任务和中断处理功能。内核的上面是图形用户界面 GUI和桌面应用程序。

在 GUI内部运行着所有的应用程序,而且多个应用程序可以同时运行。 Windows CE没有 DOS模式。

Windows CE可以看作是 Windows 98/NT的微缩版,专门为体积小、资源要求低、便携的机器而设计。但它们之间还存在着一些明显的差别, Windows CE不得不放弃某些复杂的特性。

Windows CE是针对有限资源的平台而设计的多线程、完整优先权、多任务的操作系统,但它不是一个强实时操作系统,高度模块化是它的重要特性,它适合作为可裁减的 32位嵌入式操作系统。 WinCE既适用于工业设备的嵌入式控制模块,也适用于消费类电子产品,如电话、机顶盒和掌上电脑等。针对不同的目标设备硬件环境,可以在内核基础上添加各种模块,从而形成一个定制的嵌入式操作系统。

131

Windows CE的核允许每个进程有 256个优先级,采用抢占式优先权调度法。 Windows CE内核至少约为 200KB的 ROM。

对于应用程序开发者来说, Windows CE提供了Windows 程序员熟悉的各种开发环境,例如, Microsoft Win32 API (应用程序接口)、 ActiveX控件、消息队列、 COM接口、 ATL和 MFC。它们不仅有助于提高开发者的开发效率,而且有利于从其他 Wicrosoft平台上移植各种成功的应用程序。 Windows CE通过 ActiveSync 实现嵌入式设备与台式计算机之间的通信。

132

2) Win CE与 Windows 操作系统的区别

⑴Windows CE不能运行现有的应用程序 这意味着所有建立在 Windows CE上的实

时应用软件都必须为 Windows CE重新编译连接。因此,这违背了 Windows向下兼容的原则。

⑵Windows CE有严格的内存限制。 虽然目前桌面或 PC的内存容量惊人地快速增长,为 Windows 的运行提供了充分的内存空间,但在 Windows CE下情况却不同。 Windows CE的内存限制主要别现在以下三个方面。

133

①减少物理内存数量:大多数 Windows CE设备只能装入相对较小的物理内存。例如掌上型 PC设备通常只有 4MB 或 8MB内存。②Windows CE设备的用户可以控制分配程序和存储使用的内存。③Windows CE程序能够处理低内存状态。尤其是无论操作系统何时需要内存,它们都尽量释放一些正在使用的内存,这与使用 Windows 98/NT不同。由上述可知,在编写 Windows CE程序时,程序员应该对内存多加注意。

134

⑶ Windows CE有精简的运行库和 API Windows CE和 Windows 98/NT 平台的一个很大区别是前者缩减了 C/C++运行库( RTL )和 API。许多常见的 ANSI 函数已被 Windows API 函数代替或被完全删除。也就是说,现有的 Windows 程序可能一开始不能被 Windows CE编译,必须做一些相应的修改。

135

⑷Windows CE设备通常没有鼠标

大部分 Windows CE设备没有鼠标。 Windows CE设备中用一个被称为指示笔的笔样工具来代替鼠标。与鼠标不同,指示笔在屏幕上没有固定的指示标志,也就是所谓光标。

Windows CE的指示笔只在用户用它轻击(敲击或触击)屏幕上的触摸屏时才与操作系统和应用程序交互,但是, Windows CE的指示笔仍然能有效的选择对象、导航菜单项等, Windows CE的窗口不能改变大小,窗口要么是最大化,要么是创建时的尺寸。

136

⑸Win CE硬件并不十分标准化 Windows 98/NT可以运行在任意标准配置的硬件上,如配备有 Intel (或兼容)的芯片、适当内存、适当彩色或分辨率的显示器的计算机上。但 Windows CE却并非如此,每个 Windows CE设备厂商以不同方式进行设计,因此 Windows CE设备不像计算机那样有标准配置。 ActiveSync提供了从串行口、红外线接口到网络电缆的各种目前常用的通信手段。

为了消费类电子产品, Windows CE内建了对多媒体、通信( TCP/IP、 SNMP及 TAPI等)和安全的支持,并已经有了各种常用的应用程序。利用这些开发环境,可以比较容易的实现娱乐、通信和事务处理等嵌入式应用。

137

Win CE 主要包括:内核、存储、图形及多媒体、进程间通信、通信服务、安全服务、用户界面服务、Internet服务和本地化支持。

使用 Win CE用户需与 Microsoft公司签订合同方可获得源代码。

Windows CE支持非常流行的 Windows 应用程序接口 API,提供了互联网的浏览服务和其他服务,使其很适合用于需要与互联网连接的系统中。

目前常使用的有 Windows CE 4.2 、 CE5.0 等版本。

138

3 ) Windows CE 版本和开发工具

( 1 )版本Windows CE.netWindows CE.net 4.2

( 2 )开发工具 系统平台开发工具 Platform Builder 应用软件开发工具

Embedded Visual C++ 同步程序

Microsoft ActiveSync

139

Platform Builder

140

Embedded Visual C++

141

Windows CE 结构模型Windows CE Based Application

Windows CEComponents

Add-on Technologies

Core SystemInterface

Kenrel

Object store; File System; Database

Registry

Graphic, Window, Event Handling

Shell Components

Communications

Device Manager

OEM LayerOEM Adaptaton

LayerNative Driver

Stream Interface Driver

Windows CE-Based Target Device

142

( 4 ) Wince 驱动本地驱动

设备驱动程序是一些硬件所必需的,是由原始设备制造商创建的,用以驱动如键盘、触摸屏、音频设备等,往往在设备售出后就不会再更换,如通用 LED 驱动、电源驱动、键盘驱动和显示驱动等都是本机设备驱动。

流接口驱动 流接口设备驱动程序(指可安装的启动程序)可以由第

三方生产商提供,以支持添加到系统中的设备。 Windows CE下的设备驱动程序在与应用程序相同的保护级上工作。当系统启动时,大多数驱动程序是由设备管理进程( DEVICE.EXE )加载的,

143

4 ) Windows CE 产品开发流程分为 6 个步骤( 1 ) . 硬件设计( 2 ) . 选定 BSP

系统的迁移主要是实现 BSP ,使得系统可以支持专门用于该系统的底板以及相关设备。 Pb 理自带一些标准的 BSP ,绝大多数 BSP 由 CPU 产品供应商提供。

( 3 ) . 获得驱动程序

( 4 ) . 裁剪内核( 5 ) . 生成 SDK

通过 pb 生成自己的 SDK ,供编写应用程序。( 6 ) . 编写应用软件

144

6、 VxWorks VxWorks 操作系统是美国 WindRiver公司于 1983年设计开发的一种嵌入式(无 MMU )实时操作系统( RTOS ),具有良好的持续发展能力、高性能的内核以及友好的用户开发环境,在嵌入式实时操作系统领域牢牢占据着一席之地。

VxWorks 操作系统基于微内核结构,由 400多个相对独立的目标模块组成,用户可以根据需要增加或减少模块来裁剪和配置系统,其连接器可按应用的需要来动态连接目标模块。大多数的 VxWorks API是专用的,采用 GNU的编译和调试器。

145

VxWorks 所具有的显著特点

- 可靠性、实时性和可裁减性。 - 它支持多种处理器,如 x86、 i960、Sun Sparc 、 Motorola MC68xxx、 MIPS 、PowerPC等等。

例如在美国的 F-16和 FA-18战斗机、 B2隐形轰炸机、爱国者导弹和“索杰纳”火星探测车上使用的都是 VxWorks 操作系统。

常见的嵌入式操作系统还有 QNX、 Nucleus Embedded 、 ThreadX、 eCos 、 PalmOS、Symbian 等等。

VxWorks Architecture

工具软件,应用软件

VxWorks LibrariesTCP/IP I/O System

Wind kernel

BSP

File System

SCSI DriverNetwork Driver

Hardware dependent Software

EthernetControl l er

Seri alControl l er

Cl ockTi mer

SCSIControl l er

Hardware

Hardware Independent Software

147

7 、 智能手机操作系统简介

148

概述

目前的手机操作系统平台被 Symbian 、Linux 、微软和 Palm四家所掌控。

操作系统的成本占 15%~20% 。

149

1 ) Palm OS“胖子”由 Palm Computing公司设计开发的一种 32位嵌入式操作系统,主要应用在掌上电脑( PDA ),以及现在的智能手机。

Palm 已售出 3000 万部以上的移动化电脑产品 。

Palm OS 操作系统的最大特点就是节能以及占用很少的系统资源。同时它还是采用开放式的架构,因此吸引了众多为 Palm OS平台开发应用程序的程序设计人员。目前在其上面运行的共享软件和免费软件已超过 1万种。

150

2 ) Symbian OS

“塞班系统” 由诺基亚联合摩托罗拉、西门子等几家大型移动通讯设备商共同出资组建的一个合资公司,专门研发手机操作系统,并得到了占据市场份额大多数的手持通讯设备厂商的支持 。

Symbian 操作系统的前身是 EPOC ,而 EPOC是 Electronic Piece of Cheese取第一个字母而来的,其原意为“使用电子产品时可以像吃乳酪一样简单”。

在诺基亚的大力倡导下, Symbian已经成为一个开放的、易用的、专业的开发平台。支持 C++,Java 语言,支持蓝牙、 USB 、 IPv4 、 IPv6 、多任务、短信、彩信及各种信息服务。

151

3 ) Windows 系列 EOS

Windows Mobile

Windows CE( 简称WinCE)

Windows XP Embedded( 简称 XPE)

152

( 1 ) Windows Mobile 在 5.0 版本之前, Windows Mobile 分为

针对智能手机的版本 Windows Mobile for SmartPhone ,针对 PDA 手机的版本 Windows Mobile for Pocket PC Pho

ne ,针对 PDA 的版本 Windows Mobile for Pocket PC 。

Windows Mobile 系列操作系统是在微软的 Windows操作系统上变化而来的,因此,它们的操作界面非常相似。 Windows Mobile 系列操作系统功能强大,多数具备了音频 / 视频文件播放、上网冲浪、 MSN聊天、电子邮件收发等功能 。

支持该操作系统的智能手机多数都采用了英特尔嵌入式处理器,主频、硬件资源要求比较高。

此系列手机也有一定的缺点,如因配置高、功能多而产生耗电量大、电池续航时间短、硬件成本高等缺点。

153

Windows Mobile 6.0

154

( 2 ) Windows CE( 简称WinCE)

WinCE 是一款典型的嵌入式操作系统。

是微软专门为信息设备、移动应用、消费类电子产品、嵌入式应用等非 PC领域而基于 Win32 API从头开发的的战略性操作系统产品。

迫于 Linux 不断夺取嵌入式系统市场份额的压力。 2007年 11月1日发布了其嵌入式操作系统的第六代产品Windows Embedded CE 6.0 ,并宣布将该程序的约 350万行核心代码全部开放。

155

( 3 ) Windows Embedded XP( 简称 XPE)

是Windows XP专业版的组件化了的平台,它继承了很多 XP 的优势,又开创了自已的一些为嵌入式特有的功能,嵌入式设备制造商可以以此量身定做,方便地开发诸如信息台,机顶盒,工控设备,医疗设备 或多媒体设备等嵌入式设备。

156

Windows 总结微软这些嵌入式操作系统里面实际上只有两个内核

一个是 WinCE 内核,包括Windows Mobile也是使用这个内核,目前Windows Mobile 5.0 和 6.0 版本使用的都是WinCE 5.x 版本的内核。该版本 2004年推出,是目前广泛使用的一个产品。 WinCE 目前的最新版本是 6.0 , 2006年底正式发布。

另外一个内核是 XPE 和 WEPOS 使用的 Windows XP 的核心。

可见微软在嵌入式系统的策略即WinCE 和 Windows Mobile 是具有实时的嵌入式操系

统,目标是移动和通用的嵌入式设备,如手机、导航、 PMP 、机顶盒、工业控制设备和医疗仪器等。

Windows Embedded XP 是一个非实时的可以嵌入的操作系统,目标是瘦客户机、零售机器、工厂生产线控制和技术外设存储和显示设备。

157

4 )嵌入式 Linux

摩托罗拉为扭转在 Symbian阵营中的不利位置,抢占智能手机市场,倡导“ Linux+Java” 的发展思路。

158

5 ) GPhone 基于 Android平台的手机。Android是 Google公司领衔的三十余家企业成立开发手机联盟( OHA ),推出的一个完全开源的平台。

可使占手机成本 25%的软件部分价格有望大大降低。

由于完全开源,可随意开发手机应用程序。

159

动态 趋势

2008年春节前,诺基亚宣布收购挪威的奇趣科技( Trolltech )。后者的 Qtopia是知名度最大的基于 Linux 的手机系统软件。

手机的制造商转为互联网服务的提供商。