Chinaunix首页 | 论坛 | 博客
  • 博客访问: 7563414
  • 博文数量: 961
  • 博客积分: 15795
  • 博客等级: 上将
  • 技术积分: 16612
  • 用 户 组: 普通用户
  • 注册时间: 2010-08-07 14:23
文章分类

全部博文(961)

文章存档

2016年(1)

2015年(61)

2014年(41)

2013年(51)

2012年(235)

2011年(391)

2010年(181)

分类: 嵌入式

2012-01-12 15:32:04

驱动描述

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

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