static DEFINE_PCI_DEVICE_TABLE(igb_pci_tbl) = { { PCI_VDEVICE(INTEL, E1000_DEV_ID_I354_BACKPLANE_1GBPS) }, { PCI_VDEVICE(INTEL, E1000_DEV_ID_I354_SGMII) }, { PCI_VDEVICE(INTEL, E1000_DEV_ID_I354_BACKPLANE_2_5GBPS) }, { PCI_VDEVICE(INTEL, E1000_DEV_ID_I211_COPPER), boa...
const struct pci_device_id *id_table; /* ID向量,内核用于把设备关联到此驱动程序 */ int (*probe) (struct pci_dev *dev, const struct pci_device_id *id); /* New device inserted */ void (*remove) (struct pci_dev *dev); /* Device removed (NULL if not a hot-plug capable driver) ...
const struct pci_device_id *id_table; /* ID向量,内核用于把设备关联到此驱动程序 */ int (*probe) (struct pci_dev *dev, const struct pci_device_id *id); /* New device inserted */ void (*remove) (struct pci_dev *dev); /* Device removed (NULL if not a hot-plug capable driver) ...
static DEFINE_PCI_DEVICE_TABLE(ixgbe_pci_tbl) = { {PCI_VDEVICE(INTEL, IXGBE_DEV_ID_82598), board_82598 }, {PCI_VDEVICE(INTEL, IXGBE_DEV_ID_82598AF_DUAL_PORT), board_82598 }, {PCI_VDEVICE(INTEL, IXGBE_DEV_ID_82598AF_SINGLE_PORT), board_82598 }, {PCI_VDEVICE(INTEL, IXGBE_DEV...
id_table:这个id的表非常重要,它的作用是匹配驱动所支持的设备。相同看看代码中的使用方法: 代码语言:javascript 复制 221staticDEFINE_PCI_DEVICE_TABLE(netdrv_pci_tbl)={222{0x10ec,0x8139,PCI_ANY_ID,PCI_ANY_ID,0,0,RTL8139},223{0x10ec,0x8138,PCI_ANY_ID,PCI_ANY_ID,0,0,NETDRV_CB},224{0x...
确定有设备以后,我们就可以开始我们的PCI设备驱动的编写了。 1、 首先我们介绍几个必须了解的结构体 pci_driver:这个结构体定义在include/linux/pci.h,这里我们最关注的是id_table、probe和remove。id_table是一个结构体数组,用来存放驱动程序适用的设备信息,probe用于检测设备,remove为设备卸载时调用。
int (*enable_wake) (struct pci_dev *dev, u32 state, int enable); }; 其中name是驱动程序名称;id_table指向一个与驱动程序相关的设备ID表的指针。大多数驱动程序应当用MODULE_DEVICE_TABLE(pci,…)将该设备ID表导出。在调用prob( )时设成NULL以让系统检测到所有的pci设备。
igb 驱动的设备表和 PCI 设备 ID 分别见:drivers/net/ethernet/intel/igb/igb_main.c和drivers/net/ethernet/intel/igb/e1000_hw.h。 1. static DEFINE_PCI_DEVICE_TABLE(igb_pci_tbl) = { { PCI_VDEVICE(INTEL, E1000_DEV_ID_I354_BACKPLANE_1GBPS) }, { PCI_VDEVICE(INTEL, E1000_DEV_ID_I354_...
struct pci_driver { struct list_head node; char *name; const struct pci_device_id *id_table; int (*probe) (struct pci_dev *dev, const struct pci_device_id *id); void (*remove) (struct pci_dev *dev); int (*save_state) (struct pci_dev *dev, u32 state); ...