vxworks_IO系统_哈尔滨工业大学_第1页
vxworks_IO系统_哈尔滨工业大学_第2页
vxworks_IO系统_哈尔滨工业大学_第3页
vxworks_IO系统_哈尔滨工业大学_第4页
vxworks_IO系统_哈尔滨工业大学_第5页
已阅读5页,还剩63页未读 继续免费阅读

下载本文档

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

文档简介

1、嵌入式操作系统第7章 VxWorks I/O系统系统嵌入式操作系统主要内容1、I/O系统基本结构系统基本结构2、VxWorks的的I/O接口接口3、I/O内部管理机制内部管理机制4、串口驱动、串口驱动嵌入式操作系统 重点掌握 I/O内部管理机制内部管理机制 串口驱动嵌入式操作系统1、嵌入式、嵌入式I/O管理特点管理特点 在一些实时内核的I/O系统中,用户I/O请求 在到达设备驱动程序之前,通常都只进行 非常少量的处理 实时内核的I/O系统的作用就像一个转换表,把 用户对I/O的请求转换到相应的驱动程序例程 驱动程序就能够获得最原始的用户I/O请求,并 对设备进行操作 为满足标准设备处理的需要,

2、I/O系统通常也提 供一些高级的例程库,便于实现设备的标准通 信协议嵌入式操作系统VxWorks I/O系统基本结构系统基本结构I/O 系统open()create()read()write()close()ioctl()remove()字符设备驱动程序文件系统DOSRaw 块设备块设备驱动程序设备C设备C设备D设备D设备E设备C设备 D设备F 设备设备G 设备设备H设备设备A设备A设备B设备B应应用用程程序序TCP/IP DOSMUX DOS网络设备块设备驱动程序驱动程序非标准设备驱动程 序嵌入式操作系统 VxWorks下的设备分为字符设备、块设备、网络下的设备分为字符设备、块设备、网络 设

3、备和其他非标准设备 字符设备以文件的形式直接通过基本I/O接口挂接到 I/O系统中系统中 而块设备的驱动则不同,在块设备驱动和I/O系统之间 存在文件系统层 网络设备没有对应的设备文件,应用程序和网络接口 之间的数据通信不基于标准的I/O系统接口,而是 socket,bind,listen,accept,send,connect等等 应用程序可以直接调用非标准设备的驱动程序嵌入式操作系统标准设备的调用关系嵌入式操作系统 是否一定要使用标准接口?否 设备不需要I/O系统提供的系统相关功能 设备访问速度是使用中的关键因素 标准接口的驱动程序常用在以下设备中 块设备驱动程序基于文件系统、可随机访问、

4、以 块为单位传输数据 大部分的非块设备驱动程序如鼠标等串行输入设 备嵌入式操作系统 VxWorks 下的设备命名设备名/tyCo/0/fd0/ide0/ata0/pipe/0/sd0/tffs0设备串口软盘IDE接口设备接口设备ATA接口设备接口设备 管道SCSI设备设备Trueffs闪存设备闪存设备嵌入式操作系统 VxWorks 提供虚拟设备支持某些设备驱动嵌入式操作系统2、VxWorks的的I/O接口接口 VxWorks I/O系统提供了多种标准接口供开发者系统提供了多种标准接口供开发者 使用,包括: 基本I/O(ioLib) 缓存I/O(ansiStdio) 格式I/O(fioLib)嵌

5、入式操作系统2.1 基本I/O 基本I/O接口共有7个,应用程序通过这些接口来 访问设备,设备驱动程序也遵循该接口规范,提 供具体的实现。它由ioLib库提供支持嵌入式操作系统接口名称opencreatreadwriteioctlcloseremove函数原形open(filename,flags,mode)creat(filename,flags)read(fd,&buf,nBytes)write(fd,&buf,nBytes)ioctl(fd,command,arg)close(fd)remove(filename)描述打开文件创建文件从文件中读取向文件中写入其他控制命令关闭文件移除文件嵌

6、入式操作系统2.2 带缓存I/O 在基本I/O接口 的基础上,VxWorks提供了符合 ANSI C stdio定义的带缓存定义的带缓存I/O包包 要使用VxWorks的stdio,需要在工程中包括 INCLUDE_ANSI_STDIO组件组件 带缓存I/O就是在基本I/O的基础上增加了一层缓 存机制,应用程序的数据读写通过此缓存 (buffer)来中转嵌入式操作系统嵌入式操作系统 对文件的存取使用文件指针(指向FILE结构)来 代替文件描述符。 FILE结构在结构在stdio.h中定义,包括文件描述符和指向缓中定义,包括文件描述符和指向缓 存的指针 使用缓存机制提高系统的效率嵌入式操作系统2

7、.3 格式I/O VxWorks提供了提供了fioLib库用于格式库用于格式I/O printf、sprintf、sscanf等在等在ANSI C中通常作为中通常作为stdio库库 的函数,而VxWorks将它们定义到fioLib库中,不需要 定义INCLUDE_ANSI_STDIO就可以使用这些函数。 fioLib库使用了一个格式化的、无缓存的接口库使用了一个格式化的、无缓存的接口嵌入式操作系统3、I/O内部管理机制内部管理机制 I/O系统可以管理若干个设备驱动程序系统可以管理若干个设备驱动程序 一个驱动程序处理所有同类型的设备,这些设备 可能只是参数不同,例如I/O地址和中断号等 I/O系

8、统和设备驱动程序之间的接口模型就是字符系统和设备驱动程序之间的接口模型就是字符 设备驱动程序接口嵌入式操作系统应用程序、I/O系统和字符设备驱动程序的关系应用程序 I/O usr interfaceI/O internal interfaceI/O system 字符设备驱动程序接口char driver1char driver2char driver3dev1dev2dev3嵌入式操作系统3.1 I/O系统提供内部应用库函数系统提供内部应用库函数(iosLib)嵌入式操作系统setup codeapplicationopen creat close read write ioctlioLib

9、iosDrvInstalliosDevAddiosLibxxDrv() xxDevCreate() xxOpen() xxclose()xxRead() xxWrite() xxIoctl()xxDrv嵌入式操作系统3.2 驱动接口函数模版嵌入式操作系统嵌入式操作系统嵌入式操作系统嵌入式操作系统3.3 与I/O系统相关的几张表 文件描述符表(FD_table) 驱动程序描述表(Driver_table) 设备列表(Device_list)嵌入式操作系统文件描述符表(FD_table) VxWorks下大多数的下大多数的I/O设备都被当作文件来存设备都被当作文件来存 取 此处所说的文件和文件系统

10、没有必然的联系,只是 I/O系统中的操作对象系统中的操作对象 文件可能指一个物理设备,或一个任务管道, 或文件系统中的一个文件嵌入式操作系统 在基本的I/O调用中,文件通过文件描述符(fd) 来引用 文件描述符是open或creat函数返回的正整数 其他的I/O操作以文件描述符作为参数来制定对应的文 件 当一个文件被打开后,一个文件描述符被分配并返回, 当文件被关闭后,文件描述符被释放 一个文件描述符并不属于某个特殊任务,而是属 于I/O系统的全局句柄嵌入式操作系统 VxWorks在内部维护了一张文件描述符表,文件在内部维护了一张文件描述符表,文件 描述符是这张表的索引 文件描述符表是I/O系

11、统将文件描述符与驱动程序、 设备对应起来的手段,如下图:文件描述符345驱动程序索引号255驱动程序指定的设备号001嵌入式操作系统 文件描述符表大小是固定的,总共有NUM_FILES 项,也就是同时能够打开的文件的最大个数 在 config.h中,中,NUM_FILES缺省定义为缺省定义为50 在工程中,可以通过 “IO system”组件来修改组件来修改 NUM_FILES定义定义 文件描述符从3开始分配,这是因为0、1、2已经被保 留定义为标准输入、输出和错误输出嵌入式操作系统驱动程序描述表(Driver_table) VxWorks的的I/O系统通过驱动程序描述表存储驱动系统通过驱动程

12、序描述表存储驱动 程序各个函数的入口点 在系统中安装的所有驱动程序都会在这个表中有相应 的入口点 这个表的大小是固定的,所以在系统的一次运行中能 安装有限的驱动程序 用户可以通过修改BSP的configAll.h中的宏定义 NUM_DRIVERS来确定这张表的大小(默认为来确定这张表的大小(默认为20)嵌入式操作系统驱动程序索引号0123creatremoveopenclosereadwriteioctl-xxOpen NULL xxOpen xxClose xxRead xxWrite xxIoctlt-嵌入式操作系统设备列表 系统中有一个设备列表,每个设备对应于设备列 表中的一项,每一项包

13、括设备名称和设备驱动号, 同时包括一个设备描述的结构 设备结构体(xxDEV)第一个变量是DEV_HDR 类型的变量嵌入式操作系统 设备描述符结构设备连接的列表节点DL_NODE与驱动程序无 关的部分设备名称驱动号驱动程序表索引与驱动程序相 关的部分设备的特殊 结构嵌入式操作系统 设备描述符组成一个链表形成设备列表“/pipe/abc”2管道驱动程序数据“/pipe/xyz”2管道驱动程序数据“/tyCo/0”1串口驱动程序数据嵌入式操作系统 VxWorks提供提供iosShow库支持各个表的显示库支持各个表的显示显示驱动程序描述表显示设备列表显示文件描述符表嵌入式操作系统3.4 I/O系统启

14、动流程系统启动流程 在系统的启动过程中,VxWorks按如下步骤初 始化I/O系统和加载设备: 调用iosInit初始化I/O系统 调用xxDrv初始化设备驱动程序 调用xxDevCreate创建设备(可能有若干个) 上述调用在bootConfig.c (对于bootrom)或 usrConfig.c(对于(对于VxWorks映像)的映像)的usrRoot( ) 中实现 阅读usrRoot( )嵌入式操作系统I/O系统初始化系统初始化 在usrRoot中,VxWorks首先调用iosInit初始化 I/O系统系统 iosInit函数原型:函数原型: iosInit(NUM_DRIVERS,NU

15、M_FILES,”/null”)NUM_DRIVERS时最多能安装的设备驱动程序的个数,时最多能安装的设备驱动程序的个数,configAll.h中有定义,为中有定义,为20NUM_FILES是同时能够打开的文件(设备)的最大数,是同时能够打开的文件(设备)的最大数,configAll.h中定义为中定义为50“/null”是空设备名称是空设备名称嵌入式操作系统驱动程序初始化 驱动程序的初始化由xxDrv完成,它首先调用 iosDrvInstall来向来向I/O系统注册自己:系统注册自己: iosDrvInstall的参数为的参数为7个基本个基本I/O接口的指针接口的指针 在注册成功后,iosDr

16、vInstall返回一个非0的驱动号 driver number 然后完成一些数据结构的分配,中断连接等嵌入式操作系统 在I/O系统内部,VxWorks通过驱动程序描述表来 注册驱动程序 xxDrv详细流程:详细流程: xxDrv调用调用iosDrvInstall注册自己注册自己 I/O系统在驱动程序表中寻找空闲的位置,得到表项系统在驱动程序表中寻找空闲的位置,得到表项2 I/O系统在表项系统在表项2中保存驱动程序的各个中保存驱动程序的各个I/O接口指针,接口指针, 指针0表示无此项操作。 返回表项的索引2,也就是驱动程序索引号嵌入式操作系统嵌入式操作系统 在shell下,可以通过iosDrv

17、Show显示系统驱动程 序表:嵌入式操作系统创建设备 在完成驱动程序初始化后,调用xxDevCreate函数 来创建此驱动程序服务的设备 xxDevCreate初始化该设备,填充设备信息,其设备信初始化该设备,填充设备信息,其设备信 息由函数参数传入 调用ioDevAdd向I/O系统注册 在系统内部,VxWorks通过设备列表来维护已经 注册的设备,此设备列表的数据结构为xx_DEV, 一般在驱动程序的头文件中定义嵌入式操作系统嵌入式操作系统 在shell下,通过devs或iosDevShow可以显示系统 中的设备列表及对应的驱动程序号嵌入式操作系统访问设备 用户可通过标准文件描述符来访问归入

18、I/O系统的 设备 要访问设备,首先需要调用open或creat打开设备, 返回值即文件描述符就是文件描述符表项的索引 系统根据参数中的设备名查找设备列表,找到匹 配的设备节点,根据节点信息中的驱动程序号查 找驱动程序表,从而取得驱动程序中相对应的入 口例程嵌入式操作系统 在shell下,可通过iosFdShow来显示文件描述符 表:嵌入式操作系统 设备访问流程示例(open( )):): 根据设备名搜索设备列表,找到设备节点及对应驱动 程序索引号2 在文件描述符表中取得一个未用的项3 根据驱动程序索引号调用驱动表中的xxOpen 返回驱动程序的设备号xxdev 把驱动程序索引号和设备号xxd

19、ev放入文件描述符表中 返回文件描述符表该项的索引(fd=3)嵌入式操作系统嵌入式操作系统嵌入式操作系统从设备读数据 根据fd从文件描述符表中取得驱动程序索引号和 值(xxdev),调用驱动表中的驱动号对应的 xxRead,具体的读写操作有驱动来完成,具体的读写操作有驱动来完成 读写操作完之后,用户需要调用close来关闭设备, 首先根据fd调用xxClose,之后,释放文件描述符 表中fd对应的表项嵌入式操作系统嵌入式操作系统卸载设备与驱动 VxWorks支持设备和驱动的卸载,使用支持设备和驱动的卸载,使用iosLib库库 函数iosDevDelete来卸载设备,使用iosLib库函 数io

20、sDrvRemove来卸载驱动嵌入式操作系统4、 串口驱动 串行设备是一种特殊的字符型设备,与字符设备 不同的是,串行设备的驱动程序并不是直接挂接 在I/O系统中,而是由虚拟设备ttyDrv来使用 一个完整的串口驱动设备包括具体的硬件驱动以 及与硬件无关的终端功能,并同时能够提供主机 Target Server与目标机与目标机Target Agent之间特别的之间特别的 通信机制接口串口设备必须可以在中断和轮 循两种模式下工作 在VxWorks中,上述工作由ttyDrv、tyLib和 xxDrv共同完成共同完成嵌入式操作系统嵌入式操作系统 ttyDrv是一个虚拟的驱动,在是一个虚拟的驱动,在t

21、yLib的库支持下,的库支持下, 统一管理xxDrv(硬件驱动),按照字符设备驱 动接入到I/O系统中,并提供读写缓冲区,完成各 种与硬件无关的功能 串行设备驱动程序的入口点与字符设备不同,它 的驱动程序不安装在驱动程序表中,而是通过回 调方式挂在虚拟设备ttyDrv上。ttyDrv将自身的 入口点函数挂在I/O系统上,创建设备描述符并将 其加入到设备列表中 xxDrv是具体的串行设备驱动程序,除了完成硬是具体的串行设备驱动程序,除了完成硬 件相关的操作外,还要对上一层(ttyDrv和Target Agent)提供操作接口提供操作接口嵌入式操作系统 ttyDrv的数据流的数据流嵌入式操作系统4

22、.1 ttyDrv和和tyLib ttyDrv及其支持库及其支持库tyLib作为硬件驱动与作为硬件驱动与I/O系统系统 之间的接口层,主要完成以下工作: I/O系统请求(安装驱动表中的入口以及创建设备并加系统请求(安装驱动表中的入口以及创建设备并加 入到 I/O系统的设备列表中)系统的设备列表中) 基本I/O接口:ttyOpen、ttyIoctl、tyRead、tyWrite等 调用selectLib 命令行编辑 提供数据缓冲区 根据缓冲区数据的空或满同步任务 缓冲区访问互斥嵌入式操作系统 ttyDrv库:库: tyLib库:库:嵌入式操作系统相关函数 ttyDrv():完成驱动初始化,将驱动

23、程序入口点加:完成驱动初始化,将驱动程序入口点加 入到驱动程序表中 调用iosDrvInstall()将ttyOpen()、ttyIoctl()、tyRead()、 tyWrite()安装到安装到I/O系统驱动表中系统驱动表中 ttyDevCreate:用于创建:用于创建tty设备,主要完成:设备,主要完成: 分配和初始化设备描述 调用tyDevInit初始化tyLib 初始化selectLib,建立缓冲区,建立信号量等 调用iosDevAdd()增加设备到设备列表 安装tyLib库函数tyITx和tyIRd作为xxDrv的输入和输 出回调函数 启动设备中断模式嵌入式操作系统 tyWrite(

24、):控制着一个环形缓冲区,它会将数据从用户:控制着一个环形缓冲区,它会将数据从用户 缓冲区复制到该缓冲区。如果环形缓冲区已经填满,该 函数将导致调用它的任务阻塞 xxDrv Write()tyWrite tyRead:同样控制着一个缓冲区,如果缓冲区空,函数:同样控制着一个缓冲区,如果缓冲区空,函数 会导致调用它的任务阻塞,如果缓冲区满,函数会将等 待的任务唤醒。Read()tyReadxxDrv 上述两个函数都是tyLib库中的一部分,都作为ttyDrv的 驱动程序函数入口嵌入式操作系统 ttyIoctl():响应:响应I/O系统系统ioctl()的调用。当调用它的调用。当调用它 时,它首先

25、访问是实际驱动程序所提供的 xxIoctl(),如果失败,它会继续调用,如果失败,它会继续调用tyIoctl()。 I/O系统串行设备控制过程:系统串行设备控制过程:Ioctl()ttyIoctl()xxIoctl()tyIoctl()嵌入式操作系统4.2 xxDrv xxDrv:真实的串行设备驱动程序,主要实现硬:真实的串行设备驱动程序,主要实现硬 件初始化、收发中断例程以及安装串行通道的各 个接口函数,详细实例参见”targetsrcdrvsio” 目录下的源代码,需要实现的函数如下:xxDevInit:硬件设备初始化:硬件设备初始化xxIntTx:发送中断函数:发送中断函数xxIntRc

26、v:接收中断函数:接收中断函数xxCallbackInStall:安装上层提供的回调函数:安装上层提供的回调函数(tyIRd()、tyITx())xxTxStartup:启动设备开始工作:启动设备开始工作xxIoctl:完成:完成ioctl的控制命令的控制命令xxPollOutput:poll模式输出函数模式输出函数xxPollInput:poll模式输入函数模式输入函数嵌入式操作系统 ttyDrv、tyLib、I/O系统和实际驱动程序(系统和实际驱动程序(xxDrv) 之间的关系:嵌入式操作系统4.3 串口加载流程 串口驱动是在VxWorks系统启动时被加载的。以我 们制作的pcPentium映像为例,它的相关文件的层次 如下:usrConfig.cttyDrvGeneric codesysSerialc.Implementat

温馨提示

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

最新文档

评论

0/150

提交评论