1.加载BIOS
- 当开机自检完成后,计算机会首先加载BIOS信息,BIOS信息是如此的重要,以至于计算机必须在最开始就找到它。
- 因为BIOS中包含了CPU的相关信息、设备启动顺序信息、硬盘信息、内存信息、时钟信息、PnP特性等等。
2.读取MBR
- 硬盘上第0磁道第一个扇区被称为MBR,也就是Master Boot Record,即主引导记录,它的大小是512字节,别看地方不大,可里面却存放了预启动信息、分区表信息。
- 系统找到BIOS所指定的硬盘的MBR后,就会将其复制到0×7c00地址所在的物理内存中。其实被复制到物理内存的内容就是Boot Loader,而具体到你的电脑,那就是lilo或者grub了。
MBR中存在如下内容:
- Boot Loader 占用446字节,存储有操作系统(OS)相关信息,如操作系统名称,操作系统内核位置等,它的主要功能是加载内核到内存中运行。
- Partition Table 分区表,占用64字节,每个主分区占用16字节(这就是为什么一块硬盘只能有4个主分区)
- 分区表有效性标记占用2字节
CPU将MBR读取至内存,运行GRUB(Boot Loader常用的有GRUB和LILO两种,现在常用的是GRUB),GRUB会把内核加载到内存去执行。
3.GRUB菜单
- GRUB菜单,也就是操作系统引导菜单
4.加载内核
- 根据grub设定的内核映像所在路径,系统读取内存映像,并进行解压缩操作。此时,屏幕一般会输出“Uncompressing Linux”的提示。当解压缩内核完成后,屏幕输出“OK, booting the kernel”。
- 系统将解压后的内核放置在内存之中,并调用start_kernel()函数来启动一系列的初始化函数并初始化各种设备,完成Linux核心环境的建立。至此,Linux内核已经建立起来了,基于Linux的程序应该可以正常运行了。
- 也就是启动操作系统的核心
5.用户层init依据inittab文件来设定运行等级
- 内核被加载后,第一个运行的程序便是/sbin/init,该文件会读取/etc/inittab文件,并依据此文件来进行初始化工作。
- 其实/etc/inittab文件最主要的作用就是设定Linux的运行等级,其设定形式是“:id:5:initdefault:”,这就表明Linux需要运行在等级5上。Linux的运行等级设定如下:
- 0:关机
- 1:单用户模式
- 2:无网络支持的多用户模式
- 3:有网络支持的多用户模式
- 4:保留,未使用
- 5:有网络支持有X-Window支持的多用户模式
- 6:重新引导系统,即重启
6.读取/etc/inittab配置文件
- 也就是linux开机时默认的启动模式。在/etc/inittab这给配置文件下可以修改开机默认启动选项
7. 执行/etc/rc.d/rc.sysinit初始化脚本。
也就是init进程的初始化用来执行kernel的任务
8.执行不同运行级别的脚本程序
- 根据运行级别的不同,系统会运行rc0.d到rc6.d中的相应的脚本程序,来完成相应的初始化工作和启动相应的服务。
- 执行/etc/rc.d/rc脚本,通过执行脚本找出默认启动模式选项要启动的进程
9.执行/etc/rc.d/rc.local个人配置脚本
也就是用户想要开机自启动的命令或者进程都放在这个脚本文件内,这样设置开机自启方式比较安全。开机时这给脚本文件内的所有命令全部执行一遍
- rc.local就是在一切初始化工作后,Linux留给用户进行个性化的地方。你可以把你想设置和启动的东西放到这里。
10.启动mingetty进程
- 此时,系统已经进入到了等待用户输入username和password的时候了,你已经可以用自己的帐号登入系统了。