两个基本的数据结构之一:net_device
net_device注册
int register_netdev(struct net_device *dev) rtnl_lock(); if (strchr(dev->name, '%')) dev_alloc_name(dev, dev->name); register_netdevice(dev); =>int register_netdevice(struct net_device *dev) //初始化结构体配置 dev->iflink = -1; if (dev->netdev_ops->ndo_init) ret = dev->netdev_ops->ndo_init(dev); ret = dev_get_valid_name(net, dev->name, dev->name, 0); dev->ifindex = dev_new_index(net); if (dev->iflink == -1) dev->iflink = dev->ifindex; netdev_initialize_kobject(dev); ret = call_netdevice_notifiers(NETDEV_POST_INIT, dev); ret = netdev_register_kobject(dev); dev->reg_state = NETREG_REGISTERED; //设置初始化状态和队列 set_bit(__LINK_STATE_PRESENT, &dev->state); dev_init_scheduler(dev); dev_hold(dev); list_netdevice(dev);//真正注册,加到3个表里面,一个链表,两个hash表 ret = call_netdevice_notifiers(NETDEV_REGISTER, dev); rtnl_unlock();
参考文章
网络设备模块初始化(net/core/dev.c/net_dev_init)
https://blog.csdn.net/sun172270102/article/details/80643164
Linux eth0, eth1, ..., eth%d 的生成
https://blog.csdn.net/xiruanliuwei/article/details/78765255
————————————————
版权声明:本文为CSDN博主「天麓」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/shipinsky/article/details/88923774