每一个设备的建立都需要在设备数据结构类型中添加一个设备对象, 并将它传递给 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;
}