文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>linux内核中关于网络初始化过程中do_basic_setup..

linux内核中关于网络初始化过程中do_basic_setup..

时间:2005-12-06  来源:flyingpiggy_zhu

 

午觉没睡好,老是想这个问题,下午过来再看代码豁然开朗。happy。

linux网络初始化时,initmain.c中的start_kernel()函数中调用kernel_thread启动了init进程,该进程对应于initmain.c中的init函数。init函数中调用do_basic_setup()函数,这个函数又调用了netsocket.c中的sock_init()函数。

do_basic_setup()的功能:

总线初始化(比如pci_init())

网络初始化(初始化网络数据结构,sock_init();2.4.17中sock_init()只是初始化了网络数据结构,真正的协议初始化是运行do_initcalls()时自动加载各个协议模块的)

创建事件管理核心线程(start_context_thread())

再加载所有模块(用do_initcalls()启动任何使用__initcall标识的函数(方便核心开发者添加启动函数))

#define module_init(x) __initcall(x);这句在linuxinit.h中,通过这么定义,使得系统初始化到调用initmain.c中的do_initcalls时自动加载了模块x(进入x初始化)。而在af_inet.c中有module_init(inet_init);所以也包括初始化inet模块了。呵呵

在2.6.14.2中就比较容易理解了。看

static void __init do_basic_setup(void)
{
 /* drivers will send hotplug events */
 init_workqueues();
 usermodehelper_init();
 driver_init();

#ifdef CONFIG_SYSCTL
 sysctl_init();
#endif

 /* Networking initialization needs a process context */
 sock_init();

 do_initcalls();
}

主要根据代码看的,比较仓促,因为这不是我现在要做的主要工作,来不及详细整理了,先这样记下好了,有异议的朋友欢迎留言讨论,呵呵。

相关阅读 更多 +
排行榜 更多 +
都市毁灭模拟器

都市毁灭模拟器

音乐节奏 下载
神探诡事录器门位置一览

神探诡事录器门位置一览

冒险解谜 下载
猛兽派对好友通行证使用事宜

猛兽派对好友通行证使用事宜

冒险解谜 下载