红联Linux门户
Linux帮助

linux内核中关于网络初始化过程中do_basic_setup等的问题

发布时间:2006-08-30 00:36:17来源:红联作者:supop
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中就比较容易理解了。看

[code]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();
}[/code]

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

共有 0 条评论