第十二章:PCI驱动程序

原创 2012年03月30日 14:35:10

PCIperipheral component interconnect外围设备互联。

PCI接口

时钟频率一般是25MHz或者33MHz,最新的实现达到了66MHz甚至133MHz,配备32位数据总线。

PCI寻址

每一个PCI设备由一个总线编号、一个设备编号及一个功能编号来标识。

PCI规范允许单个系统拥有高达256个总线,每个总线可以支持32个设备,每个设备最多有八种功能。每种功能都可以在硬件级由一个16位的地址来标识。

每个外设板的硬件电路对如下三种地址空间的查询进行应答:内存位置,I/O端口和配置寄存器。前两种地址空间由同一PCI总线上的所有设备共享,配置查询每次只对一个槽位寻址,因此他们不会冲突。

配置寄存器以及初始化

某些PCI寄存器始终是小头的。

用三个或者五个PCI寄存器可以标识一个设备:vendorIDdeviceIDclasssubsystem vendorID以及subsystem deviceID

struct pci_device_id结构体用来定义该驱动程序支持的不同类型的PCI设备列表。其中包括下字段:

__u32 vendor; __u32 device; __32u subvendor; __32u subdevice; __32u class; __32u class_mask;

kernel_ulong_t drive_data;

前六个字段指定设备PCI厂商和设备ID,子系统厂商和子系统设备ID以及支持的一种PCI类设备。第七个字段用来保存PCI驱动程序用于区分不同设备的信息。

可以使用下面宏来辅助struct pci_device_id结构体的初始化:

PCI_DEVICE(vendor, device);

PCI_DEVICE_CLASS(device_class, device_class_mask);

一般创建一个struct pci_device_id的一个结构体数组,该数组用来通知用户空间这个特定的驱动程序支持什么设备。

MODULE_DEVICE_TABLE

这个宏用来将pci_device_id结构体导出到用户空间,使热插拔和模块装载系统知道什么模块针对什么硬件设备。例子:

MODULE_DEVICE_TABLE(pci, i810_ids);

注册PCI驱动程序

为了正确注册到内核,所有的PCI驱动程序必须创建主要的结构体struct pci_drive结构体。该结构体中由许多回调函数以及字段,向PCI核心描述了PCI驱动程序。

const char *name;

const struct pci_device_id *id_table;

int (*probe)(struct pci_dev *dev, const struct pci_device_id *id);

void (*remove)(struct pci_dev *dev);

int (*suspend)(struct pci_dev *dev, u32 state);

int (*resume)(struct pci_dev *dev);

注册函数:

pci_register_driver(&pci_drive);

pci_module_init(struct pci_driver *drv);

移除函数:

pci_unregister_drive(&pci_drive);

激活PCI设备

pci_enable_deive(struct pci_dev *dev);

访问配置空间系列函数详见书

PCI中断详见书

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

利用WinDriver开发PCI设备驱动程序

摘要     WinDriver是Jungo公司出版的一个设备驱动程序开发组件,它可以大大加速PCI设备驱动程序的开发。作者在实际的项目中采用了WinDriver来开发设备驱动程序,取得了相当好的运...
  • lindyl
  • lindyl
  • 2013-10-12 12:00
  • 2595

PCI驱动程序实现

1、数据结构: PCI设备上有三种地址空间:PCI的I/O空间、PCI的存储空间和PCI的配置空间。CPU可以访问PCI设备上的所有地址空间,其中I/O空间和存储空间提供给设备驱动程...

PCI总线驱动程序设计

PCI总线驱动程序设计 总线概念          总线是一种传输信号的信道;总线是连接一个或多个导体的电气连线。总线由电气接口和编程接口组成。 PCI 是PeripheralComponent...

LDD3读书笔记(第17章 PCI设备驱动程序)

#include     这个头文件包含PCI寄存器的符号名称,以及若干厂商和设备ID值。 struct pci_dev;     代表内核中PCI设备的结构体。 struct pci_dr...

Linux下PCI设备驱动程序开发

一、PCI总线系统体系结构PCI是外围设备互连(Peripheral Component Interconnect)的简称,作为一种通用的总线接口标准,它在目前的计算机系统中得到了非常广泛的应用。PC...
  • md521
  • md521
  • 2011-01-03 09:32
  • 346

Windows下PCI9054驱动程序开发环境搭建及常见问题解决

Windows下PCI9054驱动程序开发环境搭建及常见问题解决 1开发环境配置 Windows XP,英文原版Visual C++6.0,WinXP_DDK, DriverStudio 3.2 ...

Linux下PCI设备驱动程序开发

简介: PCI是一种广泛采用的总线标准,它提供了许多优于其它总线标准(如EISA)的新特性,目前已经成为计算机系统中应用最为广泛,并且最为通用的总线标准。Linux的内核能较好地支持PCI总线,本文以...
  • md521
  • md521
  • 2011-02-20 10:08
  • 354

Linux设备驱动程序——PCI相关知识的学习

PCI相关的知识的学习 一、首先了解一下PCI相关的一些基础知识: PCI总线的结构: PCI总线结构是一种层次型的体系结构,在这个结构体中PCI桥设备占据重要的地位。将父总线和子总线连接在一...

WINDOWS下PCI接口卡WDM驱动程序的DMA编程技术

本文主要讨论了在Windows环境下开发PCI接口卡DMA应用的WDM编程技术,并给出了一个应用DriverWorks和VC++开发的实例程序代码。关键词:Windows、PCI总线、WDM驱动程序、...

WINDOWS下PCI接口卡WDM驱动程序的DMA编程技术1

摘要:       本文主要讨论了在Windows环境下开发PCI接口卡DMA应用的WDM编程技术,并给出了一个应用DriverWorks和VC++开发的实例程序代码。 关键词:Windo...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)