新闻中心

EEPW首页>模拟技术>设计应用> PCI驱动程序开发实例(1)

PCI驱动程序开发实例(1)

作者: 时间:2013-09-22 来源:网络 收藏
0px; WORD-SPACING: 0px; FONT: 14px/25px 宋体, arial; TEXT-TRANSFORM: none; COLOR: rgb(0,0,0); TEXT-INDENT: 0px; PADDING-TOP: 0px; WHITE-SPACE: normal; LETTER-SPACING: normal; BACKGROUND-COLOR: rgb(255,255,255); orphans: 2; widows: 2; webkit-text-size-adjust: auto; webkit-text-stroke-width: 0px">  PCI接口中包括3类寄存器:

  (1)PCI配置寄存器:只能被外部PCI主机(Host)访问。

  这些寄存器提供了PCI接口的配置信息,只能由外部主机访问,可以从外部E2PROM自动加载,或者直接设置为默认值。

  (2)PCI I/O寄存器:只能被外部PCI主机(Host)访问。

  PCI I/O寄存器只能由PCI主机通过基址l寄存器(Basel Address Register)或基址2寄存器(Base2Address Register)的空间映射进行访问。

  (3)映射在DSP外设空间的PCI寄存器,用于DSP控制PCI接口可以由外部PCI主机访问,也可以由DSP访问。

  2 驱动程序设计

  设备驱动程序提供连接到计算机硬件的软件接口。它是操作系统的信任部分,由I/O管理器(I/O Manag-er)管理和调动。

  用户应用程序以一种规范的方式访问硬件,而不必考虑如何控制硬件。驱动程序总是使设备看起来像一个文件,可以打开设备的一个句柄,然后应用程序可以在设备句柄最后关闭之前向驱动程序发出读写请求。

  I/O管理器每收到一个来自用户应用程序的请求就创建一个I/O请求包(IRP)的数据结构,并将其作为参数传递给驱动程序。

  2.1 设备驱动程序的组成部分

  可以把一个完整的驱动程序看作是一个容器,它包含许多例程。当操作系统遇到一个I/O请求包(I/ORequest Packet,IRP)时,它就调用这个容器中的例程来执行该IRP的各种操作。驱动程序包含以下几个基本例程:

  (1)DriverEntry例程:它是驱动程序的初始化入口点,必须叫作DriverEntry。它负责驱动程序的初始化,用来初始化驱动程序范围内的数据结构和资源。它主要有以下三个功能:设置Adddevice,Unload和其他例程的入口指针;可以从注册表中获取一些需要的信息以初始化驱动程序;初始化其他的在驱动程序范围内的数据结构和资源。所有的驱动程序都必须包含它。当装载驱动程序时,PnP管理器为每个驱动程序调用一次 DriverEntry例程。

  (2)AddDevice例程:在驱动程序初始化以后,PnP管理器调用驱动程序的Add Device例程来初始化由该驱动程序所控制的设备。在Add Device例程中,驱动程序创建一个设备对象作为目标设备,并将设备对象附着到设备堆栈中。

  (3)PnP例程:PCI设备都是即插即用设备,PCI设备的驱动程序必须具备PnP例程。PnP管理器使用PnP例程来管理驱动程序启动、停止和删除设备。

  (4)分发例程(Dispatch):用于管理驱动程序与应用程序之间的通信,从而实现应用程序控制PCI设备的目的。

  严格地说,驱动程序中只有“初始化”模块Drivet-Entry例程是一定不能少的。在实际工作中,所有驱动程序都有分发例程处理用户I/O请求。


上一页 1 2 下一页

关键词:PCI驱动程序开发

评论


相关推荐

技术专区

关闭