这个数据结构在文件include/linux/pci.h里,这是Linux内核版本2.4之后为新型的PCI设备驱动程序所添加的,其中最主要的是用于识别设备的id_table结构,以及用于检测设备的函数probe( )和卸载设备的函数remove( ): struct pci_driver { struct list_head node; char *name; const struct pci_device_id *id_table; in...
这个数据结构在文件include/linux/pci.h里,这是Linux内核版本2.4之后为新型的PCI设备驱动程序所添加的,其中最主要的是用于识别设备的id_table结构,以及用于检测设备的函数probe( )和卸载设备的函数remove( ): struct pci_driver { struct list_head node; char *name; const struct pci_device_id *id_table; in...
其中id_table用来匹配设备 代码语言:javascript 复制 struct pci_device_id{__u32 vendor,device;/* Vendor and device ID or PCI_ANY_ID*/__u32 subvendor,subdevice;/* Subsystem ID's or PCI_ANY_ID */__u32class,class_mask;/* (class,subclass,prog-if) triplet */kernel_ulong_t driver_data;...
②是查看总线上所有PCI设备(网卡设备属于PCI设备的一种)的配置空间如果发现标识信息与rtl8139_pci_driver中的id_table相同即rtl8139_pci_tbl,而它的定义如下: staticstructpci_device_id rtl8139_pci_tbl[] __devinitdata ={ {0x10ec,0x8129, PCI_ANY_ID, PCI_ANY_ID,0,0,1}, {PCI_ANY_ID,0x8139,0...
给定一个PCI的ID,内核根据该ID从id_table向量查询出对应的驱动程序 动态: 根据用户手动配置的ID,比较少用到,要求内核编译时支持热插拔。 电源管理和网络唤醒 PCI的电源管理事件有pci_driver的suspend和resume进行。这两个函数分别负责PCI状态的保存和恢复。如果遇到NIC的的情况还需要分别进行下面步骤: ...
PCI总线匹配的是id_table;但匹配方式不只一种,最常见的就是厂商号和设备号。当你加载PCI驱动的时候,驱动程序会把系统中已经存在的设备的厂商号和设备号与驱动程序中的对比,如果一致,则会注册PCI总线驱动并进行下一步操作。 对于PCI总线上电扫描过程,推荐去看一篇博客,http://blog.csdn.net/linuxdrivers/article/...
1、Linux2.6 内核 PCI 驱动程序开发一,PCI相关数据结构说明1.1 struct pci_driver这个数据结构在文件 /linux/pci.h 里,这是 Linux 内核版本 2.4 之后为新型的 PCI 设备驱 动程序所添加的,其中最主要的是用于识别设备的 id_table 结构,以及用于检测设备的函数 probe( )和卸载设备的函数 remove( ) 。struct ...
id_table: demo_pci_tbl, /* 能够驱动的设备列表 */probe: demo_probe, /* 查找并初始化设备 */remove: demo_remove /* 卸载设备模块 *//* ... */};static int __init demo_init_module (void){/* ... */}static void __exit demo_cleanup_module (void){pci_unregister_driver(&demo_pci_...
MODULE_DEVICE_TABLE(pci,PlxPciIdTable); 3.2 驱动模块的加载与卸载 硬件设备驱动的加载,必须要有一个主设备号。设备号的分配有两种方式:静态分配和动态分配。静态分配指的是由开发人员指定一个固定的设备号;动态分配则是由操作系统自动分配设备号。在不能明确某设备号是否被使用的情况下,建议使用动态分配的方式获...