- 1、本文档共10页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
25 VxWorks 键盘驱动实验【荐】.pdf
实验 25 VxWorks 键盘驱动实验
一 实验原理
CVT-PXA270 的输入设备有很多,包括PS/2 鼠标、PS/2 键盘、触摸屏、USB 键盘、USB
鼠标以及4 X 4 扫描键盘等。本实验将介绍实验箱中 4 X 4 扫描键盘的驱动程序编写方法。
1. 接口驱动程序
任何设备驱动程序都需先通过适当的方法安装在系统中,然后才能被应用程序使用。字
符类型的设备驱动程序使用 iosDrvInstall()和 iosDevAdd()来实现驱动程序的安装。
I/0 系统将用户的 I/0 请求转换成对相应驱动程序具体操作函数的调用,通过维护一个
包括所有驱动程序操作函数的地址表来实现上述功能。通过调用I/0系统的iosDrvInstall()
可以动态安装驱动程序;该函数的参数就是 7 种基本 I/0 操作函数指针。iosDrvInstall()
函数将这些地址写入驱动程序表中的一块空闲存储区中,并返回这块存取区的编号;编号用
驱动程序号表示,可被与驱动程序相关联的设备使用。如果相应的函数指针为 0,表示驱动
程序不具备该项功能;对于非文件系统的驱动程序,close()和 delete()函数通常不起作用。
iosDrvInstall()的原型是:
int iosDrvInstall (FUNCPTR pCreate, FUNCPTR pDelete , FUNCPTR pOpen ,
FUNCPTR pClose , FUNCPTR pRead , FUNCPTR pWrite ,
FUNCPTR pIoctl);
字符设备驱动程序必须首先实现设备的 7 个标准 I/O 函数,然后通过调用
iosDrvInstall()函数将设备的 I/O 函数指针作为参数传递给系统。这时系统会在设备登记
信息表中记载这个设备及其函数指针(如图 1所示),并返回一个设备驱动号;可通过这个
设备驱动号进行后续相关操作。
create delete open close read write ioctl
0 xxCreate xxDelete xxOpen xxClose xxRead xxWrite xxIoctl
1 yyCreate yyDelete yyOpen yyClose yyRead yyWrite yyIoctl
2 newCreate newDelete newOpen newClose newRead newWrite newIoctl
3
图 1 VxWorks 系统的标准 I/O 函数
一些设备驱动程序能够为某一特殊种类设备的多个实例提供服务。例如:一个串行通信
设备的驱动程序经常可处理多个串行端口的通信工作。在 VxWorks的 I/O 系统中,给设备定
义了一种称为设备头(DEV_HDR)的数据结构,该数据结构中包括了设备名称字符串和这个
设备所使用的驱动程序的编号(iosDrvInstall()返回的整数)。I/O 系统中的所有设备的
信息都保存在一个称为“设备表”的链表结构中。该链表中的每个元素都是设备描述符,它
包括与该设备有关的数据,如设备地址、缓冲区和信号量等,而设备头则位于设备描述符的
起始部分。
当调用 iosDrvInstall()注册 I/O 函数成功后,须使用 iosDevAdd()函数将此设备加入
到 I/O 系统的设备链表中,如图 2 所示。
设备表
设备驱动程序名称 /devXX /devYY /devNEW1 /devNEW2
驱动程序编号 0 1 2 2
文档评论(0)