日期:2014-05-16 浏览次数:20701 次
Linux网络协议栈之设备初始化
作者:bullbat
Linux网络协议栈的内核初始化工作大致分为设备链路层(e100_module_init、net_dev_init)、网络层(inet_init)、传输层(proto_init)、应用层(sock_init)初始化。由于物理层为具体的网络设备,所以内核对网络协议栈的实现以及网卡驱动实现等没有物理层(L1),驱动以及设备的初始化函数都应该化为L2层。前面介绍了e100系列网卡驱动的实现,下面我们看看内核初始化的时候对设备初始化的另一个函数net_dev_init。
/*设备处理层的初始化函数*/
static int __init net_dev_init(void)
{
int i, rc = -ENOMEM;
/*没有被初始化*/
BUG_ON(!dev_boot_phase);
/*该函数在/proc目录下创建三个文件,主要用于读取网络相关统计数据
正如我们看到的,/proc下的文件基本都为只读的,这里提供的三个文件
都没有写操作*/
if (dev_proc_init())
goto out;
/*在/sysfs设备文件系统的class中注册net节点*/
if (netdev_sysfs_init())
got