想添添东西,使内容丰富一些。对linux的启动过程做一个整体的理解。
     现在以rhel6-x86_64我参考。
启动过程可以理解为,权限的移交过程。BIOS->BOOT loder->linux _init 整个交接分为三个部分。
权限移交之一:BISO
BIOS就不介绍咯,biso不认识系统,自检完懒得去认你,所以就叫loader程序把系统资源一脚给操作系统。

权限移交之二:引导转载程序组件
   引导装载程序
一:容量小,位于MBR,或者引导部分
二:从引导分区装载
对于Linux的最低要求:(换句话说,就是grub要启动系统至少要有/boot下的内核,初始化ram(initrd)因为里面装了进入系统的必备驱动等;确定内核后一定只能根文件系统的位置)
标签:内核位置:os根文件系统:初始化的ram(initrd)
提示:其实就是grub.conf写的东西。这个对于grub的操作会有更深的理解。从grub引导Linux就是需要这些参数。

对其他的系统要求
引导装置,标签。 //比如说wins 在grub.conf里的写法。
装载程序负责在计算机启动时启动您的linux或其他系统。

调用装载程序的两种方法;
第一:就是BISO自检完将控制权交给你mbr上的初始化引导装载程序(initial program loader)LPL GRUB);
第二就是:BISO自检完交给另一个装载程序,这个程序将控制权交给安装在部分分区上的lpl(grub)
配置装载程序的两种方式:
在第一阶段的引导:将linux的引导装载工具直接安装在MBR(446字节内)中,引导装载程序的配置必须让它可以把控制权交给需要的操作系统。
第二阶段的引导:将安装引导程序的第一阶段安装在某个分区引导部分。但是在mbr中必须安装另一个引导安装程序,其配置允许叫控制权交给我的linux的引导装载程序。(就是不要叫grub写到sda上而是写在sdan的某个分区上,这时候要在mb上装上另一个grub不然第一阶段过不去)(双重grub)
<?xml:namespace prefix = o />

 

GRUBgrub.conf
grub的配置文件/boot/grub/grub.conf
       首先:要明确系统有没有boot分区。没有的话直接跟/分区联系。 boot分区的话/boot/分区
      如果/dev/hda 中的mbr坏了的话,要重新安装/sbin/grub-install /dev/hda
     要将grub-md5-crypt生成的密文写入grub.conf中,加上
password  --md5  $1$IK2Ac0$w/TTS.1CM51dYkqmc7bip1
配置grub.conf会立即生效。

 

加密过后的grub要按P键输入密码才能进入grub菜单编辑模式。  e 是编辑,d 是删除,b是启动。

 

内核初始化步骤,/var/log/dmesg
     调用编译在内核里的驱动,并试图选找和他们对应的设备。找到了驱动就初始话设备;如果的必要的驱动程序被编译成模块而不是直接编译在内核里,那么一定要在initrd里,内核然后会挂载这个映像文件临时挂在ram里,以便初始化进程使用该模块。
所有的驱动都装载完以后,内核会以只读的方式挂载根文件系统。
第一个进程(init)被装载后控制从这个内核到这个进程。
ps:如果想看到这个初始化过程可以修改一下grub.conf的参数,这些参数都是传给内核的。kernel /vmlinuz-2.6.32-71.el6.x86_64.debug ro root=/dev/mapper/vg_studnet20-LogVol00  rhgb quiet //把quiet 去掉就可看到了哦。重启就可以看到了,或者在启动机器的时候在grub引导的时候去掉这个参数。


   用户接口阶段
init 初始化
A:初始化运行级别;
B:系统初始化脚本;
C:对应运行级别的脚本目录;
D:捕获某个关键字顺序;
F:定义UPS电源中断/恢复脚本;
G:虚拟控制台生成getty;
H:运行级别5初始化;

 

A:读其初始化文件/etc/inittab
系统运行级别:
0:halt (do not set initdefault to this)
1:sample user mode
2:multiuser mode ,no nfs (the same as 3 ,if you do no have networking )
3:multiuser mode
4:unused
5: X11+3
6:restart (do not set initdefault to this)
s ,S,single 备用单用户。
Emergency 绕过rc.sysinit,nologin
#N is runlevel num
id:N:initdefault:
选定运行级别:
方法1:修改/etc/inittab
方法2:给引导转载程序一个参数;
#init new_runlevel

 

注意:如果/etc/inittab文件丢失,那么必须进入单人模式或者是紧急模式。
#pstree   //init 总是第一个进程.

 

 

B:/etc/rc.d/rc.sysinit

1:激活udev,selinux
2:在/etc/sysyctl.conf 设定内核参数。
3:设定系统时间
4:装载按键设置
5:启用交换分区
6 :  设置主机名
7:检查并重新挂载跟文件系统
8 :   激活raid lvm
9 :启用磁盘配额
10 :  清理过时的锁和
pid文件

 

 
C:/etc/rc.d/rcX.d
每个运行配备都有运行的目录
/etc/rc.d/init.d
运行级别文件目录中 的符号链接到这个目录中的对应文件使用start stop参数调用init.d

 

指定运行级别脚本后运行
通常可以运行自定义修改。