Linux 开机启动详细过程 在这篇文章中,我们将深入探讨 Linux 开机启动的详细过程,从加载 BIOS 到显示用户登录界面的整个过程。 Linux 开机过程是深入了解 Linux 核心工作原理的一个很好的途径。 1. 加载 BIOS 当你打开计算机电源,计算机会首先加载 BIOS 信息,BIOS 信息是如此的重要,以至于计算机必须在最开始就找到它。这是因为 BIOS 中包含了 CPU 的相关信息、设备启动顺序信息、硬盘信息、内存信息、时钟信息、PnP 特性等等。在此之后,计算机心里就有谱了,知道应该去读取哪个硬件设备了。在 BIOS 将系统的控制权交给硬盘第一个扇区之后,就开始由 Linux 来控制系统了。 2. 读取 MBR 硬盘上第 0 磁道第一个扇区被称为 MBR,也就是 Master Boot Record,即主引导记录,它的大小是 512 字节,可里面却存放了预启动信息、分区表信息。可分为两部分:第一部分为引导(PRE-BOOT)区,占了 446 个字节;第二部分为分区表(PARTITION PABLE),共有 66个字节,记录硬盘的分区信息。预引导区的作用之一是找到标记为活动(ACTIVE)的分区,并将活动分区的引导区读入内存。系统找到 BIOS 所指定的硬盘的 MBR 后,就会将其复制到 0×7c00 地址所在的物理内存中。其实被复制到物理内存的内容就是 Boot Loader,而具体到你的电脑,那就是 lilo 或者 grub 了。 3. Boot Loader Boot Loader 就是在操作系统内核运行之前运行的一段小程序。通过这段小程序,我们可以初始化硬件设备、建立内存空间的映射图,从而将系统的软硬件环境带到一个合适的状态以便为最终调用操作系统内核做好一切准备。通常,Boot Loader 是严重地依赖于硬件而实现的,不同体系结构的系统存在着不同的 Boot Loader。Linux 的引导扇区内容是采用汇编语言编写的程序,其源代码在 arch/i386/boot 中(不同体系的 CPU 有其各自的 boot 目录),有 4 个程序文件:bootsect.S、setup.S、edd.S、video.S。 4. 加载内核 根据 grub 设定的内核映像所在路径,系统读取内存映像,并进行解压缩操作。此时,屏幕一般会输出“Uncompressing Linux”的提示。当解压缩内核完成后,屏幕输出“OK, booting the kernel”。系统将解压后的内核放置在内存之中,并调用 start_kernel() 函数来启动一系列的初始化函数并初始化各种设备,完成 Linux 核心环境的建立。至此,Linux 内核已经建立起来了,基于 Linux 的程序应该可以正常运行了。 start_kernel() 定义在 init/main.c 中,它就类似于一般可执行程序中的 main() 函数,系统在此之前所做的仅仅是一些能让内核程序最低限度执行的初始化操作,真正的内核初始化过程是从这里才开始。函数 start_kernel() 将会调用一系列的初始化函数,用来完成内核本身的各方面设置,目的是最终建立起基本完整的 Linux 核心环境。 start_kernel() 中主要执行了以下操作: * 在屏幕上打印出当前的内核版本信息。 * 执行 setup_arch(),对系统结构进行设置。 * 执行 sched_init(),对系统的调度机制进行初始化。 * 执行 parse_early_param() 和 parse_args(),解析系统启动参数。 * 执行 trap_init(),先设置了系统中断向量表。 * 执行 cpu_init(),完善对 CPU 的初始化,用于支持进程调度机制。 * 执行 rcu_init(),初始化系统中的 Read-Copy Update 机制。 Linux 开机启动过程是一个复杂的过程,涉及到多个步骤和模块的协作。只有通过深入了解这个过程,才能更好地理解 Linux 内核的工作原理和机制。
- 粉丝: 0
- 资源: 1
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助