linux网络协议栈初始化Series---(1)

声明:本文为原创
#####请转贴时保留以下内容######
作者:GTT
本文档归属http://oldtown.cublog.cn/.转载请注明出处!
请提出宝贵意见Mail:mtloveft@hotmail.com
Linux Version:2.6.33
提示:本文是介绍linux 网络协议栈初始化!
 
如果想全面了解linux kernel 组件,不仅需要了解程序都做了些什么,还要了解程序是什么时候被调用的,以及被调用的顺序。有些组件如果可以模块化,当然就可以在加载模块时调用初始化程序就可以了。
但有些组件必须在系统启动时,和kernel一起初始化。
初始化的过程如下
 
kernel启动时,会执行start_kernel方法,在start_kernel里会初始化很多组件和子系统。
也就是上图的other_init代替了这些初始化过程。start_kernel在执行到最后就会启动init kernel thread。
它会完成剩下的初始化程序。其中在do_initcalls里将会按照顺序执行初始化程序。
执行的顺序如下

#define early_initcall(fn)          __define_initcall("early", fn, early)
#define pure_initcall(fn)           __define_initcall("0",     fn, 0)
#define core_initcall(fn)           __define_initcall("1",     fn, 1)
#define core_initcall_sync(fn)      __define_initcall("1s",    fn, 1s)
#define postcore_initcall(fn)       __define_initcall("2",     fn, 2)
#define postcore_initcall_sync(fn)  __define_initcall("2s",    fn, 2s)
#define arch_initcall(fn)           __define_initcall("3",     fn, 3)
#define arch_initcall_sync(fn)      __define_initcall("3s",    fn, 3s)
#define subsys_initcall(fn)         __define_initcall("4",     fn, 4)
#define subsys_initcall_sync(fn)    __define_initcall("4s",    fn, 4s)
#define fs_initcall(fn)             __define_initcall("5",     fn, 5)
#define fs_initcall_sync(fn)        __define_initcall("5s",    fn, 5s)
#define rootfs_initcall(fn)         __define_initcall("rootfs",fn, rootfs)
#define device_initcall(fn)         __define_initcall("6",     fn, 6)
#define device_initcall_sync(fn)    __define_initcall("6s",    fn, 6s)
#define late_initcall(fn)           __define_initcall("7",     fn, 7)
#define late_initcall_sync(fn)      __define_initcall("7s",    fn, 7s)

 
网络组件都初始化了些什么,初始化的顺序又是什么呢?
看看网络部分的初始化注册了些什么。

pure_initcall(net_ns_init);       //net/core/net_namespace.c


core_initcall(sock_init);         //net/socket.c
core_initcall(net_inuse_init);    //net/core/sock.c
core_initcall(netpoll_init);      //net/core/netpoll.c
core_initcall(netlink_proto_init) //net/netlink/af_netlink.c


subsys_initcall(net_dev_init)     //net/core/dev.c
subsys_initcall(fib_rules_init)   //net/core/fib_rules.c
subsys_initcall(neigh_init)       //net/core/neighbour.c
subsys_initcall(proto_init)       //net/core/sock.c
subsys_initcall(cipso_v4_init)    //net/ipv4/cipso_ipv4.c
subsys_initcall(ieee80211_init)   //net/mac80211/main.c


fs_initcall(sysctl_core_init)     //net/core/sysctl_net_core.c
fs_initcall(inet_init)            //net/ipv4/af_inet.c


late_initcall_sync(initialize_hashrnd) //net/core/dev.c
late_initcall(init_net_drop_monitor)   //net/core/drop_monitor.c
late_initcall(ip_auto_config)          //net/ipv4/ipconfig.c
late_initcall(tcp_congestion_default)

 
 
 
 
 
 
 
 
 
 
 


作者: mtloveft   发布时间: 2010-09-13