Chinaunix首页 | 论坛 | 博客
  • 博客访问: 631877
  • 博文数量: 1008
  • 博客积分: 10
  • 博客等级: 民兵
  • 技术积分: 5175
  • 用 户 组: 普通用户
  • 注册时间: 2012-07-31 09:44
文章分类
文章存档

2012年(1008)

我的朋友

分类:

2012-08-01 11:03:30

原文地址:PCI驱动程序设计 作者:luozhiyong131

驱动描述

Linux内核中,PCI 驱动使用structpci_driver 结构来描述:

struct pci_driver {

。。。。。。。。。。。。

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);

/* Device removed (NULL if not a hot-plug capable driver) */

。。。。。。。。。。。。

}


注册驱动

注册PCI 驱动使用如下函数:

pci_register_driver(struct pci_driver *drv)

使能设备

PCI 驱动使用PCI 设备的任何资源(I/O 区或者中断)之前驱动必须调用如下函数来使能设备:

int pci_enable_device(struct pci_dev *dev)


获取基地址

一个PCI设备最多可以实现6个地址区域,大多数PCI设备在这些区域实现I/O寄存器。Linux提供了一组函数来获取这些区间的基地址:

pci_resource_start(struct pci_dev *dev, int bar)

返回指定区域的起始地址,这个区域通过参数bar 指定,范围从0-5,表示6PCI区域中的一个。

pci_resource_end(struct pci_dev *dev, int bar)

返回指定区域的末地址。


中断

中断号存放于配置寄存器PCI_INTERRUPT_LINE驱动不必去检查它因为从PCI_INTERRUPT_LINE中找到的值保证是正确的。如果设备不支持中断寄存器PCI_INTERRUPT_PIN 中的值是0,否则它是非零的值。但因为驱动开发者通常知道设备是否是支持终端,所以常常不需要访问PCI_INTERRUPT_PIN

阅读(132) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~