LinuxPCI设备驱动的实现思路与思想-创新互联

概述

1、PCI设备一般都具有双重身份,一方面作为PCI设备注册到Linux内核,另一方面,作为字符设备或者块设备,或者网络设备注册到Linux内核,所以,在看PCI设备时一定要注意到这点。

创新互联公司从2013年成立,是专业互联网技术服务公司,拥有项目成都网站制作、网站建设、外贸网站建设网站策划,项目实施与项目整合能力。我们以让每一个梦想脱颖而出为使命,1280元连山做网站,已为上家服务,为连山各地企业和个人服务,联系电话:18980820575

2、

一、PCI接口规范

1、PCI接口的配置空间

PCI总线规范定义的配置空间总长度为256个字节,配置信息按一定的顺序和大小依次存放。前64个字节的配置空间称为配置头,对于所有的设备都一样,配置头的主要功能是用来识别设备、定义主机访问PCI卡的方式(I/O访问或者存储器访问,还有中断信息)。其余的192个字节称为本地配置空间,主要定义卡上局部总线的特性、本地空间基地址及范围等。

配置空间中最重要的有:

Vendor  ID:厂商ID。知名的设备厂商的ID。FFFFh是一个非法厂商ID,可它来判断PCI设备是否存在。
Device  ID:设备ID。某厂商生产的设备的ID。操作系统就是凭着 Vendor ID和Device ID 找到对应驱动程序的。
Class Code:类代码。共三字节,分别是 类代码、子类代码、编程接口。类代码不仅用于区分设备类型,还是编程接口的规范,这就是为什么会有通用驱动程序。
IRQ   Line:IRQ编号。PC机以前是靠两片8259芯片来管理16个硬件中断。现在为了支持对称多处理器,有了APIC(高级可编程中断控制器),它支持管理24个中断。
IRQ    Pin:中断引脚。PCI有4个中断引脚,该寄存器表明该设备连接的是哪个引脚。

2、PCI的中断实现

PCI的中断有两种实现方式,一种是INTx管脚拉电平的方式,一种是通过MSI-X内部消息的方式。

3、PCI和PCIE的区别

PCIE相当于把交换机引入到PCI设备中,PCI设备是点到点,PCIE引入lan的概念,可以实现高速,双向通道。

4、PCI寻址

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

5、查看当前系统上的pci设备

# lspci 显示设备上的pci设备

#显示设备上pci设备的pci号

   #

6、PCI设备在Linux中的描述

所有的pci设备,在Linux中都用pci_dev结构体进行描述,由于一个PCI接口卡上可能包含多个功能模块,每个功能被当作一个独立的逻辑设备,因此,

每一个PCI 功能,即PCI 逻辑设备都唯一地对应一个pci_dev设备描述符。

7、PCI设备驱动描述,使用struct pci_driver进行描述。

二、PCI设备驱动初始化

1、初始化PCI设备结构体 intel 82599 万兆网卡

文件:ixgbe_main.c (linux-4.6drivers etethernetintelixgbe)

pci 设备的编码如下:

2、注册PCI设备到内核 pci_register_driver

文件:ixgbe_main.c (linux-4.6drivers etethernetintelixgbe)

3、激活PCI设备 pci_enable_device_mem()

一般情况下,在pci设备的probe函数中,在驱动程序可以访问pci设备的任何设备资源之前,驱动程序必须调用pci_enable_device_mem()函数。

文件:ixgbe_main.c (linux-4.6drivers etethernetintelixgbe)

4、PCI设备申请存储资源 pci_request_selected_regions

文件:同上

5、申请成总线主DMA模式 pci_set_master,文件同上

6、一般情况下,都是在设备驱动的Probe函数中,完成PCI设备驱动的初始化,以及作为字符设备,块设备,或者网络设备的注册与初始化功能。


文章题目:LinuxPCI设备驱动的实现思路与思想-创新互联
文章来源:http://myzitong.com/article/hsppj.html