Linux 内核初始化过程中,子系统初始化调用的顺序是经过精心设计的,以确保内核的各个部分能够按正确的依赖关系进行初始化。根据搜索结果,内核初始化的一般顺序如下:
-
CPU 检查:内核首先检查 CPU 的特性和数量。
-
内存检查:接下来,内核检查和初始化内存。
-
设备总线发现:内核识别系统中的设备总线。
-
设备发现:内核发现系统中的设备,并初始化设备驱动程序。
-
辅助内核子系统设置:内核设置辅助子系统,如网络和文件系统等。
-
根文件系统挂载:内核挂载根文件系统,以便可以访问文件系统。
-
用户空间启动:最后,内核启动用户空间的进程,如 init 或 systemd。
在内核初始化过程中,会使用不同的宏来指定初始化函数的执行顺序,例如early_initcall
、core_initcall
、subsys_initcall
和fs_initcall
等。这些宏定义了初始化函数在内核启动过程中的不同阶段被调用。例如,early_initcall
通常用于架构特定的硬件初始化,而fs_initcall
用于文件系统相关的初始化。subsys_initcall
用于子系统的初始化,它在核心初始化之后,在文件系统初始化之前。
这些宏通过__define_initcall
实现,该机制允许内核在启动时按顺序调用不同的初始化函数。每个宏对应内核初始化的一个特定阶段,确保了初始化函数按照正确的顺序执行。
用户空间启动?
用户空间启动是操作系统启动过程中的一个关键阶段,它涉及到从内核空间向用户空间的转换,并启动用户空间的第一个进程。以下是用户空间启动的具体过程:
-
内核初始化完成:在内