第1章嵌入式系统导论精编版.docx
- 文档编号:27885517
- 上传时间:2023-07-06
- 格式:DOCX
- 页数:18
- 大小:52.13KB
第1章嵌入式系统导论精编版.docx
《第1章嵌入式系统导论精编版.docx》由会员分享,可在线阅读,更多相关《第1章嵌入式系统导论精编版.docx(18页珍藏版)》请在冰豆网上搜索。
第1章嵌入式系统导论精编版
第1章嵌入式系统导论
近年来,随着计算机技术、微电子技术及通讯技术的飞速发展,基于32位微处理器的嵌入式系统在各个领域的应用不断地得到扩大和深入,嵌入式产品已成为信息产业的主流。
面对IT产业界这一新热点,高校开设嵌入式系统相关课程已是当务之急。
目前国内很多高校都在开设和计划开设嵌入式系统课程。
在嵌入式系统实验教学中,我们选择了当前主流的ARM7微处理器芯片和源码开放的μCLinux操作操作。
ARM系列处理器是专门针对嵌入式设备设计的,是目前构造嵌入式教学系统硬件平台的首选,而μCLinux继承了标准Linux的优良特性,它强大的网络功能和出色的文件系统等优势也将在嵌入式领域得到更加广泛的应用。
本章节对嵌入式系统的发展历史与现状、嵌入式Linux操作系统的特点及组成进行简要论述,在第2小节对µClinux系统进行了分析,第3小节论述了嵌入式Linux系统一般开发流程。
1.1概述
1.1.1嵌入式系统发展历史与现状
虽然嵌入式系统是近几年才开始真正风靡起来的,但事实上嵌入式这个概念却很早就已经存在了。
嵌入式系统诞生于微型机时代,经历了漫长的独立发展的单片机道路,从70年代单片机的出现到今天各种嵌入式微处理器、微控制器的广泛应用,嵌入式系统有了近30年的历史。
纵观嵌入式系统的发展历程,大致经历了以下四个阶段:
◆无操作系统阶段
嵌入式系统最初的应用是基于单片机的。
20世纪70年代,微处理器的出现,使早期供养在特殊机房中,实现数值计算的大型计算机发生了历史性的变化。
以微处理器为核心的微型计算机以其小型、价廉、高可靠性等特点,迅速走出机房,进入工业控制领域。
将微型机做在一个芯片上嵌入到一个对象体系中,实现对象体系的智能化控制,从而开创了嵌入式系统独立发展的单片机时代。
单片机大多以可编程控制器的形式出现,具有监测、伺服、设备指示等功能,通常应用于各类工业控制和飞机、导弹等武器装备中,一般没有操作系统的支持,只能通过汇编语言对系统进行直接控制,运行结束后再清除内存。
这些装置虽然已经初步具备了嵌入式的应用特点,但仅仅只是使用8位的CPU芯片来执行一些单线程的程序,因此严格地说还谈不上“系统”的概念。
这一阶段嵌入式系统的主要特点是:
系统结构和功能相对单一,处理效率较低,存储容量较小,几乎没有用户接口。
由于这种嵌入式系统使用简便、价格低廉,因而曾经在工业控制领域中得到了非常广泛的应用,但却无法满足现今对执行效率、存储容量都有较高要求的信息家电等场合的需要。
◆简单操作系统阶段
20世纪80年代,随着微电子工艺水平的提高,IC制造商开始把嵌入式应用中所需要的微处理器、I/O接口、串行接口以及RAM、ROM等部件统统集成到一片VLSI中,制造出面向I/O设计的MCU即微控制器(Micro Controller Unit),并一举成为嵌入式系统领域中异军突起的新秀。
与此同时,嵌入式系统的程序员也开始基于一些简单的“操作系统”开发嵌入式应用软件,大大缩短了开发周期、提高了开发效率。
这一阶段嵌入式系统的主要特点是:
出现了大量高可靠、低功耗的嵌入式CPU(如PowerPC等),各种简单的嵌入式操作系统开始出现并得到迅速发展。
此时的嵌入式操作系统虽然还比较简单,但已经初步具有了一定的兼容性和扩展性,内核精巧且效率高,主要用来控制系统负载以及监控应用程序的运行。
在MCU微控制器阶段,主要的技术发展方向是:
不断扩展满足嵌入式应用时对象系统要求的各种外围电路与接口电路,突显其对象的智能化控制能力。
它所涉及的领域都与对象系统相关,由单片微型计算机发展到微控制器,以寻求应用系统在芯片上的最大化解决。
◆实时操作系统阶段
20世纪90年代,在分布控制、柔性制造、数字化通信和信息家电等巨大需求的牵引下,嵌入式系统进一步飞速发展,而面向实时信号处理算法的DSP产品则向着高速度、高精度、低功耗的方向发展。
DSP(DigitalsignalProcessor)是专门用于信号处理方面的处理器,其在系统结构和指令算法方面进行了特殊设计,具有很高的编译效率和指令执行速度。
在这一阶段,随着硬件实时性要求的提高,嵌入式系统的软件规模也不断扩大,逐渐形成了实时多任务操作系统(RTOS),并开始成为嵌入式系统的主流。
RTOS是具有实时性且能支持实时控制系统工作的操作系统。
这一阶段嵌入式系统的主要特点是:
操作系统的实时性得到了很大改善,已经能够运行在各种不同类型的微处理器上,具有高度的模块化和扩展性。
此时的嵌入式操作系统已经具备了文件和目录管理、设备管理、多任务、网络、图形用户界面(GUI)等功能,并提供了大量的应用程序接口(API),从而使得应用软件的开发变得更加简单。
◆面向Internet阶段
21世纪无疑将是一个网络的时代,将嵌入式系统应用到各种网络环境中去的呼声自然也越来越高。
目前大多数嵌入式系统还孤立于Internet之外,随着Internet的进一步发展,以及Internet技术与信息家电、工业控制技术等的结合日益紧密,嵌入式设备与Internet的结合才是嵌入式技术的真正未来。
信息时代和数字时代的到来,为嵌入式系统的发展带来了巨大的机遇,同时也对嵌入式系统厂商提出了新的挑战。
目前,嵌入式技术与Internet技术的结合正在推动着嵌入式技术的飞速发展,嵌入式系统的研究和应用产生了如下新的显著变化:
1.新的微处理器层出不穷,嵌入式操作系统自身结构的设计更加便于移植,能够在短时间内支持更多的微处理器。
2.嵌入式系统的开发成了一项系统工程,开发厂商不仅要提供嵌入式软硬件系统本身,同时还要提供强大的硬件开发工具和软件支持包。
3.通用计算机上使用的新技术、新观念开始逐步移植到嵌入式系统中,如嵌入式数据库、移动代理、实时CORBA等,嵌入式软件平台得到进一步完善。
4.各类嵌入式Linux操作系统迅速发展,由于具有源代码开放、系统内核小、执行效率高、网络结构完整等特点,很适合信息家电等嵌入式系统的需要,目前已经形成了能与WindowsCE、PalmOS等嵌入式操作系统进行有力竞争的局面。
5.网络化、信息化的要求随着Internet技术的成熟和带宽的提高而日益突出,以往功能单一的设备如电话、手机、冰箱、微波炉等功能不再单一,结构变得更加复杂,网络互联成为必然趋势。
6.精简系统内核,优化关键算法,降低功耗和软硬件成本。
7.提供更加友好的多媒体人机交互界面。
1.1.2嵌入式系统的组成
嵌入式系统是以应用为中心,以计算机为基础,软硬件可裁剪,适用于系统对功能、可靠性、成本、功耗严格要求的专用计算机系统,整个嵌入式系统由四大部分组成:
嵌入式处理器、嵌入式外围设备、嵌入式操作系统和嵌入式应用软件。
嵌入式系统的体系结构如图1-1所示。
图1-1嵌入式系统的组成
◆嵌入式处理器
嵌入式处理器是嵌入式系统的核心。
嵌入式处理器与通用处理器最大的不同点在于,嵌入式CPU大多工作在为特定用户群所专门设计的系统中,它将通用CPU中许多由板卡完成的任务集成到芯片内部,从而有利于嵌入式系统在设计时趋于小型化,同时还具有很高的效率和可靠性。
◆嵌入式外围设备
在嵌入系统硬件系统中,除了中心控制部件(MCU、DSP、EMPU、SOC)以外,用于完成存储、通信、调试、显示等辅助功能的其他部件,事实上都可以算作嵌入式外围设备。
目前常用的嵌入式外围设备按功能可以分为存储设备(静态存储器和动态存储器)、通信设备(包括RS-232接口、USB接口、以太网接口等等)和显示设备(阴极射线管CRT、液晶显示器LCD和触摸屏)。
◆嵌入式操作系统
嵌入式操作系统根据应用场合可以分为两大类:
一类是面向消费电子产品的非实时系统,这类设备包括个人数字助理(PDA)、移动电话、机顶盒(STB)等;另一类则是面向控制、通信、医疗等领域的实时操作系统(RealTimeOperatingSystem),RTOS是具有实时性且能从硬件方面支持实时控制系统工作的操作系统。
目前嵌入式Linux操作系统以价格低廉、功能强大又易于移植而正在被广泛采用,成为嵌入式操作系统中的新兴的力量。
◆嵌入式应用软件
嵌入式应用软件是针对特定应用领域,基于某一固定的硬件平台,用来达到用户预期目标的计算机软件,由于用户任务可能有时间和精度上的要求,因此有些嵌入式应用软件需要特定嵌入式操作系统的支持。
嵌入式应用软件和普通应用软件有一定的区别,它不仅要求其准确性、安全性和稳定性等方面能够满足实际应用的需要,而且还要尽可能地进行优化,以减少对系统资源的消耗,降低硬件成本。
1.1.3嵌入式Linux的特点
嵌入式Linux(EmbeddedLinux)是指对Linux经过裁减小型化后,可固化在存储器中,应用于特定嵌入式场合的专用Linux操作系统。
嵌入式Linux的开发和研究已经成为目前操作系统领域的一个热点,与其它嵌入式操作系统相比,嵌入式Linux具有如下一些特点:
◆广泛的硬件支持
◆高效稳定的内核
◆开放源码,资源丰富
◆强大的网络支持功能
◆完善的文件管理机制
◆优秀的开发工具
◆完全免费
1.1.4嵌入式Linux的版本
嵌入式Linux发展到现在已经有很多种版本了,按照实际应用场合及特殊的功能需求,嵌入式Linux最常用的是以下两个版本。
(1)实时Linux操作系统RTLinux。
RTLinux是美国新墨西哥州大学计算机系研制开发的。
它在底层实现了添加Linux的实时特性支持。
经过加入实时处理后,RTLinux就完全能够达到硬实时系统的性能指标。
(2)μCLinux操作系统。
μCLinux是嵌入式linux的一个典范之作。
在μCLinux这个英文单词中μ表示Micro,小的意思,C表示Control,控制的意思,μCLinux就是Micro-Control-linux,字面上的理解就是“针对微控制领域而设计的linux系统。
我们实验教学系统就是采用的μCLinux操作系统。
下面有单独一节对μCLinux进行全面分析。
1.2Linux文件系统基础
1.2.1Linux文件结构
Linux特性之一就是对多种文件系统的支持,这种特性使得Linux很容易地同其他操作系统共存。
Linux将各种安装的文件和文件系统以一个完整的虚拟文件系统的形式呈现给用户。
文件结构是文件存放在磁盘等存贮设备上的组织方法。
主要体现在对文件和目录的组织上。
目录提供了管理文件的一个方便而有效的途径。
Linux使用标准的目录结构,在安装的时候,安装程序就已经为用户创建了文件系统和完整而固定的目录组成形式,并指定了每个目录的作用和其中的文件类型。
Linux采用的是树型结构。
最上层是根目录,其他的所有目录都是从根目录出发而生成的。
微软的DOS和windows也是采用树型结构,但是在DOS和windows中这样的树型结构的根是磁盘分区的盘符,有几个分区就有几个树型结构,他们之间的关系是并列的。
但是在Linux中,无论操作系统管理几个磁盘分区,这样的目录树只有一个。
从结构上讲,各个磁盘分区上的树型目录不一定是并列的。
因为Linux是一个多用户系统,制定一个固定的目录规划有助于对系统文件和不同的用户文件进行统一管理。
1.2.2Linux目录管理
Linux系统上命名目录的方式是相当隐秘的,在嵌入式Linux中,文件系统通常还是按照标准的目录结构来存放所有的文件。
通过上节的简要描述,大家对Linux的文件系统及目录结构有了一些认识,在这一节将列出Linux下的主要目录的功用。
(1)根目录(/)
目录结构上的最高点被称为根目录,用单个字符斜杠(“/”)表示根目录。
注意:
“/”目录与root用户的主目录不是一回事,其主目录为/root,因此/root目录是根目录“/”的子目录。
在Linux系统上的其它目录都包含在根目录之下的层次结构中,这一点不同于Windows系统。
Windows系统中的每个驱动器被赋予了自己的字母及其自己的目录结构。
在Linux中,系统上所有的存储设备都被装载到根目录之下的每个目录中,或者在根目录下,或者在更下层。
(2)/bin子目录
这个子目录包含超级用户和一般用户使用的命令。
这些命令对于系统来说是至关重要的,它们提供一些操作,比如拷贝、移动和删除文件、创建和打开文件、查看文本文件等。
用户通常不会去改变/bin目录的内容。
(3)/boot目录
这个目录包含系统启动所需的大多数文件。
微机启动时需要的其他文件存储在/etc和/shin目录中。
(4)/dev子目录
这个目录包含设备文件和其他特殊文件。
需要使用什么设备,再添加相应的设备文件。
下表列出了用户可以在/dev中发现的各类设备例子。
表1设备例子
设备名称
设备类型
/dev/ide
整个IDE主硬盘驱动器
/dev/hdb1
在IDE辅硬盘驱动器上的第一个分区
/dev/fd0
第一个软盘驱动器
/dev/lp0
第一个并行打印机
/dev/midioo
第一个MIDI端口
/dev/null
空设备
/dev/psaux
PS2键盘端口
/dev/vamdisk
RAM磁片
/dev/scd0
第一个SCSICD-ROM驱动器
/dev/sda
第一个完整的SCSI硬盘驱动器(作为U盘设备名)
/dev/tty1
第一个虚拟控制台
这不是一个完整的列表,但它基本列出了需要知道的设备。
对于这个目录不要做不必要的操作。
(5)/etc子目录
这个目录包含启动和正常运行Linux系统所需的配置文件。
这些文件大多能够被编辑(通过配置工具或文本编辑器来完成)。
大多数Linux集成套件提供了许多辅助软件用于配置/etc目录中的文件,以便使用户更容易使用Linux。
(6)/home子目录
在典型情况下,这个目录拥有系统中每个用户的子目录。
(7)/lib子目录
这个目录包含了位于/bin和/shin中程序需要的库文件。
一个库文件是一个程序文件,它包含了能够被多个不同程序使用的代码。
将这些共用代码以库的形式存放起来,可以减轻程序设计者的工作量。
(8)/mnt子目录
这个目录用于临时装载文件系统,例如,用户可以将软盘驱动器/dev/fd0装载到已经在根目录之下建立的一个独立目录(/fd0)中,但是用户同样可以很容易地将/dev/fd0装载为/mnt/floppy(事实上,许多Linux集成套件通过默认地创建这种装载点而帮助用户完成了这一工作)。
使用/mnt/floppy将使得用户的根目录较为整洁。
(9)/proc子目录
这个目录用于同Linux内核交换数据。
在这个目录中有一些能够查看的文本文件,它们包含一些系统信息,比如内核版本、系统正常工作时间和有关系统中处理器及内存的信息。
(10)/root子目录
/root目录被用做系统管理员的主目录。
(11)sbin子目录
该目录存放的是系统管理员使用的系统管理程序。
(12)tmp子目录
这个目录是公用的临时文件存储点。
(13)/usr子目录
这个目录包含系统中每个用户都使用的文件和程序。
这里存放了随同Linux集成套件一起安装的大多数程序和实用工具,并且能够供普通用户使用。
文件系统的层次结构规定了这个目录具有只读属性,用户不能改变该目录中的内容。
(14)/usr/local目录
在/usr目录中,/usr/local目录是一个例外,用户可以修改其中的内容。
在Linux中,一个文件可以被装载到任何目录名称之下,在许多Linux安装过程中,/usr/local是安装大多数第三方应用软件的地方。
/usr/local目录一开始是空的,可以在该目录中存放从web上下载、购买或者与网络邻居共用的程序。
(15)/usr/src目录
这个目录包含Linux的源代码,因为可能有用户想自己编译内核。
这个目录是重要的,当一个集成套件被安装到用户PC中时,它应该用内核原始文件和头文件填充/usr/src目录。
(16)/var目录
/var目录是Linux系统存储可变数据的地方。
实验教学系统μCLinux开发软件的安装目录结构参见第2章第3小节。
1.2.3文件系统的挂载
Linux系统中每个分区都是一个文件系统,都有自己的目录层次结构。
Linux会将这些分属不同分区的、单独的文件系统按一定的方式形成一个系统的总的目录层次结构。
这里所说的“按一定方式”就是指的挂载。
将一个文件系统的顶层目录挂到另一个文件系统的子目录上,使它们成为一个整体,称为挂载。
把该子目录称为挂载点。
注意:
1、挂载点必须是一个目录。
2、一个分区挂载在一个已存在的目录上,这个目录可以不为空,但挂载后这个目录下以前的内容将不可用。
对于其他操作系统建立的文件系统的挂载也是这样。
但是需要理解的是:
光盘、软盘、U盘或其他操作系统使用的文件系统的格式与Linux使用的文件系统格式是不一样的。
光盘是ISO9660;软盘是fat16或ext2;windowsNT是fat16、NTFS;windows98是fat16、fat32;windows2000和windowsXP是fat16、fat32、NTFS。
挂载前要了解Linux是否支持所要挂载的文件系统格式。
挂载时使用mount命令,格式如下:
mount[-参数][设备名称][挂载点]
其中常用的参数有:
◆-t<文件系统类型>指定设备的文件系统类型,常见的有:
ext2linux目前常用的文件系统
msdosMS-DOS的fat,就是fat16
vfatwindows98常用的fat32
nfs网络文件系统
iso9660CD-ROM光盘标准文件系统
ntfswindowsNT2000的文件系统
hpfsOS/2文件系统
auto自动检测文件系统
◆-o<选项>指定挂载文件系统时的选项。
有些也可用在/etc/fstab中。
常用的有:
codepage=XXX代码页
iocharset=XXX字符集
ro以只读方式挂载
rw以读写方式挂载
nouser使一般用户无法挂载
user可以让一般用户挂载设备
1.3μCLinux系统分析
μCLinux是针对那些不具有内存管理单元(MemoryManagementUnitMMU)的微处理器芯片而设计的。
μCLinux改写和裁减了标准Linux内核代码以缩小其内核,尽管μCLinux的内核远远小于标准Linux的内核,但它仍然保持了Linux操作系统几乎所有的优秀特性。
1.3.1μCLinux的内核加载方式
μCLinux的内核有两种可选的运行方式:
可以在flash上直接运行,也可以加载到内存中运行。
这种做法可以减少内存需要。
Flash运行方式:
把内核的可执行映象烧写到flash上,系统启动时从flash的某个地址开始逐句执行。
这种方法实际上是很多嵌入式系统采用的方法。
内核加载方式:
把内核的压缩文件存放在flash上,系统启动时读取压缩文件在内存里解压,然后开始执行,这种方式相对复杂一些,但是运行速度可能更快(ram的存取速率要比flash高)。
同时这也是标准Linux系统采用的启动方式。
1.3.2μCLinux的文件系统
支持多文件系统是Linux的一个重要特性,μCLinux同样把这一特性带进了嵌入式系统中,并进行了一些裁减。
μCLinux系统采用romfs文件系统,这种文件系统相对于一般的ext2文件系统要求更少的空间。
空间的节约来自于两个方面,首先内核支持romfs文件系统比支持ext2文件系统需要更少的代码,其次romfs文件系统相对简单,在建立文件系统超级块(superblock)需要更少的存储空间。
Romfs文件系统不支持动态擦写保存,对于系统需要动态保存的数据采用虚拟ram盘的方法进行处理(ram盘将采用ext2文件系统)。
Romfs是最简单的只读文件系统,占用空间最少,可用来做根文件系统(rootfilesystem),根文件系统里存放Linux启动时要用到的设备文件、配置文件和应用程序,例如:
/dev/tty0,etc/rc,/bin/init,/bin/sh等。
1.3.3μCLinux的应用程序库
教学科研μCLinux小型化的另一个做法是重写了应用程序库,相对于越来越大且越来越全的glibc库,μCLinux对libc做了精简。
μCLinux对用户程序采用静态连接的形式,这种做法会使应用程序变大,但是基于内存管理的问题,不得不这样做(这将在下面对μCLinux内存管理展开分析时进行说明),同时这种做法也更接近于通常嵌入式系统的做法。
1.3.4μCLinux的内存管理
应该说μCLinux同标准Linux的最大区别就在于内存管理,同时也由于μCLinux的内存管理引发了一些标准Linux所不会出现的问题。
下面将把μCLinux内存管理同标准Linux的内存管理部分进行比较分析。
标准Linux使用虚拟存储器技术,这种技术用于提供比计算机系统中实际使用的物理内存大得多的内存空间。
使用者将感觉到好像程序可以使用非常大的内存空间,从而使得编程人员在写程序时不用考虑计算机中的物理内存的实际容量。
标准Linux是针对有内存管理单元的处理器设计的。
在这种处理器上,虚拟地址被送到内存管理单元(MMU),把虚拟地址映射为物理地址。
通过赋予每个任务不同的虚拟--物理地址转换映射,支持不同任务之间的保护。
地址转换函数在每一个任务中定义,在一个任务中的虚拟地址空间映射到物理内存的一个部分,而另一个任务的虚拟地址空间映射到物理存储器中的另外区域。
计算机的存储管理单元(MMU)一般有一组寄存器来标识当前运行的进程的转换表。
在当前进程将CPU放弃给另一个进程时(一次上下文切换),内核通过指向新进程地址转换表的指针加载这些寄存器。
MMU寄存器是有特权的,只能在内核态才能访问。
这就保证了一个进程只能访问自己用户空间内的地址,而不会访问和修改其它进程的空间。
当可执行文件被加载时,加载器根据缺省的ld文件,把程序加载到虚拟内存的一个空间,因为这个原因实际上很多程序的虚拟地址空间是相同的,但是由于转换函数不同,所以实际所处的内存区域也不同。
而对于多进程管理当处理器进行进程切换并执行一个新任务时,一个重要部分就是为新任务切换任务转换表。
教学工作情况虚存系统并不是没有代价的。
内存管理需要地址转换表和其他一些数据结构,留给程序的内存减少了。
地址转换增加了每一条指令的执行时间,而对于有额外内存操作的指令会更严重。
当进程访问不在内存的页面时,系统发生失效。
系统处理该失效,并将页面加载到内存中,这需要极耗时间的磁盘I/O操作。
总之内存管理活动占用了相当一部分cpu时间(在较忙的系统中大约占10%)。
对于μCLinux来说,其设计针对没有MMU的处理器,即μCLinux不能使用处理器的虚拟内存管理技术(应该说这种不带有MMU的处理器在嵌入式设备中相当普偏)。
μCLinux仍然采用存储器的分页管理,系统在启动时把实际存储器进行分页。
在加载应用程序时程序分页加载。
但是由于没有MMU管理,所以实际上μCLinux采用实存储器管理策略(realmemeorymanagement)。
这一点影响了系统工作的很多方面。
μCLinux系
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 嵌入式 系统 导论 精编