do_initcalls

do_initcalls()函数中每个level都有啥

在Linux内核初始化的第二阶段中,do_initcalls()函数会按照一定顺序执行多个初始化级别,每个级别都会进行不同的初始化操作。以下是每个级别的主要初始化操作:

LEVEL_BUILTIN_EARLY: 在这个级别中,内核会注册所有编译进内核镜像的驱动程序,这些驱动程序通常是用于启动引导过程的核心驱动程序,例如存储设备驱动和文件系统驱动。

LEVEL_EARLY: 在这个级别中,内核会执行一些与系统环境相关的初始化操作,包括处理引导参数和初始化系统时钟。

LEVEL_PLATFORM_EARLY: 在这个级别中,内核会初始化与硬件平台相关的驱动程序和设备,例如I/O设备、中断控制器和时钟源等。

LEVEL_ARCH_EARLY: 在这个级别中,内核会初始化与特定CPU架构相关的驱动程序和设备,例如MMU、虚拟内存和异常处理等。

LEVEL_CPUS: 在这个级别中,内核会初始化多处理器系统的处理器和调度程序,包括中断处理和进程调度。

LEVEL_PLATFORM: 在这个级别中,内核会初始化与硬件平台相关的高级驱动程序和设备,例如电源管理、温度控制和传感器设备等。

LEVEL_SECURITY: 在这个级别中,内核会初始化安全相关的子系统,例如SELinux或AppArmor。

LEVEL_FILESYSTEMS: 在这个级别中,内核会挂载根文件系统和其他文件系统,并注册文件系统驱动程序和相关的VFS操作。

LEVEL_BLKDEV: 在这个级别中,内核会初始化块设备驱动程序,包括磁盘和闪存设备等。

LEVEL_NET: 在这个级别中,内核会初始化网络协议栈、网络设备和套接字,为网络服务做准备。

LEVEL_LAST: 在这个级别中,内核会执行最后的初始化任务,包括启动用户空间进程、启动调度器、启动中断处理程序和完成其他系统初始化。

以上每个级别都会完成一些特定的初始化操作,以确保内核能够正常工作。不同的系统可能会有不同的级别和初始化操作,具体情况取决于内核配置和系统需求。


do_initcalls
https://realwujing.github.io/linux/kernel/qemu/do_initcalls/
作者
Wu Jing
发布于
2023年8月18日
许可协议