Linux启动过程详解:从BIOS到/sbin/init

需积分: 9 7 下载量 115 浏览量 更新于2024-08-25 收藏 235KB PPT 举报
本文主要介绍了Linux系统的启动过程,特别是从BIOS引导到/sbin/init程序运行的各个阶段。在启动过程中,涉及到了硬件初始化、MBR加载、GRUB引导加载程序、内核引导以及最终的系统初始化。 Linux启动过程通常分为以下几个步骤: 1. **BIOS引导**: - **加电自检(POST)**:开机时,计算机硬件进行自我检查,确保所有组件正常工作。 - **设备枚举和初始化**:识别和设置系统中的硬件设备。 - **MBR加载**:BIOS找到硬盘上的主引导记录(MBR),将其加载到内存特定位置并执行。 2. **主引导记录(MBR)**: - MBR包含512字节,存储了分区表和一个小型引导加载程序。 - 可以使用`dd`命令复制MBR内容,如`dd if=/dev/hda of=mbr bs=512 count=1`,然后使用`hexdump`或`cfdisk`查看MBR信息。 3. **GRUB引导加载程序**: - GRUB是一个两阶段引导加载程序,stage1驻留在MBR中,可加载stage2。 - stage2负责显示引导菜单,用户可以选择要启动的操作系统或内核版本。 - GRUB支持多种文件系统,可以引导多操作系统环境。 4. **Linux内核引导**: - 内核的引导开始于汇编语言编写的_start()函数,它会将自身移动到内存的特定位置并继续执行。 - 接下来,setup()函数负责硬件初始化,设置内核运行环境,如内存管理、显示器设置等。 - startup_32()函数进一步初始化系统,解压bzImage内核镜像到内存,并开始执行用户空间程序。 5. **/sbin/init程序**: - 内核启动的第一个进程,PID为1,PPID为0,它是所有其他进程的起点。 - /etc/inittab是init的配置文件,定义了不同运行级别(run levels)下的动作和命令,每个条目由"id": "run levels": "action": "command"四个部分组成。 - 例如,init根据运行级别启动getty进程,如agetty,以提供终端登录服务;还会执行/etc/init.d下的脚本,如boot和rc脚本,进行系统服务的启动。 6. **系统服务启动**: - /etc/init.d目录下的脚本按特定顺序执行,启动各种系统服务。 - 最后,用户通过/bin/login程序进行身份验证,进入shell环境,此时系统准备就绪,用户可以开始使用Linux了。 理解这个启动过程对于系统管理员来说至关重要,因为这有助于诊断和解决启动问题,同时也有助于理解如何配置和管理Linux系统服务。