QNX4.25设备驱动程序的编写摘要介绍实时操作系统425下编写设备驱动程序的大体框架、底层细节以及诸多注意点。针对使用较为普遍的设备作为较为详细的描述。关键词驱动程序实时操作系统引言是一个多任务、多用户、分布式、可嵌入式符合标准的微内核的主流实时操作系统,广泛用于实时性能、开发灵活性、网络灵活性要求较高的场合,如电信系统、医疗仪器、航空航天、工业自动化、交通运输、机、信息家电等。是一个适合软件硬件定制的实时操作系统。如果你曾经试图在传统的或平台下开发设备驱动程序,那么,下开发驱动程序一定会让你受宠若惊。由于的微内核结构,下的系统进程和用户所写的进程没有什么不同,甚至没有私有的隐藏起来的以至用户不能使用的界面。正是这种结构给带来了无与伦比的可扩展性,使得在下写驱动程序如同写其它程序一般方便。设备驱动程序能够获取普通程序所能获得的任务服务。在中增加一个新的驱动程序不会影响操作系统其它程序的任何部分,环境所需的唯一改变是实现地启动新的驱动程序。当然,我们会遇到形形色色的硬件设备,某些驱动程序可能将以特殊方式控制设备的存在和配置。本文只想集中讨论下如何进入、控制设备级的通用硬件,对所有驱动程序来讲这是一个共性问题。其中,将对使用较多的设备作较为详细的叙述。以下是硬件驱动程序的编写。1探测硬件首先,需要判断设备是否存在,然后查询该设备的配置例如,设备基地址、中断号等。对于某类设备,一般会有一大相应的标准机制来判断其配置。每块设备的基地址、中断号等是编程必须的资源,例如,常用的及硬件设备。对于设备,一般由板上手工跳线设定,不言自明;对于常用的设备,这些资源会由系统自动分配,特别是添减设备,可能会发生变化。因此,在驱动程序中能够动态查找这些资源显得比较重要。对于诸如、、定时卡、板卡这类设备,对照硬件手册编写一些简单的驱动程序并不困难。如果有下驱动程序的源码,移值应该更容易一些。为了实现对总线设备的控制和管理,必须访问设备的配置空间。配置空间是一容量为256字节并具特定纪录结构的地址空间。该地址空间的结构如图1所示。425中对应的结构体定义。范文先生网收集整理每个设备具有唯一的厂商标识和设备标识,这些信息由硬件手册提供或系统启动时可以看到。下面一段代码展示了于一个给定的设备如何调用相关的函数、侦测设备的存在以及系统分配的资源。其中,标识用来支持和区分具有同样厂商标识和设备标识的几块同样的设备。从0开始,如果指定为1,将标识第二块同型号的设备。本例中,___、_值是研华的-1713采集卡,可以根据所使用的硬件填以合适的值。以根据所使用的硬件填以合适的值。___01713根据具体设备提供对应的厂商标识及设备标识#___013{,;总线号仅有一条及设备功能号;_;基地址;中断号_=0标识为零标识第一块此种型号设备_______,___,_,&,&!=_{"";_;}侦测设备中断_____,,___,_,1,&!=_{"";_;}侦测设备基地址_____,,___,_[2],1,*&!=_{"";_;}_=__;"",_;""",;_;}注意各种设备的__[],可能不尽相同,需要查看具体的硬件手册决定。2进入硬件一旦获得了系统分配给某个硬件设备的资源信息,就可以同这个设备进行通信了。至于如何做取决于需要访问的硬件资源。21资源一个进程试图进行操作,必须具有正确的权限等级。你必须是超及用户,在编译的时候加上适当参数1,以确何该进程拥有访问口的权限。若忽视这一点,该运行进程将获得一个口的权限。若忽视这一点,该运行进行将获得一个信号,表示一个非法的内存引用,并结束进程运行。现在就可以利用、、,,,0等函数,对基地址加上寄存器偏移量处的进行操作了。例如+_,0;此外,对于一些设备,其口是固定、众所皆知的,例如,一块兼容的设备,并无上述所谓基地址。通过030、034、035,可以直接进入这些的控制器。例如034,011;035,035&~080;22存储映射资源某些设备,可以通过一般的内存操作进入寄存器,这就需要获得内存基地址。为了能够获进入此类设备的寄存器,需要将其映射到驱动程序虚拟地址空间。下的技术资料描述了如何创建一个共享内存对象,然后将这个内存对象的一段内存映射到卡中,以便能...