Linux PCI驱动

1、体系结构

1)PCI桥 -- 只有PCI桥才能生成PCI总线

2、PCI设备寻址:

每个PCI设备都由一个总线号、一个设备号和一个功能号组成。

一个系统最多拥有256条总线,每条总线最多带32个设备,但每个设备可以是最多8个功能的多功能板

/proc/iomem描述系统中所有的设备I/O在内存地址空间上的映射,

例如,PCI设备:40000000-400003ff:0000:00:1f.1

其中:

40000000-400003ff:代表设备所映射的内存空间地址

0000:00:1f.1:PCI外设的地址的地址,以冒号和逗号分隔为4个部分:

第一个16位表示域,第二个8位表示一个总线号,第三个5位表示一个设备号,最后三位表示功能

每个PCI设备都有一组固定格式的配置寄存器,即配置寄存器,配置寄存器由Linux内核中的PCI初始化代码与驱动程序共同使用,

内核在启动时负责对配置寄存器进行初始化,包括设备中断号以及I/O基址等

00H-01H: Vendor ID 制造商标识

02H-03H: Device ID 设备标识

04H-05H: Command 命令寄存器

06H-07H: Status 状态寄存器

08H : Revision ID 版本识别号寄存器

09H-0bH: Class Code 分类代码寄存器

0CH : Cache Line Size Cache行长度寄存器

0dH : Latency Timer 主设备延迟事件寄存器

0eH : Header Type 头标类型寄存器

0fH : Bulit-in-teset Register 自测试寄存器

10H-13H: Base Address Register 0 基地址寄存器0

14H-17H: Base Address Register 1 基地址寄存器1

18H-1bH: Base Address Register 2 基地址寄存器2

1CH-1FH: Base Address Register 3 基地址寄存器3

20H-23H: Base Address Register 4 基地址寄存器4

24H-27H: Base Address Register 5 基地址寄存器5

28H-2bH: Cardbus CLS Pointer 设备总线CIS指针寄存器

2cH-2dH: Subsystem Vendor ID 子设备制造商标识

2eH-2fH: Subsystem Device ID 子设备标识

30H-33H: Expasion ROM Base Address 扩展ROM基地址

34H-3bH: 保留

3cH : Interrupt Line 中断线寄存器

3dH : Interrupt Pin 中断引脚寄存器

3eH : Min_Gnt 最小授权寄存器

3fH : Max_Lat 最大延迟寄存器

3、Linux PCI驱动

使用struct pci_driver结构来描述

struct pci_driver

{

const struct pci_device_id *id_table;

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

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

};

//注册驱动

pci_register_driver(struct pci_dev *dev);

//使能PCI设备,在PCI驱动使用PCI设备的任何资源(I/O或者中断)之前,需要使能设备

int pci_enable_device(struct pci_dev *dev);

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

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

pci_resource_start(struct pci_dev*dev,int bar)

//返回指定区域的末地址

pci_resource_end(strcut pci_dev*dev,int bar)

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值