pci设备的初始化

来源:互联网 发布:浏览器域名劫持 编辑:程序博客网 时间:2024/05/01 15:34
我们先来看下pci_driver结构,它的id_table是一个指向当前驱动所能处理的pci设备的id列表,由于每个pci设备都有一个唯一的标记,因此我们通过pci_device_id结构就可以标记不同的pci设备。 

driver则指向下一个pci驱动。 

Java代码  收藏代码
  1. struct pci_driver {  
  2.     struct list_head node;  
  3.     char *name;  
  4.     const struct pci_device_id *id_table;   /* must be non-NULL for probe to be called */  
  5.     int  (*probe)  (struct pci_dev *dev, const struct pci_device_id *id);   /* New device inserted */  
  6.     void (*remove) (struct pci_dev *dev);   /* Device removed (NULL if not a hot-plug capable driver) */  
  7.     int  (*suspend) (struct pci_dev *dev, pm_message_t state);  /* Device suspended */  
  8.     int  (*suspend_late) (struct pci_dev *dev, pm_message_t state);  
  9.     int  (*resume_early) (struct pci_dev *dev);  
  10.     int  (*resume) (struct pci_dev *dev);                   /* Device woken up */  
  11.     void (*shutdown) (struct pci_dev *dev);  
  12.     struct pm_ext_ops *pm;  
  13.     struct pci_error_handlers *err_handler;  
  14.     struct device_driver    driver;  
  15.     struct pci_dynids dynids;  
  16. };  


当系统boot时,它会为每一个总线创建一个检测到的设备的链表。我们这里只看pci总线,当boot后,有一个包含所有检测到的pci设备的链表,然后他会load所有的通过pci_register_driver注册的pci驱动(也就是一个驱动链表).此后系统会通过pci_device_id来发现每个pci设备所对应的驱动,当匹配好之后,系统会调用相应的probe函数创建和注册相应的网络设备。 

可以看下下面的图: 

 

a图 系统拥有一个设备的列表和一个驱动的列表。 


 

b图 系统通过id_table查找到驱动A所对应的设备dev 1和dev 2 


 

c图 系统查找到驱动B对应的设备dev 3 
原创粉丝点击