PCI设备Windows NT平台驱动程序设计

本文深入探讨了在Windows NT操作系统中为PCI设备设计驱动程序的技术细节,包括如何利用DDK(驱动开发工具包)进行开发,理解必要的数据结构,以及处理存储和I/O操作。内容涵盖了驱动程序的架构、注册过程、中断处理和设备枚举等关键步骤。
摘要由CSDN通过智能技术生成

引言
在设计和使用PCI设备时,经常要在PC机的软件中访问和控制硬件设备,但Windows操作系统 (Windows NT、Windows2000、WindowsXP)为了保证系统的安全性、稳定性和可移植性,对应用程序访问硬件资源加以限制,这就要求设计设备驱动程 序以实现PC机的软件对PCI设备的访问。
内核(Kernel)模式的驱动程序可以应用于WINDOWS NT和WINDOWS 2000的操作系统中。它区别于WDM(Win32 Driver Model)模型,主要不支持即插即用,但对于编程的思想二者基本上一致,对于本文所述的DMA编程的方法在WDM模式的驱动程序中一样适合。
本 文通过现有最常见的AMCC公司生产的AMCC S5933 PCI 控制芯片为例说明在WINDOWS NT平台下如何编写设备驱动程序以实现DMA传输方式。本文对基本的驱动程序设计技术不作详细的说明,重点介绍PCI设备驱动程序开发的相关技术与实现方 法,以及用户接口程序的设计与实现技术。
1 NT 平台驱动程序模式及开发工具
设备驱动程序是指管理某个外围设备的一段代码,驱动程序不会独立地存在,而是操作系统的一部分。通过设备驱动程序,多个进程可以同时使用这些资源,从而可以实现多进程并行运行。在本文中,将调用设备驱动程序的PC机程序称为用户程序。
Intel 80386以上的微处理器有4个优先级别:0级、1级、2级和3级。Windows NT使用了一个简化的模型描述硬件特权级,然后这个模型映射到指定CPU上可用的特权检查机制,即内核模式和用户模式。内核模式对应于Intel系统的0 级,可以执行特权级指令,对任何I/O设备有全部的访问权,还能够访问任何虚地址和控制虚拟内存硬件。用户模式对应于Intel系统的3级环,用户程序在 该模式下运行,对硬件的访问操作受到系统的限制。
开发设备驱动采用的工具包括微软为驱动开发提供的设备驱动开发包(Device Driver Kit,DDK)。DDK开发包提供了设备开发的帮助文档,编译需要的头文件和库文件,调试工具和范例程序。基于NT DDK使用C语言编写,因此我们使用VC++6.0作为编辑与编译工具。内核调试工具选用了Numega公司的产品SoftICE。
2 PCI 设备驱动开发的特点
2.1PCI 配置空间
每个PCI设备都有自己的配置空间,用于支持即插即用,使之满足现行的系统配置结构。下面对PCI配置空间做一下简要介绍。
配 置空间是一容量为256字节并具有特定结构的地址空间。这个空间又分为头标区和设备有关区两部分。头标区的长度是64字节,每个设备都必须配置该区的寄存 器。该区中的各个字段用来唯一地识别设备。其余的192字节因设备而异。配置空间的头标区64个字节的使用情况如图1示。
为了实现即插即用,系统可根据硬件资源的使用情况,为PCI设备分配新的资源。因此编写设备驱动程序重点是获得基址寄存器(Base Address)和中断干线寄存器的内容。配置空间共有六个基址寄存器和一个中断干线寄存器,具体用法如下:
PCI Base Address 0寄存器:系统利用此寄存器为PCI接口芯片的配置寄存器分配一段PCI地址空间,通过这段地址我们可以以内存映射的形式访问PCI接口芯片的配置寄存器。
PCI Base Address 1寄存器:系统利用此寄存器为PCI接口芯片的配置寄存器分配一段PCI地址空间,通过这段地址我们可以以I/O的形式访问PCI接口芯片的配置寄存器。
PCI Base Address 2、3、4、5寄存器:系统BIOS利用这些寄存器分配PCI地址空间以支持PCI接口芯片的局部配置寄存器0、1、2、3的访问。
在所有基址寄存器中,第0位均为只读位,表示这段地址映射到存储器空间还是I/O空间,如果是“1”表示映射到I/O空间,如果是“0”则表示映射到存储器空间。
中断干线寄存器(Interrupt Line):用于说明中断线的连接情况,这个寄存器的值与标准8259的IRQ编号(0~15)对应。
2.2 设备初始化
PCI设备驱动程序要完成识别PCI器件、寻找PCI硬件的资源和对 PCI器件中断的服务。在驱动程序初始化过程中,使用HalGetBusData()函数完成寻找PCI设备的工作。在初始化过程中,使用器件识别号 (Device ID)和厂商识别号(Vendor ID),通过遍历总线上的所有设备,寻找到指定的PCI设备&#
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值