12.5.3 设备注册

每一个设备的建立都需要在设备数据结构类型中添加一个设备对象, 并将它传递给 register_netdev(struct device *) 函数。这样就把你的设备数据结构和内核中的网络设备表联系起来。 如果你要传递的数据结构正被内核使用,就不能释放它们,直到你卸载该设备,卸载设备用到 unregister_netdev(struct device *) 函数。这些函数调用通常在系统启动时或网络模块安装或卸载时执行。

 

内核不允许用同一个名字安装多个设备。因此,如果你的设备是可安装的模块,就应该利用  struct device *dev_get(const char *name)  函数来确保名字没有被使用。如果名字已经被使用,那么就必须另选一个,否则新的设备将安装失败。如果你发现有设备冲突,就可以使用 unregister_netdev()注销一个使用该名字的设备。

下面是一个典型的设备注册的源代码:

 

int register_my_device(void)

{

  int i=0;

  for(i=0;i<100;i++)

  {

    sprintf(mydevice.name,"mydev%d",i);

    if(dev_get(mydevice.name)==NULL)

    {

      if(register_netdev(&mydevice)!=0)

        return -EIO;

      return 0;

    }

  }

  printk("100 mydevs loaded. Unable to load more.<\\>n");

  return -ENFILE;

}