linux 查看 pci 设备驱动,如何写linux pci设备驱动程序

news/2024/11/15 7:26:10/

PCI总线应用领域及其广泛并且令人惊奇。不同的pci设备有不同的需求以及不同的问题。因此,在linux内核中pci层支持就非常重要啦。本文档就是想为驱动程序设计开发人员解决pci处理中的各种问题。

0.Pci设备驱动程序的结构

现在有两种风格的的pci驱动程序结构:新风格的驱动(即让pci层来做大量设备探测

工作并且支持热插拔功能)和旧风格的驱动(即由驱动程序自己探测设备)。除非你有很好的理由,否则就不要用旧风格写驱动程序。当驱动程序找到所驱动的设备后,将执行以下步骤:

启用设备

访问设备配置空间

检测设备资源(如基地址和中断号)

分配设备资源

与设备通讯

下文将论述以上大部分步骤,其余部分请参考,它有不错的注释。

如果没有配置pci子系统(即CONFIG_PCI没有置位),以下介绍的大部分函数都被定义为内联函数,它们要么是空的,要么返回对应的错误代码以避免在驱动中出现过多的条件宏ifdefs。

1.新风格的驱动程序

新风格的驱动程序只是在初始化时调用pci_register_driver,调用时使用一个指向struct pci_driver的结构指针。该指针包含以下几个分量:

name驱动程序名称

id_table指向一个与驱动程序相关的设备ID表的指针。大多数驱动程序应当用MODULE_DEVICE_TABLE(pci,…)将该设备ID表导出。在调用prob( )时设成NULL以让系统检测到所有的pci设备。

probe指向设备检测函数prob( )的指针。该函数将在pci设备ID与设备ID表匹配且还没有被其它驱动程序处理时(一般在对已存在的设备执行pci_register_driver或以后又有新设备插入时)被调用。调用时传入一个指向struct pci_dri


http://www.ppmy.cn/news/274643.html

相关文章

linux 内核PCI驱动总结记录

1. 介绍 Peripheral ComponentInterconnect (PCI,外围设备互联)。总线由电气接口、编程接口组成。主要讨论编程接口。最常用的总线,内核支持最好的总线。ISA裸金属总线,电子爱好者偏爱。 2. PCI的特点 是一种完整的规范,定义…

linux驱动程序之PCI驱动程序设计

文章目录 PCI驱动描述PCI驱动注册使能PCI设备获取PCI配置寄存器基地址中断部分代码 PCI驱动描述 在linux内核中,PCI驱动使用 struct pic_driver 结构来描述: struct pci_driver {/*以上还有很多成员*///id_table 中包含了PCI设备的相关信息const struc…

PCI驱动编程

一、字符设备和块设备 Linux抽象了对硬件的处理,所有的硬件设备都可以像普通文件一样来看待:它们可以使用和操作文件相同的、标准的系统调用接口来完成打开、关闭、读写和I/O控制操作,而驱动程序的主要任务也就是要实现这些系统调用函数。Li…

Linux设备驱动程序学习(十)——PCI驱动程序

前面介绍的是最底层的硬件控制,这部分将介绍高级总线架构的一些综述,总线由电气接口和编程接口够成。下面将重点介绍PCI总线的编程接口以及对应的内核函数。 PCI(外围设备互联)接口 PCI总线是当今普遍使用在桌面以及更大型计算机…

dpdk pci驱动探测

上一篇文章已经介绍了pci设备的背景知识, 现在我们来分析下pci设备是如何探测到支持的驱动,进而与驱动进行关联;pci与驱动的解除绑定;pci设备与uio设备的关联。 一、pci驱动注册 网卡驱动的注册使用了一种奇技淫巧的方法&#xf…

virtio_net 与 virtio-pci 驱动关联浅析

virtio-pci 驱动映射 virtio common_cfg resource 空间 virtio-pci 获取 comon_cfg 物理空间的函数调用如下: mdev->common vp_modern_map_capability(mdev, common,sizeof(struct virtio_pci_common_cfg), 4,0, sizeof(struct virtio_pci_common_cfg),NULL, …

VFIO代码分析(2)VFIO-PCI驱动1

VFIO-PCI驱动作为PCIE驱动,在原来的PCIE驱动卸载后,加载VFIO-PCI驱动,与内核之前扫描到的PCIE设备匹配,触发vfio_pci_probe(),进行本驱动的初始化。该驱动提供了用户态访问PCIE设备的配置空间/BAR空间/中断等资源接口&…

linux设备模型:pci驱动程序注册过程

一个具有正常探测功能的pci驱动程序应具有基本的pci_driver结构实现,如: static struct pci_driver driver_ops {.name "driver_name", // 驱动名称.id_table pci_ids, // 驱动ids结构.probe pci_probe, // 驱动探测函数.remove pci_remo…