1. 首先,初始化模块调用static inline int pci_register_driver(struct pci_driver *driver)函数来注册设备驱动,这个函数的参数是struct pci_driver *driver,对应于r8168,就是 static struct pci_driver rtl8168_pci_driver = { .name = MODULENAME, .id_table = rtl8168_pci_tbl, .probe = rtl8168_init_o...
1 pci_register_driver() 调用 PCI设备驱动程序调用pci_register_driver(),使用指向描述驱动程序的结构的指针进行初始化。下面描述Linux内核中编写PCI设备驱动程序时,使用struct pci_driver 结构和相应的回调函数的一些重要细节: 字段名 描述 --- --- id_table 设备ID表的指针,驱动程序感兴趣的设备ID在此表中。大...
int (*enable_wake) (struct pci_dev *dev, u32 state, int enable); }; 为创建一个正确的struct pci_driver结构,只有4个字段需要被初始化:name,id_table,probe和remove。 其中id_table初始化可以用到宏PCI_DEVICE(VENDOR_ID,DEVICE_ID),VENDOR_ID和DEVICE_ID分别为设备和厂商编号,由板卡生产厂家指定。 S...
PCI设备驱动程序在初始化过程中调用pci_register_driver(),使用一个指向描述该驱动程序结构(struct pci_driver)的指针: structpci_driver 定义 struct pci_driver { struct list_head node; constchar*name; const struct pci_device_id*id_table;int(*probe)(struct pci_dev *dev, const struct pci_device_id...
struct pci_driver *driver; void *driver_data; u64 dma_mask; u32 current_state; unsigned short vendor_compatible[DEVICE_COUNT_COMPATIBLE]; unsigned short device_compatible[DEVICE_COUNT_COMPATIBLE]; unsigned int irq; struct resource resource[DEVICE_COUNT_RESOURCE]; ...
intpci_register_driver(structpci_driver*driver);intpci_unregister_driver(structpci_driver*driver); 1. 2. PCI_driver结构体: structpci_driver{structlist_headnode;char*name;/* 驱动程序的名称 */structmodule*owner;/* 指向设备驱动程序感兴趣的设备ID的一个列表,包括: ...
• pci_driver 这个数据结构在文件include/linux/pci.h里,这是Linux内核版本2.4之后为新型的PCI设备驱动程序所添加的,其中最主要的是用于识别设备的id_table结构,以及用于检测设备的函数probe( )和卸载设备的函数remove( ): struct pci_driver { struct list_head node; ...
PCI_driver结构体: structpci_driver{structlist_headnode;char*name;/* 驱动程序的名称 */structmodule*owner;/* 指向设备驱动程序感兴趣的设备ID的一个列表,包括: * 厂商ID、设备ID、子厂商ID、子设备ID、类别、类别掩码、私有数据 */conststructpci_device_id*id_table;/* 指向一个函数对于每一个id_table...
1.分配一个struct pci_dev结构体,用来表示相应的PCI设备 2.为这个结构体填充设备vendor id、device id、subvendor id、subdevice id以及地址和irq信息(通过读取PIC配置寄存器得到) 3.最后把这个struct pci_dev结构体挂接到pci_bus上 内核中使用struct pci_driver来描述PCI驱动的抽象 ...
struct pci_driver *driver; void *driver_data; u64 dma_mask; u32 current_state; unsigned short vendor_compatible[DEVICE_COUNT_COMPATIBLE]; unsigned short device_compatible[DEVICE_COUNT_COMPATIBLE]; unsigned int irq; struct resource resource[DEVICE_COUNT_RESOURCE]; ...