-
Boot loader、Linux内核、根文件系统之间的关系是怎样的
-
Boot loader:引导加载程序、位于计算机固件和操作系统之间的软件,负责在计算机启动时加载并执行操作系统。其首先会进行硬件初始化,并接管计算机的控制权。然后,它会加载Linux内核到内存中。
-
Linux内核:是操作系统的核心部分,它负责管理计算机的硬件资源和提供各种系统服务。一旦被Boot loader加载到内存中,Linux内核就开始执行,并完成一系列初始化工作,如设置进程调度器、初始化设备驱动程序等。同时,内核还会检测并挂载根文件系统
-
根文件系统:是Linux操作系统的基本目录结构,包含了所有其他文件和目录。它通常存储在磁盘上,并通过挂载与操作系统关联起来。
-
在Linux启动过程中,Boot loader首先将Linux内核加载到内存中,并将控制权转交给内核。然后,Linux内核进行初始化,并挂载根文件系统,使得操作系统可以通过根文件系统访问和管理文件。这样,整个Linux系统就能够顺利启动并正常运行
-
-
Bootloader的启动过程分为哪两个阶段
-
引导加载程序阶段:在计算机启动时,固件将控制权交给引导加载程序。引导加载程序位于固件和操作系统之间,负责初始化硬件、加载并执行操作系统的内核。在这个阶段,引导加载程序会进行以下步骤
-
初始化硬件设备:包括处理器、内存等硬件的设置和检测
-
选择操作系统
-
加载内核映像:从磁盘上读取Linux内核镜像文件,并将其加载到内存中
-
设置内核参数:为了正确启动内核,引导加载程序可能需要设置一些参数
-
-
内核引导阶段:一旦引导加载程序将内核加载到内存中,它会跳转到内核的入口点并将控制权交给内核。在这个阶段,Linux内核开始执行,并完成以下任务
-
初始化系统资源:初始化各种设备驱动程序、建立进程调度器等
-
挂载根文件系统:查找并挂载根文件系统作为整个操作系统的起点
-
启动init进程:启动init进程,它是用户空间的第一个进程
-
-
-
linux内核的启动过程
-
引导加载程序(Bootloader):计算机加电后,BIOS会将控制权交给引导加载程序(如uboot)。引导加载程序从磁盘上读取内核映像到内存中的指定位置
-
启动汇编代码:引导加载程序在将控制权交给内核前,通常会执行一些必要的设置和初始化操作。然后,它跳转到汇编代码入口点
-
C语言入口:汇编代码的入口点会调用C语言函数 start_kernel()。该函数位于 init/main.c 文件中,并负责进一步初始化内核数据结构、硬件设备、中断处理等
-
内核初始化:start_kernel() 函数完成基本的系统初始化工作,包括设置页表、初始化进程管理、驱动模块和文件系统等
-
平台相关初始化:根据具体平台的不同,Linux内核还会进行平台相关的初始化。例如,处理器架构相关的代码可能需要设置缓存、中断控制器和时钟等
-
创建第一个用户进程:经过前面的初始化阶段后,Linux内核最终会创建第一个用户进程(init进程),并将控制权转移给它。这样,在用户空间中的应用程序可以开始执行
-