linux的启动流程和加载程序
先来了解一下整个过程,大致知道linux是怎么启动的。
启动时要加载内核,让内核来驱动硬件,这样才算是一个真正的操作系统
但内核启动前是要做一些其它工作的。启动过过程如下
1.首先先加载BIOS
2.BIOS加载后,接着读取主引导记录(MBR),里面存放的是硬盘的分区信息和引导程序
  在LINUX中,引导程序经常是GRUB和LILO
3.grub或lilo运行,同时,解压内核,并且尝试驱动所有硬件设备
4.执行init进程,首先读取/etc/inittab文件,来获取运行级别。在/etc/inittab中,首先  会读取/etc/rc.d/rc.sysinit文件,这个文件是初始化系统的,比如获取主机的名称,网  络环境,等等。然后再根据/etc/fstab下的文件挂载信息,把相关的设备都挂载上来
5.加载内核的外挂模块。这些模块在/etc/modprobe.conf下
6.init进程执行/etc/rc.d/rc.local文件
7.执行/bin/login程序,等待用户登陆
8.最后就是开始以shell控制主机
大致流程就是这样
通过引导加载程序的管理而开始读取文件后,接下来,Linux就会将核心解压到主存器中,
并且利用核心来控制整个硬件。那么核心文件通常放在哪里呢?一般来说,核心会放在
/boot下,并取名/boot/vmlinuz。
在加载核心的过程中,必须要知道,系统只会“载入根目录”,而且是以只读方式载入的
此外,有时为了让某些功能可以用文件方式来读取,有的系统在启动时,会建立虚拟盘(ramdisk),这就是需要使用initrd以及linuxrc了。利用引导加载程序的功能,可以在加载核心的时候,一起加载initrd的映像文件/boot/initrd-xxxx.img,linux系统会主动以initrd来建立虚拟盘,并且利用linuxrc程序来加载模块。linuxrc使用的主要特点有:
1.必须是linuxrc文件名
2.必须放在initrd所建立的虚拟盘的最顶层目录
3.必须可以被核心执行
在核心驱动外部硬件的工作完成之后,initrd所建立的虚拟盘就会被删除。不过要注意,initrd并非必须,这要有可无,这要看当初建立核心的时候,整个编译过程。
一般来说,各linux版本在建立核心时,都会一起建立initrd的映像文件,以便启动顺序的顺利执行。
 总之,在这个过程中,引导加载程序可以找到linux的核心文件,并将它加载到主存器中,同时可能通过initrd建立起虚拟盘(RAM DISK),协助启动过程,最后,将读取自BIOS的主机硬件数据交由linux核心进行检测,并且加载适当的驱动程序。在完整地加载核心后,主机开始正确运行。接下来,挂靠系统的第一个程序:init
在核心加载完成之后,系统就已准备好,等待程序的执行。整个linux系统中,第一个执行的程序就是/sbin/init。且进程号为1.
init程序做的工作很多,它除了利用设置文件/etc/inittab来获取运行等级之外,还会通过 运行等级的设置启动不同的服务项目。
什么是运行等级呢?它有什么作用呢?其实很简单,linux就是通过设置运行等级,来规定系统用不同的服务来启动,让linux的使用环境不同。基本上,根据有无网络与有无X Window,分别分为6个等级。
0. halt,就是关机
1. single user mode ,单用户模式,就像windows中的安全模式一样,可以进行系统的维护,
2. multi-user,without nfs (类似下面的等级3,但没有NFS服务)
3. full multi-user mode(完整的网络功能,但是是在字符界面)
4.unused ,系统保留使用
5.X11 ,与3相似,但工作在图形界面
6. reboot ,重启
由于运行等级的不同,可以有不同的环境,启动时,系统根据/etc/inittab这个文件来设置运行等级的。