_init

Posted chjgongzuo

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了_init相关的知识,希望对你有一定的参考价值。

__init 只是告诉内核,你这个函数执行一次就不再执行,因此该函数空间可以释放,当栈用。
内核就把这些 标记着__init的收集到一块,.init段内,执行顺序是由 arch_initcall() , module_init()。

 

.initcall1.init 
.initcall2.init 
.initcall3.init 
.initcall4.init 
.initcall5.init 
.initcall6.init 
.initcall7.init 

core_initcall(fn) --->.initcall1.init
postcore_initcall(fn) --->.initcall2.init
arch_initcall(fn) --->.initcall3.init
subsys_initcall(fn) --->.initcall4.init
fs_initcall(fn) --->.initcall5.init
device_initcall(fn) --->.initcall6.init
late_initcall(fn) --->.initcall7.init

INITCALL这个宏定义只有把它放到vmlinux.lds.s里面看才有意义。
.initcall.init :
{
___initcall_start = .;
INITCALLS
___initcall_end = .;
}
从__early_initcall_end执行到__initcall_end


kernel将初始化要执行的init函数,分为7个级别,
core_initcall, postcore_initcall, arch_initcall, subsys_initcall, fs_iitcall, device_initcall,late_initcall。
这7个级别优先级递减,即先执行core_initcall,最后执行late_initcall(二中将具体讲述这些宏)。
通过使用文中提到的宏,gcc会将初始化代码按下面的结构安排

技术图片

 

 

kernel将初始化要执行的init函数,分为7个级别,core_initcall, postcore_initcall, arch_initcall, subsys_initcall, fs_iitcall, device_initcall, late_initcall。这7个级别优先级递减,即先执行core_initcall, 最后执行late_initcall(二中将具体讲述这些宏)。通过使用文中提到的宏,gcc会将初始化代码按下面的结构安排

以上是关于_init的主要内容,如果未能解决你的问题,请参考以下文章

python中的模块,库,包有啥区别

java.util.MissingResourceException: Can't find bundle for base name init, locale zh_CN问题的处理(代码片段

"arch/arm/kernel/head.S"里面一点片段的理解

DJANGO 自定义分页组件

这些 C++ 代码片段有啥作用?

[AndroidStudio]_[初级]_[配置自动完成的代码片段]