linux 網絡協議棧初始化

作者GTT
本文檔歸屬http://oldtown.cublog.cn/.轉載請註明出處!
請提出寶貴意見Mail:[email protected]
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)

 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章