日期:2014-05-16  浏览次数:20708 次

Linux网络协议栈之设备初始化

Linux网络协议栈之设备初始化

作者:bullbat

       Linux网络协议栈的内核初始化工作大致分为设备链路层(e100_module_initnet_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