第六章、嵌入式操作系统

上传人:ning****hua 文档编号:243141213 上传时间:2024-09-16 格式:PPT 页数:120 大小:626KB
返回 下载 相关 举报
第六章、嵌入式操作系统_第1页
第1页 / 共120页
第六章、嵌入式操作系统_第2页
第2页 / 共120页
第六章、嵌入式操作系统_第3页
第3页 / 共120页
点击查看更多>>
资源描述
单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,嵌入式操作系统,陈天洲、陈文智,实时性,简介,对于什么是实时系统,,POSIX 1003.b,作了这样的定义:指系统能够在限定的响应时间内提供所需水平的服务,实时系统根据其对于实时性要求的不同,可以分为软实时和硬实时两种类型,一个计算机系统为了提供对于实时性的支持,它的操作系统必须对于,CPU,和其他资源进行有效的调度和管理,即实时调度,实时调度分类,各种实时操作系统的实时调度算法从调度策略上可以分为如下三种类别:基于优先级的调度算法(,Priority-driven scheduling-PD,)、基于,CPU,使用比例的共享式的调度算法(,Share-driven scheduling-SD,)、以及基于时间的进程调度算法(,Time-driven scheduling-TD,),从调度方式上来讲可以分为:可抢占、不可抢占;从时间片来分:固定时间片、可变时间片,实时性改造,对操作系统实时性的扩展可以从两方面进行,:,向外扩展和向上扩展,向外扩展是从范围上扩展,让实时系统支持的范围更广,支持的设备更多,向上扩展是扩充操作系统内核,从功能上扩充系统的实时处理,Linux,的实时性,一般的通用,linux,已经具备一定的实时性,但无法满足硬实时的要求,运行于,linux,内核空间的进程(核心态)不能被抢先,在,linux,中,中断有时候会出于保护临界区操作的目的而被屏蔽,通用,linux,的时间滴答长度为,10ms,(硬件时钟频率,100HZ,),但是这对于时间精度要求很高(微秒级)的实时进程来说是不够的,嵌入式,Linux,的实时性改造,可以引入一个双内核结构,对,Linux,内核代码作一些修改,Linux,本身的任务以及,Linux,内核本身作为一个优先级最低的任务,而实时任务作为优先级最高的任务以,Linux,的内核模块,(Loadable Kernel Module,,,LKM),的形式存在的,资源核方法:这种方法是为解决传统实时操作系统中固定优先级抢占式调度策略的局限性而产生的,Linux 2.6,内核实时性分析,2.6,中内核自身是可抢占的,它允许自身在执行任务时被打断,2.6,版本的,Linux,内核使用了由,Ingo Molnar,开发的新的调度器算法,称为,O(1),算法,RTLinux,硬实时操作系统简介,RTLinux,是一硬实时操作系统,实现了一个微内核的小的实时操作系统,而将普通,Linux,系统作为一个该操作系统中的一个低优先级的任务来运行,普通,Linux,系统中的任务可以通过,FIFO,和实时任务进行通信,通过软件来模拟硬件的中断控制器,RT-Linux,通过将系统的实时时钟设置为单次触发状态,可以提供十几个微秒级的调度粒度,RTLinux,内核结构,启动优化基本技术,一、固化各种不可扩展硬件的设置,尽量标准化可扩展设备的接口,节约设备检测时间。,二、,Lazy Loading,,也即不加载当前非必需的模块,这些模块可以在启动后待机时间内加载,或者在具体用到之后再加载,把启动时间打散,从而缩短对用户来说至关重要的反应时间,(Responding Time),。,三、任务并行化,很多系统在启动任务时,是顺序执行,按部就班。为了减少启动时间,我们可以考虑任务的并行化,以减少启动时间的消耗。,嵌入式,Linux,启动过程分析,在内核运行之前需要系统引导程序,(,Bootloader,),完成加载内核和一些辅助性的工作,然后跳转到内核代码的起始地址并执行。,整个,arm,linux,内核的启动可分为三个阶段:第一阶段主要是进行,cpu,和体系结构的检查、,cpu,本身的初始化以及页表的建立等;第二阶段主要是对系统中的一些基础设施进行初始化;最后则是更高层次的初始化,嵌入式,Linux,的启动优化,系统任务裁减,裁减不适合本系统的部分任务,系统任务并行,明确任务依赖关系,任务并行启动(,make,j,工具的使用),电源管理综述,现在,Linux,中,最主要的电源管理方案主要有三种:,APM,、,ACPI,、,DPM,传统的,APM(Advanced,Power Management),是一种基于,bios,的电源管理标准,ACPI(Advanced,Configuration and Power Interface),,它主要是将电源管理的主要执行者由,bios,转换成为操作系统,这样可以提供更大的灵活性以及可扩展性,DPM,简介,DPM,Dynamic Power Management,在面向,Linux,的,DPM,架构中,内核中的,DPM,子系统负责维持整个系统的电源状态,并把,DPM,系统的不同电源管理模块联系在一起。,可以把,DPM,看成是为驱动程序、中间件和应用程序提供服务的元素,DPM,框架,存储管理,多程序模型,这是没有硬件地址转换的内存管理模型。即使没有硬件地址转换功能支持,多个程序也可以共享相同的物理地址,具有地址转换硬件的内存管理模型,应用程序使用的是虚拟地址,,CPU,实际执行程序所示用的是物理地址,从虚拟地址到物理地址的转换需要操作系统和,MMU,硬件的参与,高速缓冲(,Cache,)简介,Buffer Cache,Page Cache,Swap Cache,Hardware Cache,虚拟存储功能,巨大的寻址空间,内存映射,公平的物理内存分配,共享虚拟内存,主存与辅存层次信息传送,页式虚拟存储器,段式虚拟存储器,段页式虚拟存储器,Linux,存储管理,Linux,使用了上述第二种存储管理模型。,应用程序在标准,Linux,中的加载使用了“按需”分页的策略,Linux,的内存管理采取的是分页机制,Linux,虚拟内存的实现,需要几种不同的机制来实现:地址映射机制、内存的分配与回收、请求页机制、交换机制、内存共享机制。,地址映射机制,地址映射机制,主要完成主存、辅存和虚存之间的关联,Linux,采用一系列的数据结构和一个硬件缓存,(TLB),来实现地址映射机制,Linux,内核的映射机制被设计成三层,在页面目录和页表之间增设了一层“中间目录”,内存的分配与回收,最近被执行过的地址转换结果会被保留在,MMU,的转换后备缓存(,TLB,)中,页分配使用,2,的幂数大小的块,Linux,使用,Buddy,算法有效地分配和回收页块,Buddy,算法,这个算法首先找它请求大小的内存页块 ,它跟踪,free_area,数据结构中的,list,单元队列中的空闲页的链表,如果找到的页块大于请求的页块,则该块将被分开成为合适大小的块,因为所有的块都是,2,的幂次的页数组成,所以这个分割的过程比较简单,你只需要将它平分就可以了。空闲的块则放到适当的队列,而分配的页块则返回给调用者。,CLinux,存储管理,其设计针对没有,MMU,的处理器,不能使用处理器的虚拟内存管理技术,CLinux,仍采用存储器的分页管理,系统在启动时把实际存储器进行分页,没有,MMU,管理,所以实际上,CLinux,采用实存储器管理策略,(real,memeory,management),CLinux,系统对于内存的访问是直接,一个进程在执行前,系统必须为进程分配足够的连续地址空间,然后全部载入主存储器的连续空间中,嵌入式系统的文件系统管理,嵌入式系统的物理存储,Flash,存储器由于其安全性高,存储密度大,体积小,价格相对便宜,是嵌入式领域中最受欢迎的一类存储器,嵌入式系统中使用,Flash,存储器,通常有两种使用方式,只进行只读访问,在系统运行的时候既需要进行读操作,也需要进行写操作。,存储设备的管理方式,直接访问,Flash,自己编写,Flash,的驱动程序(即基本操作函数),Flash Disk,有些,Flash,存储设备上附带了控制电路,并且提供了,IDE,的接口。这些设备通常都是模拟了,PC,中的,IDE,之类设备的接口,专用于,Flash,的文件系统,JFFS,等文件系统,目前已经非常成熟,并有了成功的应用,嵌入式文件系统的类型,RAMDISK,在,RAMDISK,文件系统中,当系统启动的时候,会把外存中的映像文件加压缩到内存中,形成,RAMDISK,环境,便可以开始运行程序了。这种文件系统最大的问题就是,运行的程序的代码在内存和外存都占据了空间,cramfs,cramfs,也是一种压缩式的文件系统。但是它不是一次性地把所有内容都解压缩到内存中,而所需数据的位置,计算数据在,cramfs,的位置,然后把所需的部分解压缩到内存中,再通过访问内存来得到所需的数据。由于这个整个过程,包括内存中数据的位置都是由,cramfs,文件系统自己来维护。所以对开发人员是透明的,也节省了空间。,romfs,romfs,是一种只读文件系统,占用的系统资源也比较小。在,romfs,中,文件系统的管理代码占用的空间也比较小,但是,romfs,的文件访问权限和属主这些信息尚没有完全实现。此外,由于,romfs,文件系统是只读的,所以可以做得很小。,日志文件系统,在嵌入式设备断电可能性比一般的计算机的可能性要大,日志文件系统相对于普通文件系统,主要的变化就是增加了日志记录,JFFS,与,JFFS2,文件系统,2000,年,Axis,公司发布了他们开发的日志式,Flash,文件系统,JFFS,文件系统是开放源代码的文件系统,可以说是专门用于嵌入式,Linux,等系统的,JFFS,是直接在,Flash,设备上实现的文件系统,JFFS2,没有为,Flash,设备专门设计一个转换层来模拟普通的文件系统,而是直接对,Flash,进行操作,输入输出与设备管理概述,I/O,设备抽象,I/O,调度,缓冲技术,高速缓存,错误处理,性能与优化,I/O,设备抽象,不同的,I/O,设备,它们的读写方式不尽相同,对于应用程序来说最好是所有的设备都可以通过一个相同的界面来进行读写操作,需要通过一套机制对某一类相似的,I/O,设备的具体操作细节进行封装,在操作系统中是通过设备驱动来实现的,I/O,设备抽象层次结构,操作系统内核,操作系统内核,I/O,子系统,LCD,驱动,触摸屏驱动,PCI bus,驱动,LCD,控制器,触摸屏控制器,PCI bus,控制器,LCD,触摸屏,PCI bus,硬件,软件,I/O,调度,I/O,调度指的是对一组,I/O,请求进行安排,决定它们的执行顺序,操作系统一般会把对某个设备的,I/O,请求放入那个设备的请求队列中去,然后由,I/O,调度器对这些请求进行重新安排以改进系统的整体性能,缓冲技术,引入缓冲技术,主要有以下三个原因,:,一、是协调数据产生设备(,producer,)和数据接收设备(,consumer,)的速度,二、是协调数据产生设备和数据接收设备的数据大小,三、是因为为了保证写入外设的数据的一致性,要先把数据转移到内核空间,在缓冲技术(,Buffering,)中,两个设备之间或者一个设备与一个应用程序之间需要传输数据时,这些数据会先保存在内存中,这个内存区域称为缓冲区,高速缓存,高速缓存(,Caching,)是指把低速存储器的部分数据保存在高速存储器中以提高系统性能的技术,缓冲技术跟缓存技术的区别:缓冲块中的数据是独一无二仅此一份的,而缓存中的数据是低速存储器中的数据的拷贝。,错误处理,使用保护内存,I/O,设备和传输操作在很多情况下都会发生错误,有的是暂时性的,有的是永久性的,操作系统的错误提示能力相对硬件设备来说一般都比较低,一个硬件设备可以提供非常丰富和详细的出错信息,但是操作系统往往会忽略其中的很多信息,/O,性能对系统性能的影响,首先它需要,CPU,执行设备驱动程序,并对,I/O,请求进行调度,其次,,I/O,操作造成的程序执行上下文切换(,context switch,)也加重了,CPU,和缓存的负担,并且,I/O,是中断操作的主要组成部分,内核的中断处理性能稍有不足就会在,I/O,操作中暴露无遗,最后,,I/O,操作需要频繁的在设备控制器与内存、内存中用户空间与内核空间缓冲区之间拷贝数据,性能与优化,减少上下文切换次数。,减少数据在内存与设备之间复制的次数。,通过使用更大的数据传输单元、智能化的设备控制器和轮循(如果空等可以有效减少)等手段来减少中断次数。,把一部分,I/O,处理工作转移到硬件设备中去,使得外设能够跟,CPU,形成一定的并行处理,分担,CPU,的任务。,在,CPU,、存储器、总线和,I/O,之间平衡工作量。因为任何一部分的过载都会导致其余部分的等待,从而造成整体性能下降。,构件化操作系统,传统操作系统及视窗操作系统,因特网时代应用模型的演变,硬件设备即插即用,体系结构由固定变为灵活,浏览器成为统一的用户界面,操作系统对,XML,的支持,服务器,-,中间件,-,用户”编程模型,操作系统与虚拟机,基于中间件技术的嵌入式操作系统,基于中间件技术的操作系统的技术优势,传统操作系统及视窗操作系统,因特网时代以前的传统应用软件,大多是静态链接而成,由某一家公司提供,所有功能都集成在同一个软件中,一旦链接之后就不可能替换其中的软件模块,那时的操作系统有两大功能:首先它向用户提供一个分时系统;其次是向用户提供一组函数库,因特网时代应用模型的演变,程序作为动态构件自动加载运行,而不需要由用户去逐个启动。,构件支持脚本语言控制,多个构件可以相互操作,交换信息。,以浏览器为交互式操作界面,既便于有户掌握,又为程序开发提供了统一标准。,网络化资源管理,程序自动下载运行,不需要用户介入。,因特网时代应用模型的演变,来自不同软件开发商的软件模块动态组织起来运行,硬件设备即插即用,因特网时代要求硬件设备能即插即用,解决方案只能是在驱动程序对象中加入非执行的描述信息,,这种描述信息就是通常所说的元数据(,metadata,),它可以,“,告诉,”,访问者它有哪些特性和功能。,元数据可以是,XML,形式、二进制或两者兼有。我们知道对象加上元数据就是构件。,操作系统可以根据构件中的元数据生成中间件。这种在内核里动态生成的中间件是连接驱动构件与用户程序的,“,桥梁,”,,,而这,桥梁,是内核根据硬件设备的元数据动态生成的,此时的新型操作系统仍然是,以不变应万变,体系结构由固定变为灵活,操作系统体系结构大致分为两种:大内核(,Monolithic Kernel,)和微内核(,Micro Kernel,),大内核操作系统将图形、设备驱动、文件系统等全部功能在操作系统内核中实现,运行在内核状态、同一地址空间。优点是减少进程间通信和状态切换的系统开销,获得较好的运行效率。缺点是内核庞大,占用资源多,剪裁不易,并且一旦个别驱动程序运行出错,就会导致整个系统崩溃,稳定性、安全性不好。,微内核在内核中只实现那些必须由内核实现的基本功能,而将图形、文件系统、设备驱动、通讯等功能放在内核之外,作为系统服务来提供相应的功能,这些程序在用户状态下运行。这样做的优点是有一个精炼的内核,便于剪裁、移植。,灵活内核技术,浏览器成为统一的用户界面,操作系统对,XML,的支持,XML,文本描述语言的广泛使用将是因特网时代操作系统的另一明显标志,XML,的每个标签(,tag,)都可以由用户定义,XML,兼顾了对于人的可读性和计算机的处理效率,XML,已经成了因特网信息交换的标准,未来的操作系统内核会对,XML,进行最有效的支持,因特网时代操作系统技术的发展,服务器,-,中间件,-,用户”编程模型,操作系统与虚拟机,操作系统可以作为虚拟机,直接提供中间件的运行环境,操作系统可以对应用程序构件进行各种各样的控制,使得封装好的构件能够适应不同的运行环境和用户要求,操作系统利用中间件技术支持和控制应用程序的运行环境,就形成了因特网时代操作系统的关键技术,基于中间件技术的嵌入式操作系统,操作系统的实现采用构件技术,提供构件运行的虚拟机环境,支持动态加载构件,构件的互操作性定义了编程语言无关、可扩展、跨平台的二进制标准。构件之间的相互作用通过一组称作接口,(interface),的功能实现,提供接口描述语言,CDL,,为服务器中新功能的实现提供了方便,如脚本语言调用构件对象函数等,运行环境(虚拟机)可以在操作系统上自动生成中间件(代理构件),提供构件定位、调用、管理、中间件自动生成、构件通信,(,进程内、跨进程、跨网络等不同运行环境,),等机制,件技术保证了软件互操作性、版本升级独立性和运行环境透明性,提供了提高系统安全、软件协同开发、软件容错、可靠性、软件复用、软件升级的有效手段,基于中间件技术的操作系统的技术优势,提供系统的安全保护机制,硬件设备的即插即用,稳定、健壮的系统特性,灵活内核操作系统体系结构,嵌入式,Linux,的特点,主流嵌入式,Linux,系统,Clinux,Embedix,RTLinux,RTAI,Monta,Vista Linux,一、嵌入式,Linux,的,定义,嵌入式,Linux(Embeded,Linux),是指对,Linux,经过小型化裁剪后,能够固化在容量只有几十万字节或几十亿字节的存储器芯片或单片机中,应用于特定嵌入式场合的专用,Linux,操作系统,嵌入式,Linux,的优势,Linux,系统是层次结构且内核完全开放,强大的网络支持功能,Linux,具备一整套工具链,容易自行建立嵌入式系统的开发环境和交叉运行环境,并且可以跨越嵌入式系统开发中仿真工具的障碍,Linux,具有广泛的硬件支持特性,嵌入式,Linux,面临的挑战,1,、扩充,Linux,的实时系统,内核不支持事件优先级和抢占实时特性,对,Linux,实时性的扩展可以从两方面进行,:,向外扩展(让实时系统支持的范围更广,支持的设备更多),向上扩展(扩充,Linux,内核,从功能上扩充,Linux,的实时处理和控制系统),RT-Linux,的做法,Linux,本身的任务以及,Linux,内核本身作为一个优先级最低的任务,实时任务作为优先级最高的任务,实时任务以,Linux,的内核模块,(Loadable Kernel Module,,,LKM),的形式存在,2,、改变,Linux,内核的体系结构,Monolithic,内核体系,MicroKernel,体系,执行效率,内核的体积,升级、维护和移植,微内核技术,缺点:操作系统的服务模块在独立的地址空间运行,使得进程间通信和上下文切换的系统开销大大增加,降低了系统效率。,3,、完善,Linux,的集成开发环境,Linux,在基于图形界面的特定系统定制平台的研究上,与,Windows,操作系统相比还存在差距,POSIX,实时扩展,POSIX,(,Portable Operating System Interface,),是为标准化类,UNIX,操作系统所必须具有的特征和接口而制定,其思想就是为了增强为类,UNIX,操作系统编写的软件的可移植性,二、嵌入式,linux,开发,最小的嵌入式,Linux,系统仅需要三个基本元素:,引导实用程序,Linux,微内核,由内存管理、进程管理和定时服务构成,初始化过程,硬件驱动程序,一个或多个应用进程,以提供所需功能,面向嵌入式,Linux,系统的图形用户界面,MicoroWindows/NanoX,开放源码,无任何硬件加速能力,图形引擎中存在许多低效算法,代码质量较差,OpenGUI,可移植性稍差,Qt/Embedded,低的程序效率、大的资源消耗,MiniGUI,嵌入式,Linux,开发,了解硬件,针对所用,CPU,的编译器,/,汇编器,/,连接器,相应的库工具,目标文件分析,/,管理工具,符号查看器,编程器,下载工具和查错器,安排内存地址,编写启动代码和机器相关代码:硬件初始化,装载内核及安装根文件系统以及开始内核执行,驱动程序,嵌入式,Linux,的一般开发步骤:,精简内核,系统启动,驱动程序开发,界面开发:将,X-Window,换成,MicroWindows,精简内核,构造内核的常用命令包括:,make,config,、,dep,、,clean,、,mrproper,、,zImage,、,bzImage,、,modules,、,modules_install,。,精简内核的实例,使用,make,config,去掉多余功能。,./,Makefile,./arch/i386/kernel/,Makefile,系统启动,系统启动的相关文件如下:,./arch/$ARCH/boot/,bootsect.s,./arch/$ARCH/boot/setup.s,./init/main.c,bootsect.S,及,setup.S,IBM,系列,PC,的启动,IBM,系列,PC,在电源打开后,由内存中地址,FFFF:0000,开始执行,(,这个地址一定在,ROM BIOS,中,,ROM BIOS,一般是在,FE000h,到,FFFFFh,中,),,而此处的内容则是一个,jump,指令,,jump,到另一个位于,ROM BIOS,中的位置,开始执行一系列的动作。 紧接着系统测试码之后,控制权会转移给,ROM,中的启动程序,(ROM bootstrap routine),。,这个程序会将磁盘上的第零轨第零扇区读入内存物理地址,07C0:0000(,即,07C00h,处。而位于,Linux,开机磁盘的,boot sector,上的是,Linux,的,bootsect,程序。,Linux,的启动,Linux,是由位于,boot sector,的,bootsect,程序负责把,setup,及,Linux,的,kernel,载入内存中,再将控制权交给,setup,。,驱动程序,在,Linux,系统里,设备驱动程序提供一组入口点,它们由一个结构在设备驱动程序初始化的时候向系统进行登记,以便系统在适当的时候调用。,Linux,系统里,通过调用,register_chrdev,向系统注册字符型设备驱动程序。,添加驱动程序,1.,直接修改系统核心的源代码,把设备驱动程序加进核心里,2.,把设备驱动程序作为可加载的模块,由系统管理员动态地加载它,使之成为核心的一部分。,驱动程序模块,Linux,中,模块可以用,C,语言编写,用,gcc,编译成目标文件(不进行链接,作为*,.o,文件存在)。为此需要在,gcc,命令行里加上,-c,的参数。在成功地向系统注册了设备驱动程序后(调用,register_chrdev,),,就可以用,mknod,命令来把设备映射为一个特别文件。其它程序需要使用这个设备的时候,对此特别文件进行操作。,三、,linux,启动流程,初始化流程,1,加电或复位,2 BIOS,的启动,3 Boot Loader,4,操作系统初始化,1,加电或复位,冷启动过程开始,中央处理器进入复位状态,将内存中的所有数据清零,对内存进行校验,如果没错,,CS,寄存器将置入,FFFF,IP,寄存器置入,0000,,这个,CS:IP,组合指向的是,BIOS,的入口。系统就是这样进入,BIOS,启动过程的。,2 BIOS,启动,上电自检,POST(Power On Self Test),对系统内的硬件设备进行监测和连接,最后,,BIOS,将从软盘或硬盘上读入,Boot Loader.,如果从硬盘启动,,BIOS,将读入该盘的零柱面零磁道,1,扇区(,MBR,),这个扇区上就放着,Boot Loader.,2 BIOS,启动,除了启动程序,,BIOS,还提供了一组中断以便于对硬件设备的访问。我们知道,当键盘上的某一键被按下,,CPU,就会产生一个中断并把这个键的信息读入。,在操作系统没有被装入以前(,Bootsect.S,还没有被读入),中断的响应程序由,BIOS,提供。,3 Boot Loader,Boot Loader,是一段汇编代码,存放在,MBR,中,它的主要作用就是将系统启动代码读入内存。,3 Boot Loader,因为在启动过程中,,BIOS,会把,Boot Loader,读入内存,并把控制权交给它。,MBR,(,硬盘启动)内的代码就是,Boot Loader,或者它的一部分,为了说明,Boot loader,的实现,先解释磁盘结构。,3 Boot Loader,一个硬盘在,DOS,文件系统下可被分为四个基本分区,可以把一个基本分区定义为一个扩展分区,然后再把这个基本分区分为一个或多个逻辑分区。,整个硬盘的分区表存放在硬盘的第一个扇区(,MBR,),,每个扩展分区也对应一个分区表,它存放在该扩展分区对应的第一个扇区里。,除主引导扇区外,每个基本分区和扩展分区也有自己的引导扇区,结构与,MBR,相同,但逻辑分区的引导扇区不能用于启动。,3 Boot Loader,如果是硬盘启动,,Boot Loader,将查找主分区表中标记为活动分区的表项,把该表项对应的分区的引导扇区读入,然后将控制权交给该扇区内的引导程序。,3 Boot Loader,如果计算机上装有不只一个操作系统,仅仅,MS-DOS,的,Boot Loader,无法完成这种工作,需要一个可以多重起动的工具,下面介绍,Linux,下最常用的,LILO.,3 Boot Loader,LILO,实际上是一个在,Linux,环境下编写的,Boot Loader,程序,主要功能是引导,Linux,操作系统的启动。,LILO,的功能实际上是有几个程序共同实现的,它们是:,(,1,),Map Installer,这是,LILO,用于管理启动文件的程序。它将,boot loader,写入引导分区,创建纪录文件以映射内核的启动。,(,2,),The boot loader,它负责把,Linux,内核或其他操作系统 的引导分区读入内存。还提供命令行接口,让用户选择从哪个操作系统启动和加入启动参数。,(,3,)其他文件:主要包括用于存放,Map Installer,记录的,map,文件和存放,LILO,配置信息的配置文件。,3 Boot Loader,从代码分析层次认识,LILO,运行过程。,4,进入操作系统,Boot Loader,做了这么多工作,一言以蔽之,只是把操作系统的代码调入内存,所以当它执行完后,自然该把控制权交给操作系统,由操作系统的启动程序来完成剩下的工作。,4,进入操作系统,把控制权交给,Setup.S,这段程序,进入保护模式,同时把控制权交给,Head.S,Head.S,调用,/init/main.C,中的,start_kernel,函数,启动程序从,start_kernel(),函数继续执行,4,进入操作系统,(,1,),Setup.S,首先,,Setup.S,对已经调入内存的操作系统代码进行检查,如果没错,它会通过,BIOS,中断获取内存容量,硬盘等信息(实模式),准备让,CUP,进入保护模式,a.,先屏蔽中断信号,b.,调用指令,lidt,和,lgdt,c.,对,8259,中断控制器进行编程,d.,协处理器重新定位,完成这几件事后,,Setup.S,设置保护模式的标志,重取指令,再用一条跳转指令,jmpi,0x100000,KERNEL_CS,。,进入保护模式下的启动阶段,控制权交给,Head.S.,4,进入操作系统,(,2,),Head.S,也要先做屏蔽中断一类的工作,然后对中断向量表做一定的处理,Boot Loader,读入内存的启动参数和命令行参数,,Head.S,把它们保存在,empty_zero_page,页中,检查,CUP,类型,对协处理器进行检查,页初始化,调用,setup_paging,这个子函数,因为已进入保护模式,段机制的多任务属性体现,4,进入操作系统,(,3,),main.c,中的初始化,Head.S,调用,/init/main.c,中的,start_kernel,函数,把控制权交给它,这个函数是整个操作系统初始化的最重要的函数,一旦它执行完,整个操作系统的初始化也就完成了。,4,进入操作系统,(,3,),main.c,中的初始化,计算机在执行,start_kernel,前,以进入了保护模式,使处理器完全进入了全面执行操作系统代码的状态。,但直到目前为止,这都是针对处理器的。而一旦,start_kernel,开始执行,,Linux,内核就一步步展现。,Start_kernel,执行后,就可以以一个用户的身份登陆和使用,Linux,了,4,进入操作系统,(,3,),main.c,中的初始化,较为重要的函数如下,Setup_arch(),最基本硬件的初始化,Paging_init(),线性地址空间映射,Trap_init(),中断向量表初始化,Int_IRQ,与中断有关的初始化,Sched_init,(),进程调度初始化,Console_init(),对中断的初始化,4,进入操作系统,(,3,),main.c,中的初始化,对文件系统的初始化,Inode_initI,() i,节点管理机制初始化,Name_cache_init(),目录缓存机制初始化,Buffer_init(),块缓存机制初始化,4,进入操作系统,(,3,),main.c,中的初始化,启动到了目前这种状态,只剩下运行,/etc,下的启动配置文件。,这时初始化程序并没有完成操作系统各个部分的初始化,更关键的文件系统的安装还没有涉及,这是在,init,进程建立后完成的。就是,start_kernel(),最后部分内容。,4,进入操作系统,(,4,)建立,init,进程,Linux,要建立的第一个进程是,init,进程,启动所需的,Shell,脚本文件,a.Linux,系统启动所必须的,b.,用户登陆后自己设定的,系统启动所必须的脚本存放在系统默认的配置文件目录,/etc,下。首先调用的是,/etc/,inittab,.,四、,Linux,系统移植的两大部分,内核部分和系统部分,(1),内核部分初始化和控制所有硬件设备(严格说不是所有,而是绝大部分),为内存管理、进程管理、设备读写等工作做好一切准备。,(2),系统部分加载必需的设备,配置各种环境以便用户可以使用整个系统。,(1),内核移植,Linux,内核可以视为由五个功能部分组成:进程管理(包括调度和通信)、内存管理、设备管理、虚拟文件系统、网络,需要改动的就是进程管理、内存管理和设备管理中被独立出来的那部分即硬件相关部分的代码,修改的代码,进程管理底层代码,BIOS,接口代码,时钟、中断等板上设备支持代码,特殊结构代码:,SMP,内存管理,(2),系统移植,一个最小系统的重建过程,类似,Linux,系统应急盘,DiskOnChip,包括:,init,、,libc,库、驱动模块、必需的应用程序和系统配置脚本。,五、一些,Real-Time Linux,简介,1,、,NMT RT-Linux,NMT,是新墨西哥科技大学,(New Mexico Technology),的缩写,Real-time Linux,的鼻祖,硬实时,一个实时内核负责处理硬件消息,接管中断,实时任务可在该内核上直接运行,可载入式核心模组,( loadable kernel module),。,2,、,RTAI,Real-Time Application Interface,LKM,在,Linux,上定义了 一组,RTHAL (Real-Time Hardware Abstraction Layer),RTAI,只使用,RTHAL,和,Linux,沟通,3,、,LXRT,RTAI,无法直接使用,Linux,的系统调用,解决的方法:,使用,RT-FIFO,将一个,RTAI real-time kernel module,和真正的,Linux,进程连接在一起,代理:,LXRT proxy,4,、,MontaVista,Linux2.1,MontaVista,软件公司,全球三大嵌入式,Linux,操作系统及解决方案供应商之一,MontaVista,Linux2.1,支持,6,种体系结构的,20,款处理器,,x86/IA-32,、,PowerPC,、,StrongARM,、,XScale,、,ARM,、,MIPS,以及,SH,。,MontaVista,Linux2.1,包括,KDevelop,IDE,、,目标配置工具(,TargetConfigurationTool,)、,库优化工具(,LibraryOptimizertool,)。,另外,它还提供超过,215,个应用软件包。,基于,Linux2.4.17,稳定内核,提供支持,x86,、,MIPS,、,SH,以及,PowerPC,体系结构的实时抢占式内核。,跨平台开发,支持,14,个主机开发环境,包括,RedHat,、,YellowDogLinux,、,SuSE,、,Mandrake,、,Solaris,以及,VMWare,onWindowsNT/2000,该版本提供了,215,多个主机配套工具和嵌入式目标平台开发组件软件包,包括,thttpd,嵌入式服务器和,802.11b,无线通信标准附加包。,扩展了针对嵌入式跨平台开发的各类开放源代码工具的支持,提供了首个基于,KDevelop,的,MontaVista,开发环境;,支持,x86,和,PowerPC,平台的,Linux,跟踪工具(包括内核性能和执行分析器);,ext3,日志文件系统。,5,、,uClinux,专为无,(,MMU,),的微控制器打造的嵌入式,Linux,操作系统。,uClinux,已移植支持的微控制器和微处理器:,摩托罗拉,DragonBall,(M68EZ328),M68328,M68EN322,ColdFire,QUICC(QuadIntegratedCommunicationsController)MotorolaMC68328:,DragonBall,集成微处理器,ARM7TDMIMC68EN302AxisETRAXInteli960PRISMAAtari68kETRAX,特点,UClinux,的内核要比原,Linux2.0,内核小的多,1.,内存管理,不能使用处理器的虚拟内存管理技术,分页管理,对于内存的访问是直接的,所有程序中访问的地址都是实际的物理地址。,对内存空间没有保护,各个进程实际上共享一个运行空间。一个进程在执行前,系统必须为进程分配足够的连续地址空间,然后全部载入主存储器的连续空间中。,2.uCLinux,两种可选的的内核加载方式,Flash,运行方式:把内核的可执行映像文件烧到,flash,上,系统启动时从,flash,的某个地址开始逐句执行。,内核加载方式:把内核的压缩文件存放在,flash,上,系统启动时读取压缩文件在内存里解压,然后开始执行,运行速度更快,3.uCLinux,的,romfs,文件文件系统,内核支持,romfs,文件系统比支持,ext2,文件系统需要更少的代码,超级块(,superblock,),需要更少的存储空间。,4.uCLinux,的应用程序库,uClibc,对,libc,做了精简,静态链接,uClinux,的主要特色,通用的,LinuxAPI,uCkernel,512KB,uCkernel,+,工具,900KB,完整的,TCP/IP,协议堆栈支持大量其它的网络协议支持各种文件系统,包括,NFS,、,ext2,、,ROMfs,、,JFFS,、,MS-DOS,以及,FAT16/32,6,、,BlueCat,Linux,LynuxWorks,公司,2.4Linux,内核,多种处理器,LynuxWorks,BlueCat,4.0,的特性,为内核调试提供的独特的,gdb,扩展功能广受欢迎的开发环境和用户界面在追踪、调试内核以及应用程序函数的时候,可以使用简单明了的图形化界面能够快速对内核的功能,大小等进行配置使用开放构架的电源管理和优化方案加载和使用已经经过测试的应用组件更加方便,BlueCat,Linux4.0DevelopersBundle,商业许可证,SpyKer,系统跟踪工具,VisualLynux,IDE,或者,CodeWarriorIDEEdition,具有硬实时特性的,Linux,产品,BlueCat,RT,(,RealTime,),LynuxWorks,公司是目前唯一一个能够提供同时满足开放标准嵌入式和实时需求的嵌入式操作系统解决方案的企业。,LynuxWorks,提供的开发工具包括:编译器,调试器,内核跟踪工具以及分析器和集成开发环境等等。,嵌入式系统示例,SMART,陈天洲、陈文智,系统结构,Smart(Sub-coMponent,ArchiTecture,,子构件体系结构,),是一种基于构件的嵌入式系统体系结构。,其主要思想就是在构件化的基础上建立嵌入式系统,,该体系以,Smart,硬件抽象层,(SHAL),,动态可调整的应用抽象层为基础,以构件化的嵌入式操作系统,SmartEOS,为核心,为跨平台集成开发环境,SmartIDE,为辅助工具,构建了一个新的嵌入式体系结构。,理论参考模型,Smart,的特征,弹性设计。,可任意裁减。,系统优化。,应用特制。,Smart,系统实现,以构件化为基本思想,实现了,Smart,系统。,该系统包括:,SmartEOS,,,SmartPS,,,SmartDB,
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 图纸专区 > 小学资料


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!