Loading

网卡生命周期

计算机启动时,初始化网卡驱动的流程

初始化程序入口,主要是调用了iwl_pci_register_driver()来注册驱动
位于iwl-drv.c

static int __init iwl_drv_init(void) {
  int i, err;

  // ... ...

  err = iwl_pci_register_driver();

  // ... ...

  return 0;
}
module_init(iwl_drv_init);

(1)这里描述了一个PCI驱动的格式iwl_pci_driver
位于drv.c

static struct pci_driver iwl_pci_driver = {        
  .name = DRV_NAME,
  .id_table = iwl_hw_card_ids, 
  .probe = iwl_pci_probe,
  .remove = iwl_pci_remove,
  .driver.pm = IWL_PM_OPS,
}; 

(2)注册一个 PCI 驱动到 Linux 内核的 PCI 子系统中
位于drv.c

int __must_check iwl_pci_register_driver(void)
{
  int ret;             
  ret = pci_register_driver(&iwl_pci_driver);
  
  // ... ...

  return ret;     
}

(3)具体的注册驱动
位于pci-driver.c

int __pci_register_driver(struct pci_driver *drv, struct module *owner, const char *mod_name) {
  /* initialize common driver fields */
  drv->driver.name = drv->name;
  drv->driver.bus = &pci_bus_type;
  drv->driver.owner = owner;
  drv->driver.mod_name = mod_name;
  drv->driver.groups = drv->groups;
  drv->driver.dev_groups = drv->dev_groups;

  spin_lock_init(&drv->dynids.lock);
  INIT_LIST_HEAD(&drv->dynids.list);

  /* register with core */
  return driver_register(&drv->driver);
}
EXPORT_SYMBOL(__pci_register_driver);
posted @ 2024-05-01 00:18  老贝uu  阅读(13)  评论(0编辑  收藏  举报