参考http://blog.chinaunix.net/uid-26495963-id-3066282.html
1,加载BIOS
BISO,英文Basic input Output System,基本的输入输出系统,它是一组固化在计算机主是的ROM芯片上的程序,为计算器提供最底层的、最直接的硬件设置和控制。
(1) 计算机刚上电时对硬件部分的检测,机加电自检,Power On Self Test,简称POST,
检查内容包括CUP,640K基本内存,1M以上内存扩展,ROM,主板,CMOS存储器,串并口,显卡,软硬盘,键盘等进行检查,发现问题则鸣笛警告,如严重错误,则停机;
(2) 初始化,包括创建中断向量、设置寄存器,对一些外部设备进行初始化和检测,其中很重要的一部分是BIOS设置,这样是对硬件设置一些参数;
(3) 引导程序,即引导DOS或其他操作系统,从软盘,硬盘,USB的开始失去读取引导记录。
2.读取MBR
硬盘的主引导扇区位于硬盘的第0磁道0柱面第一个扇区称为MBR,大小512 bytes,由3部分组成:
(1) 硬盘主引导记录MBR(Master Boot Record)占446 Bytes
(2) 分区表DPT(Disk Partition Table)占64Bytes
(3) 硬盘有效标志(Magic Number)占2Bytes
MBR包含硬盘的一系列参数和一段引导程序,其中硬盘引导程序的主要作用是检查分区表是否正确并且在POST完成后引导分区上的操作系统,将Boot Loader复制到物理内存0x7c00;
3.Boot Loader
(1)Boot Loader是在操作系统内核运行之前运行的一段程序,初始化硬件设备、建立内存空间的映射图,从而将系统的软硬件带到一个合适的状态,以便最终调用操作系统内核;Boot Loader严重依赖硬件;
(2)Boot Loader有若干种,其中Grub,Lilo,Spfdisk是常见的Loader;
Grub使用的最多,系统读取内存中的Grub配置信息,一般为menu.lst或grub.lst,并依照此配置信息来启动不同的操作系统;
4.加载内核
根据Grub设定的内核映像路径,读取内存映像,并进行解压操作;屏幕上会输出“Uncompressing Linux”的提示,解压完成后,输出“Ok,booting the kernel”
系统将解压后的内核放在内存中,并调用start_kernel()函数来启动一系列的初始化动作,完成Linux核心环境的建立;
至此,Linux内核已经建立起来了,基于Linux的程序可以正常运行。
5.用户init设定运行等级
内核加载完成后,第一个运行的程序是/sbin/init,该文件会读取/etc/inittab文件,并以此来进行初始化操作;
/etc/inittab文件最主要的作用就是设定Linux的运行等级,Linux包含5个等级;
6.init进程执行rc.sysinit
设定运行等级后,Linux系统执行的第一个用户层文件是/etc/rc.d/rc.yssinit脚本程序,该脚本会设定PATH,网络配置,启动swap分区,设定/proc等;
7.启动内核模块
依据/etc/modules.conf文件或/etc/modules.d目录下的文件来装载内核模块;
8.执行不同运行基本的脚本程序
根据不同的运行级别,系统会运行rc0.d到rc9.d中相应的脚本程序,来完成相应的初始化工作和启动相应的服务;
9.执行/etc/rc.d/rc.local
rc.local就是在一切初始化工作完成后,linux留给用户个性化的设定的位置;
10.执行/bin/login程序,进入登录状态
此时,系统已经进入到了等待用户输入username和password,输入用户名和密码登录,启动过程完成;