构件化嵌入式操作系统TICK的设备驱动模型_第1页
构件化嵌入式操作系统TICK的设备驱动模型_第2页
构件化嵌入式操作系统TICK的设备驱动模型_第3页
构件化嵌入式操作系统TICK的设备驱动模型_第4页
构件化嵌入式操作系统TICK的设备驱动模型_第5页
已阅读5页,还剩6页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、 564 南京大学学报(自然科学)第41卷第41卷2005年10月Vol. 41Oct., 2005南京大学学报(自然科学)JOURNAL OF NANJING UNIVERSITY(NATURAL SCIENCES)构件化嵌入式操作系统TICK的设备驱动模型欧阳图,滕启明,陈向群(北京大学信息科学技术学院软件研究所,北京,100871)播 要:论述了构件化嵌入式操作系统TICK的设备驱动模型的设计思想和实现方案.在这个模型中 设备驱动划分为与硬件歟密相关的低层驱动以及与硬件无关的高层驱动.低屋鉴动包含在硬件抽象层 (HAL)中,高层驱动作为系统构件存在.分析了 TICK操作系统的整体结构,H

2、AL的设计和结构,设备驱 动的执行流程,说明了设备驱动模型的设计思想.关键词:构 件,嵌入式操作系统设备驱动中图分类号:TP 316.89Device Driver Model for Component-based EmbeddedOperating System TICKOuyang Tu Teng Qi-Ming 9 Xixin-Qun(Institute of Software, Institute of Electronics Engineering and Conputer Science,Peking University Beijing 1000871, China)Abstr

3、act: This paper presents the idea and implementation of a driver model for axnpOTxmt-based embedded system TICK. In this driver rrcdel, & driver is spited into two parts: low level driver and high level driver. Low level drivers are considered as part of hardware abstract layer(HAL), High level driv

4、ers as kernel compcnmts. This paper will also present the whole structure of TICK# the structure of HAL. and the execution process of drives to illustrate design philosophy.Key words: component, embedded operating system, device driver 564 南京大学学报(自然科学)第41卷 564 南京大学学报(自然科学)第41卷复用软件构件来搭建嵌入式操作系统的思 想已经受

5、到越来越多的关注,构件化带来的结 构清晰,开发代价降低和开发周期缩短的好处 使得研究人员正在设法把各种构件化软件开发 方法介绍到嵌入式操作系统开发的领域九2).嵌入式系统中的设备驱动中包含控制具体 硬件的代码,也包含使用系统其他部分提供的 接口,而且设备驱动会向系统其他部分提供接 口;所以设备驱动需要适应底层硬件的变化,也 需要适应整个操作系统设计思想变化而导致的 系统软件环境的变化.为设备驱动设计一个灵 活的模型,使得在底层硬件或者系统其他部分 发生变化的时候,只需要替换驱动模块中的与 变化相关的子模块,保持其他模块不变,从而降 低系统开发的时间和代价,对于需要适应多种 应用场景和硬件平台的

6、嵌人式系统米说是很有 意义的.基金项目:国家高技术研究发展卄划(863卄划)软件亶大它琐(2004AA1Z230)TICK的设计目标是构件化的嵌入式操作 系统,在这个的提下,设备驱动模型的需要强调的恃征有:(1) 定义各种类型的设备需要提供的最底 层的驱动例程,硬件厂商或个人根据定义的接 口编写最底层的驱动例程.(2) 系统移植到新的硬件平台上时,设备 驱动的修改代价尽可能小系统替换新的构件时,设备驱动的修改代价尽可能小1系统整体结构和HAL结构TICK是构件化的面向嵌入式领域的操作 系统/TICK的整体结构如图1所述. 564 南京大学学报(自然科学)第41卷 564 南京大学学报(自然科学

7、)第41卷LibCInitUscrApPnPOSIXulTRONNative,八aHR!GNLRMSMTXLDREVNTWDTMRXCESPLKvs沖UserApP I UserApp2System Call InterfaceKernel Call Interfaceffil TICK体系结构 564 南京大学学报(自然科学)第41卷系统包含了硬件抽象层(Hardware abstract layer, HAL),构件运行时(Component RunTime ,CRT),以及系统/用户构件硬件抽 象层包含了所有与底层硬件宜接相关的软件成 分为了支持不同的系统设计(例如,一体化内 核或者微内

8、核),硬件抽象层中不包含任何策 略 HAL只提供访问底层硬件的足够的机制.构件运行时动态绑定系统/用户构件,通过 更换不同的系统/用户构件,就可以改变系统的 结构和特征,可以根据实际的情况选择包含/替 换不同策略的构件.HAL中包含启初服务(Boot Service,BS)模 块,低层驱动,运行时服务(Runtime Service RS)模块.BS模块为纤对具体硬件平台进行配 置提供了足够的接口. BS模块的功能在某种意 义上类似于传统的启动加载程序(bootloader). RS模块中包含记录管理低层驱动以及硬件设 备实例的设备管理构件,初始化时,根据配置文 件完成低层驱动和设备实例组织结

9、构的初 始化.2设备驱动模型设备驱动分为低层驱动和高层驱动两个部 分,低层驱动是对硬件的初步抽象,属于HAL 层,它封装了硬件的细节高层驱动对硬件进行 了更高层次的抽象,为系统其他构件提供稳定 易用的操作I/O设备的接口,高层驱动作为系 统构件而存在两层结构带来的好处有,当硬件 平台变化时,只需要把该平台对应的低层驱动 引入系统,并修改配置文件即可.高层驱动作为 构件存在,可以根据系统的整体设计而方便的 替换,符合这个驱动篌型的设备驱动能较好地 适应硬件的变化以及系统软件环境的变化设 备驱动需要适应的软件环境的变化在中有 很好的论述.566南京大学学报(自然科学)第41卷2.1 HAL中设备实

10、例和低层驱动的组织 TICK系统的HAL定义操作设备的低层接口 以及设备实例和低层驱动的组织结构,这些定 义一部分用于规范HAL中的低层驱动代码的 编写,同时也定义了 HAL之上的髙层的系统 构件和用户构件调用HAL低层驱动的接口.为了管理系统中的低层驱动,设备类型以 及设备实例之间的关联关系,HAL中定义了 TDevClass, TDriver, TDevice 三个结构. TDevChss设备类型的定义;TDevice是设备的 实例的定义;TDriver是某种类型设备的驱动的 定义,与TDevClass 对应,Driver记录了用 于操作这种类型的设备低层驱动例程的入口. 例如,系统中要使

11、用串口的设备,就会有对应的 TDevClass, TDevClass 对应_个 TDriver,系统 中有两个串口,则有两个TDevice的结构实例. 这里的设计采用了面向对象的思想,设备类型 与设备实例是一对多的关系,设备类型与低层 驱动是一对一的关系,某种类型设备的所有的 设备实例共享一份低层驱动的代码.图2设备驱动模型结构观图2.2低层驱动低层驱动清楚了解硬件细节 的软件部分,由熟悉该硬件平台的人编写,也可 以由硬件厂商提供低层驱动提供对具体硬件 的抽象操作系统的编写人员更关心的是系统 的整体框架和逻辑,不应该由他们来编写与底 层硬件紧密相关的驱动代码,而某些硬件厂商 由于专利等原因,对

12、自己生产的设备的某些细 节进行保密,这个时候由厂商编写低层驱动更 能发挥设备的性能.与低层驱动这个概念的类 似实现有Vxworks的BSP和Intel的EF1标 准,EFI标准定义了操作系统和硬件固件之 间的接口 .在TICK的设计中,低层驱动具有以 下特点:(1) 低层驱动需要实现的接口是定义好 的,高层驱动按照这个定义好的接口调用低层 驱动的例程低层驱动可以自主实现一些辅助 完成工作供自己调用的例程,但是这些辅助的 例程并不能被高层驱动所利用硬件的细节(寄 存器地址,中断向量地址等)都封装在与毎个硬 件平台一一对应的的低层驱动中,上层的构件 在使用设备的时候根据HAL定义好的接口调 用低层

13、驱动的操作例程,而不用关心低层驱动 实现这些例程的细节.(2) 对于某一类设备,系统中只有一份低 层驱动的代码,这要求低层驱动的每一个例程 能够处理所有的设备实例,设备实例的差别(寄 存器地址,中断向量,配置信息等)记录在设备 实例的私有数据域里,低层驱动的例程的第一 个参数就是指向设备实例的指针,低层驱动根 据传入的设备实例的私有数据来进行操作.例 如串口驱动中配置串口设备的接口是int SetConfig( void * handler, void* arg).图3中,串口的高层驱动使用的低层串口 驱动的接口是定义好的.分别是Initialize例程, GetC 例 程,PuC 例程,Ge

14、tConfig 例 程, SetConfig例程,另外还有处理中断的3个中断 处理例程:处理读中断的ISRRead例程,处理 写中断的ISRWrite例程,处理岀错中断的 ISRError例程,图中有两套串口低层驱动程 序,一套是为x86体系结构编写的,另外一套是 为ARM体系结构编写的,使用哪一套低层驱 动由系统最后运行的硬件平台决定高层串口 驱动在调用GetCO例程的时候,不需要知道低 层调用的是S3C44B0X-UART-GetC (),还是 X86-UART-GetC().2.3高层驱动高层驱动作为系统构件存在, 可根据不同的系统设计而实现不同策略的高层 驱动高层驱动为其他构件提供访问

15、设备的高 级接口.在TICK中提供了多种不同策略的高 层驱动的设计.图3串口的低层驱动高层驱动与系统的软件环境相关,可能需 要用到系统其他部分提供的原语和例程例如 高层驱动中为了管理多个执行线程同时访问一 个设备实例的时候,需要同步互斥的支持,这些 支持由提供进程/线程调度和同步互斥的构件 提供.例如有多个执行线程需要访问同一个设备 实例高层驱动的策略可以设计为只允许某个 线程独占设备其他线程需要等待这个线程完成 设备请求,也可以设计为每个线程的发出的设 备请在请求队列中排队,在请求完成后异步通 知线程工作完成.系统中选用的其他构件的不同,高层驱动 构件需做相应的改变,在没有文件系统构件的 前

16、提下,用户构件直接访问高层驱动的接口;在 有文件系统构件的情况下,用户构件可以通过 文件系统构件的接口访问设备,实现类似于 UNIX的把设备看作文件的语义.2.4髙层驱动和低层驱动的交互高层驱动 和低层驱动之间的执行流可能由高层驱动发 起,也可能由低层驱动发起.首先分析从上往下的执行流和数据流,高 层驱动通过HAL提供的接口査找需要的设备 实例,在成功获得设备实例后,根据HAL中定 义好的该类型设备的操作接口调用低层驱动的 例程,由低层驱动对该设备实例进行操作,从上 往下的执行流是冋步模式的.从下往上的执行流和数据流:设备完成请 求之后发出中断,低层驱动的中断处理程序被 执行为了避免丢失中断,

17、中断处理程序不应该 耗时过多,在完成必要的与硬件相关的工作后, 把延后执行的任务交给高层驱动完成.TICK的HAL设计中包含一个事件派发 机制.HAL层提供了发送事件的接口,通过该 接口发送的事件会被派发机制记录并转发给订 阅了该事件的系统构件事件类型是一个抽象 的集合,不因为硬件的改变而改变.事件派发机 制不仅可以完成硬件相关事件的派发,而且可 以完成软件事件的派发.低层驱动的中断处理程序在处理完成后可 以选择是否往高层构件发送事件,如果中断处 理程序完成了所有的工作,可以不发送事件;如 果尚未完成工作,可以发送对应的事件,订阅了 该事件的高层驱动会收到通知,进行余下的处 理因此低层驱动中的

18、中断处理程序应该只完 成必须马上完成的与硬件相关的工作,把可以 568 南京大学学报(自然科学)第41卷延迟的工作交由高层驱动或者其他系统构件来 完成以申口驱动为例,串口的低层驱动的中断 处理程序在处理读到字符的中断时,简单的把 读到的字符放进该串口设备的环形缓冲区中, 然后发送相应的事付,至于对环形缓冲区的数 据,则由上层驱动负责,上层驱动在接到事件 后,可以把数据从环形缓冲区里面提出,马上返 回给需要这些数据的其他构件,也可以缓存在 自己的缓冲区对于某些定时器驱动,它的低层 中断处理程序很简单,对中断进行应答后直接 发送事件,低层驱动并不需要知道这个定时中 断有何用途,而把解释这个中断含义

19、的任务交 由上层的构件.总结来说,由于事件派发机制的 存在,从下往上的执行流是异步模式的.在设备驱动模型中,HAL层为高层驱动构 件提供的与硬件无关的接口和定义有:(1) 査找具体设备实例的接口,高层构件通 过该接口査找设备实例.(2) 针对设备类的操作接口定义,高层构件 对设备可做的操作都在这里定义.(3) 派发事件的定义和高层构件订阅事件 的接口.frat 义1丈伸!的集11HALHAL提供的硬件无关接口3驱动的初始化当系统加电或者重启的时候,系统的控制 权交到HAL的BS模块,BS模块把CPU设置 到合适的特权级,确保中断,MMU,TLB被禁 止,缓冲被清空并禁止.这个过程在不同的硬件

20、平台上是大同小异的.接着BS模块初始化一些最基本的硬件, 如实时时钟和其他定时设备,还有闪存控制器 和用于下载构件或者调试的总线逻辑.完毕后BS把控制权交到RS模块.RS模块在内存中设置好硬件平台的低层 驱动(例如UART丄CD,键盘,等等),调用 HAL定义的接口建立设备实例和低层驱动的 组织结构.RS模块组织低层驱动的代码是按照 一个硬件配置文件自动生成的,硬件配置文件 的内容是操作系统的组装者在组装目标系统的 时候设定的.RS模块接着下载构件运行时(CRT),并把 控制权交于CRT;CRT分析TICK内核的配置 文件,动态绑定内核构件,其中中包含了高层驱 动的构件至此,驱动初始化完毕.其

21、他系统/用 户构件可以通过高层驱动构件提供的接口访问 设备.4实现中的细节问题在低层驱动中,需要访问硬件的控制/状态 寄存器,读取或写入信息.很多情况下,硬件用 同一个寄存器的某几位表示一个信息,另外几 位表示另一个信息例如在S3C44B0X的开发 板上,串口的行控制寄存器用0-1 bt表示传 输数据的字长,用第2比特表示是否加上停止 比特,用3-5 bt表示奇偶校验的设迓低层驱 动的代码为了读取或者设置某些位,通常的做 法是进行移位操作,频繁的移位操作使得代码 可读性降低,难以维护,TICK中使用C语言的 结构描述每个寄存器,不同意义的比特位对应 结构中的不同域,需要访问某特定意义的几个 比

22、特位的时候,访问这个结构的对应的域例 如,S3C44B0X的串匚行控制寄存器定义的结 构是:typedef union S3C44B0X _ ULCON IREGV32 W;struct REGV32 WORDLEN : 2;/* * V传输数据的字长.*/REGV32 STOPBITS : 1 ;/* * Edingbuih, Scoland, 2005 , 26 2810 Teng Q M, Chen X Q, Zhao X 6 building reusable EOS components from ELF object files. Journal of software, 2004, 15 (suppl,): 157 163.第41卷欧阳图写:构件化嵌入式操作系统丁 1CK的设备驱动模型 569 构件化嵌入式操作系统TICK勺设备驱动模型LEJ无钛鏈搖作者:欧阳图,滕启明,陈向群,Ouyang Tu, Teng Qi-Ming , Chen Xian-Qun作者单位:北京大学信息科学技术学院软件研究所北京,100871刊名:南京大学学报(自然科学版)|灼TIC|PKU|英文干刊名:JOURNAL OF NANJING UNIVERSITY(NATURAL SCIEN

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论