[翻译] Section 5.7. Initializing the Device Handling Layer: net_dev_init 设备处理层的初始化

网络初始化非常重要的一部分,其功能包括流量控制、CPU的ingress Queues。该初始化过程在boot阶段通过函数net_dev_init,在net/core/dev.c中声明

static int _ _init net_dev_init(void)
{
...
}
subsys_initcall(net_dev_init);

查看第七章可以插件subsys_initcall如何确保net_dev_init跑在设备驱动初始化前

net_dev_init的主要工作如下:

1、每个CPU的数据结构通过两个软中断实现初始化,在第九章,将会介绍什么是软中断,并且描述网络如果使用软中断的细节

2、通过dev_proc_init 和dev_mcast_init添加文件进/proc文件系统

3、netdev_sysfs_init 将网络类型注册为sysfs,这会创建/sys/class/net文件夹,并且你会在该文件夹下查看到已注册的网络设备。

4、net_random_init为每个CPU net_random 实例初始化一个随机种子,net_random 将用于不同上下文,将在本节之后描述

5、协议目标缓存(DST),在33章描述,dst_init中实现

6、初始化协议handler 向量ptype_base,用于解复用ingress通信。详细参考13章

7、当设置了OFFLINE_SAMPLE 宏,内核会定期收集关于设备队列长度的统计数据。net_dev_init 会启动一个定时器,以便定时做这件事,详细见第十章的Average Queue Length and Congestion-Level Computation这一节

8、在通知链中注册回调函数,发出CPU热插拔事件。目前该回调函数是dev_cpu_callback,处理方式是停止CPU。当接收该通知时,会将CPU入口队列缓存封锁,并传递给netif_rx。第九章详细讲了CPU入口队列的详细情况

“随机数生成”是内核执行的支持函数,用来随机化一些自身行为。本书中有很多网络子系统使用随机生出数。比如随机化可以防止有人试图猜测某些数据结构,从而抵御Dos攻击。还有某些模块随机延时,使得一些模块不会同时运行。

内核数字的随机程度被称为系统熵。

猜你喜欢

转载自blog.csdn.net/qq_28351465/article/details/82586607