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请求,并 对设备进行操作 为满足标准设备处理的需要,i/o系统通常也提 供一些高级的例程库,便于

2、实现设备的标准通 信协议,嵌入式操作系统,vxworks i/o系统基本结构,i/o 系统,open(),create() read() write() close() ioctl(),remove(),字符设备 驱动程序,文件系统,dos,raw,块设备块设备 驱动程序,设备c设备c,设备d设备d,设备e设备c,设备 d设备f,设备设备g,设备设备h,设备,设备a设备a,设备b设备b,应 应 用 用 程 程 序 序,tcp/ip dos,mux 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),嵌入式操作系统,2.1

5、基本i/o, 基本i/o接口共有7个,应用程序通过这些接口来 访问设备,设备驱动程序也遵循该接口规范,提 供具体的实现。它由iolib库提供支持,嵌入式操作系统,接口名称,open,creat,read,write,ioctl,close,remove,函数原形,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系统和设备驱动程序之间的接口模型就是字符 设备驱动程序接口,嵌入式操作系统,应用程序、i/o系统和字

8、符设备驱动程序的关系,应用程序,i/o usr interface i/o internal interface,i/o system,字符设备 驱动程序接口,char driver1,char driver2,char driver3,dev1,dev2,dev3,嵌入式操作系统,3.1 i/o系统提供内部应用库函数(ioslib),嵌入式操作系统,setup code,application,open creat close read write ioctl,iolib,iosdrvinstall,iosdevadd,ioslib,xxdrv() xxdevcreate() xxopen(

9、) xxclose()xxread() xxwrite() xxioctl(),xxdrv,嵌入式操作系统,3.2 驱动接口函数模版,嵌入式操作系统,嵌入式操作系统,嵌入式操作系统,嵌入式操作系统,3.3 与i/o系统相关的几张表, 文件描述符表(fd_table) 驱动程序描述表(driver_table) 设备列表(device_list),嵌入式操作系统,文件描述符表(fd_table), vxworks下大多数的i/o设备都被当作文件来存 取, 此处所说的文件和文件系统没有必然的联系,只是 i/o系统中的操作对象, 文件可能指一个物理设备,或一个任务管道, 或文件系统中的一个文件,嵌入

10、式操作系统, 在基本的i/o调用中,文件通过文件描述符(fd) 来引用, 文件描述符是open或creat函数返回的正整数 其他的i/o操作以文件描述符作为参数来制定对应的文 件 当一个文件被打开后,一个文件描述符被分配并返回, 当文件被关闭后,文件描述符被释放, 一个文件描述符并不属于某个特殊任务,而是属 于i/o系统的全局句柄,嵌入式操作系统, vxworks在内部维护了一张文件描述符表,文件 描述符是这张表的索引 文件描述符表是i/o系统将文件描述符与驱动程序、 设备对应起来的手段,如下图:,文件描述符,3,4,5,驱动程序索引号,2,5,5,驱动程序指定的设备号,0,0,1,嵌入式操作

11、系统, 文件描述符表大小是固定的,总共有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),嵌入式操作系统,驱动程序 索引号,0,1,2,3,creat,remove,open,close,read,write,ioctl,-,-,-,-,-,-,-,-,-,-,-,-,-,-,xxopen null xxopen xxclose xxread xxwrite xxioctlt,-,-,-,-,-,-,-,嵌入式操作系统,设备列表, 系统中有一个设备列表,每个设备对应于设备列 表中的一项,每一项包括设备名称和设备驱动号, 同时包括一个设备描述的结构 设备结构体(xxdev)第一个变

13、量是dev_hdr 类型的变量,嵌入式操作系统, 设备描述符结构,设备连接的列表节点,dl_node,与驱动程序无 关的部分,设备名称,驱动号,驱动程序表索引,与驱动程序相 关的部分,设备的特殊 结构,嵌入式操作系统, 设备描述符组成一个链表形成设备列表,“/pipe/abc”,2,管道驱动 程序数据,“/pipe/xyz”,2,管道驱动 程序数据,“/tyco/0”,1,串口驱动 程序数据,嵌入式操作系统, vxworks提供iosshow库支持各个表的显示,显示驱动程序描述表,显示设备列表,显示文件描述符表,嵌入式操作系统,3.4 i/o系统启动流程, 在系统的启动过程中,vxworks按

14、如下步骤初 始化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,num_files,”/null”),num_drivers时最多能安装的设备驱动程序的

15、个数, configall.h中有定义,为20 num_files是同时能够打开的文件(设备)的最大数, configall.h中定义为50 “/null”是空设备名称,嵌入式操作系统,驱动程序初始化, 驱动程序的初始化由xxdrv完成,它首先调用 iosdrvinstall来向i/o系统注册自己:,iosdrvinstall的参数为7个基本i/o接口的指针 在注册成功后,iosdrvinstall返回一个非0的驱动号 driver number 然后完成一些数据结构的分配,中断连接等, ,嵌入式操作系统, 在i/o系统内部,vxworks通过驱动程序描述表来 注册驱动程序, xxdrv详细流

16、程:, xxdrv调用iosdrvinstall注册自己 i/o系统在驱动程序表中寻找空闲的位置,得到表项2 i/o系统在表项2中保存驱动程序的各个i/o接口指针, 指针0表示无此项操作。 返回表项的索引2,也就是驱动程序索引号,嵌入式操作系统,嵌入式操作系统, 在shell下,可以通过iosdrvshow显示系统驱动程 序表:,嵌入式操作系统,创建设备, 在完成驱动程序初始化后,调用xxdevcreate函数 来创建此驱动程序服务的设备, xxdevcreate初始化该设备,填充设备信息,其设备信 息由函数参数传入 调用iodevadd向i/o系统注册, 在系统内部,vxworks通过设备列

17、表来维护已经 注册的设备,此设备列表的数据结构为xx_dev, 一般在驱动程序的头文件中定义,嵌入式操作系统,嵌入式操作系统, 在shell下,通过devs或iosdevshow可以显示系统 中的设备列表及对应的驱动程序号,嵌入式操作系统,访问设备, 用户可通过标准文件描述符来访问归入i/o系统的 设备 要访问设备,首先需要调用open或creat打开设备, 返回值即文件描述符就是文件描述符表项的索引 系统根据参数中的设备名查找设备列表,找到匹 配的设备节点,根据节点信息中的驱动程序号查 找驱动程序表,从而取得驱动程序中相对应的入 口例程,嵌入式操作系统, 在shell下,可通过iosfdsh

18、ow来显示文件描述符 表:,嵌入式操作系统, 设备访问流程示例(open( )):, 根据设备名搜索设备列表,找到设备节点及对应驱动 程序索引号2 在文件描述符表中取得一个未用的项3 根据驱动程序索引号调用驱动表中的xxopen 返回驱动程序的设备号xxdev 把驱动程序索引号和设备号xxdev放入文件描述符表中 返回文件描述符表该项的索引(fd=3),嵌入式操作系统,嵌入式操作系统,嵌入式操作系统,从设备读数据, 根据fd从文件描述符表中取得驱动程序索引号和 值(xxdev),调用驱动表中的驱动号对应的 xxread,具体的读写操作有驱动来完成 读写操作完之后,用户需要调用close来关闭设

19、备, 首先根据fd调用xxclose,之后,释放文件描述符 表中fd对应的表项,嵌入式操作系统,嵌入式操作系统,卸载设备与驱动, vxworks支持设备和驱动的卸载,使用ioslib库 函数iosdevdelete来卸载设备,使用ioslib库函 数iosdrvremove来卸载驱动,嵌入式操作系统,4、 串口驱动, 串行设备是一种特殊的字符型设备,与字符设备 不同的是,串行设备的驱动程序并不是直接挂接 在i/o系统中,而是由虚拟设备ttydrv来使用 一个完整的串口驱动设备包括具体的硬件驱动以 及与硬件无关的终端功能,并同时能够提供主机 target server与目标机target age

20、nt之间特别的 通信机制接口串口设备必须可以在中断和轮 循两种模式下工作 在vxworks中,上述工作由ttydrv、tylib和 xxdrv共同完成,嵌入式操作系统,嵌入式操作系统, ttydrv是一个虚拟的驱动,在tylib的库支持下, 统一管理xxdrv(硬件驱动),按照字符设备驱 动接入到i/o系统中,并提供读写缓冲区,完成各 种与硬件无关的功能 串行设备驱动程序的入口点与字符设备不同,它 的驱动程序不安装在驱动程序表中,而是通过回 调方式挂在虚拟设备ttydrv上。ttydrv将自身的 入口点函数挂在i/o系统上,创建设备描述符并将 其加入到设备列表中 xxdrv是具体的串行设备驱动

21、程序,除了完成硬 件相关的操作外,还要对上一层(ttydrv和target agent)提供操作接口,嵌入式操作系统, ttydrv的数据流,嵌入式操作系统,4.1 ttydrv和tylib, ttydrv及其支持库tylib作为硬件驱动与i/o系统 之间的接口层,主要完成以下工作:, i/o系统请求(安装驱动表中的入口以及创建设备并加 入到 i/o系统的设备列表中) 基本i/o接口:ttyopen、ttyioctl、tyread、tywrite等 调用selectlib 命令行编辑 提供数据缓冲区 根据缓冲区数据的空或满同步任务 缓冲区访问互斥,嵌入式操作系统, ttydrv库:, tyli

22、b库:,嵌入式操作系统,相关函数, ttydrv():完成驱动初始化,将驱动程序入口点加 入到驱动程序表中, 调用iosdrvinstall()将ttyopen()、ttyioctl()、tyread()、 tywrite()安装到i/o系统驱动表中, ttydevcreate:用于创建tty设备,主要完成:,分配和初始化设备描述 调用tydevinit初始化tylib 初始化selectlib,建立缓冲区,建立信号量等 调用iosdevadd()增加设备到设备列表 安装tylib库函数tyitx和tyird作为xxdrv的输入和输 出回调函数 启动设备中断模式, ,嵌入式操作系统, tywr

23、ite():控制着一个环形缓冲区,它会将数据从用户 缓冲区复制到该缓冲区。如果环形缓冲区已经填满,该 函数将导致调用它的任务阻塞 xxdrv write()tywrite, tyread:同样控制着一个缓冲区,如果缓冲区空,函数 会导致调用它的任务阻塞,如果缓冲区满,函数会将等 待的任务唤醒。,read(),tyread,xxdrv, 上述两个函数都是tylib库中的一部分,都作为ttydrv的 驱动程序函数入口,嵌入式操作系统, ttyioctl():响应i/o系统ioctl()的调用。当调用它 时,它首先访问是实际驱动程序所提供的 xxioctl(),如果失败,它会继续调用tyioctl(

24、)。 i/o系统串行设备控制过程:,ioctl(),ttyioctl(),xxioctl(),tyioctl(),嵌入式操作系统,4.2 xxdrv, xxdrv:真实的串行设备驱动程序,主要实现硬 件初始化、收发中断例程以及安装串行通道的各 个接口函数,详细实例参见”targetsrcdrvsio” 目录下的源代码,需要实现的函数如下:, , ,xxdevinit:硬件设备初始化 xxinttx:发送中断函数 xxintrcv:接收中断函数 xxcallbackinstall:安装上层提供的回调函数 (tyird()、tyitx()) xxtxstartup:启动设备开始工作 xxioctl:完成ioctl的控制命令 xxpolloutput:poll模式输出函数 xxpollinput:poll模式输入函数,嵌入式操作系统, ttydrv、tylib、i/o系统和实际驱动程序(xxdrv) 之间的关系:,嵌入式操作系统,4.3 串口加载流程, 串口驱动是在vxworks系统启动时被加载的。以我 们制作的pcpentium映像为例,它的相关文件的层次 如下:,usrconfig.c,ttydrv,generic code,sysserialc.,implementation specific code,i8250serial.c,device specific

温馨提示

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

评论

0/150

提交评论