// 定义要初始化的函数staticvoid__initinet_init(void){// inet_init的初始化内容}staticvoid__initipv4_offload_init(void){// ipv4_offload_init的初始化内容}// 使用 fs_initcall 宏将函数放置在 .initcall.init 节(section)中fs_initcall(inet_init); fs_initcall(ipv4_offload_init); 上述代码,inet_...
以af_inet.c里面的fs_initcall(inet_init);fs_initcall(ipv4_offload_init);介绍放置的情况:怎么在section放置的 在这个例子中,fs_initcall宏用于将inet_init和ipv4_offload_init函数放置在.initcall.init节(section)中。这样,在内核启动时,这些函数就会按照其在源文件中出现的顺序依次被调用。 下面是简化版本的代码...
以af_inet.c里面的fs_initcall(inet_init);fs_initcall(ipv4_offload_init);介绍放置的情况: 怎么在section放置的 在这个例子中,fs_initcall宏用于将inet_init和ipv4_offload_init函数放置在.initcall.init节(section)中。这样,在内核启动时,这些函数就会按照其在源文件中出现的顺序依次被调用。 下面是简化版本的代...
#define subsys_initcall_sync(fn) __define_initcall(fn, 4s) #define fs_initcall(fn) __define_initcall(fn, 5) #define fs_initcall_sync(fn) __define_initcall(fn, 5s) #define rootfs_initcall(fn) __define_initcall(fn, rootfs) #define device_initcall(fn) __define_initcall(fn, 6) #defin...
#definearch_initcall(fn) __define_initcall(fn, 3)#definearch_initcall_sync(fn) __define_initcall(fn, 3s)#definesubsys_initcall(fn) __define_initcall(fn, 4)#definesubsys_initcall_sync(fn) __define_initcall(fn, 4s)#definefs_initcall(fn) __define_initcall(fn, 5)#definefs_initcall_sync(...
它们的所有名称是由数组initcall_level_names来描述的,该数组定义在源码文件init/main.c中: static char *initcall_level_names[] __initdata = { "early", "core", "postcore", "arch", "subsys", "fs", "device", "late", }; 所有用这些标识符标记为initcall的函数将会以相同的顺序被调用,或者说,ea...
__initcall_end, }; static const char *initcall_level_names[] __initdata = { "pure", "core", "postcore", "arch", "subsys", "fs", "device", "late", }; static void __init do_initcalls(void) { int level; for (level = 0; level < ARRAY_SIZE(initcall_levels) - 1; level++)...
207 #define fs_initcall_sync(fn) __define_initcall(fn, 5s) 208 #define rootfs_initcall(fn) __define_initcall(fn, rootfs) 209 #define device_initcall(fn) __define_initcall(fn, 6) 210 #define device_initcall_sync(fn) __define_initcall(fn, 6s) ...
和我们平时写代码的方式不一样的是,内核是通过注册的方式来实现的。Linux 内核中的 fs_initcall 和 subsys_initcall 类似,也是初始化模块的入口。fs_initcall 调用 inet_init 后开始网络协议栈注册。通过 inet_init,将这些函数注册到了 inet_protos 和 ptype_base 数据结构中了。如下图:...
#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) ...