内核启动流程

Posted

tags:

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

参考技术A 内核的初始化过程由start_kernel函数开始,至第一个用户进程init结束,调用了一系列的初始化函数对所有的内核组件进行初始化。其中,start_kernel、rest_init、kernel_init、init_post等4个函数构成了整个初始化过程的主线。

从start_kernel函数开始,内核即进入了C语言部分,它完成了内核的大部分初始化工作。实际上,可以将start_kernel函数看做内核的main函数。

在start_kernel函数的最后调用了rest_init函数进行后续的初始化。

(1)rest_init中调用kernel_thread函数启动了2个内核线程,分别是:kernel_init和kthreadd

(2)调用schedule函数开启了内核的调度系统,从此linux系统开始转起来了。

rest_init最终调用cpu_idle函数结束了整个内核的启动。

kernel_init函数将完成设备驱动程序的初始化,并调用init_post函数启动用户空间的init进程。

到init_post函数为止,内核的初始化已经进入尾声,第一个用户空间进程init将姗姗来迟

如果内核命令行中给出了到init进程的直接路径(或者别的可替代的程序),这里就试图执行init。

init:开始是内核态,后来转变为用户态】

init进程完成了从内核态向用户态的转变
init进程在内核态下面时,通过一个函数kernel_execve来执行一个用户空间编译连接的应用程序就跳跃到用户态了。

在init/main.c中最后会通过kernel_execve()来调用用户空间的init进程(如/sbin/init, /etc/init, /bin/init等

uboot通过传参来告诉内核这些信息。
uboot传参中的root=/dev/mmcblk0p2 rw 这一句就是告诉内核根文件系统在哪里
uboot传参中的rootfstype=ext3这一句就是告诉内核rootfs的类型。

Linux 内核启动流程

看完Linux 内核的顶层Makefile 以后再来看Linux 内核的大致启动流程,Linux 内核的启动流程要比uboot 复杂的多,涉及到的内容也更多,因此本章我们就大致的了解一下Linux 内核的启动流程。

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

OpenHarmonyLiteOS-M内核启动流程

centos启动流程

内核启动流程

Tiny4412 Android 启动流程

CentOS 6系统启动流程

启动流程排错,自制linux内核,编译内核