Linux启动过程

知识点:

1、BIOS与CMOS的区别,这两个不是一个东东。自己百度吧

2、硬盘第一个扇区MBR

3、kernel,initrd,module三者之间的关系。作者开始也是不太明白initrd是做什么用的,查了下资料才明白的。链接在本文的下边,不明白的可以学习下。

启动过程:
1、加载BIOS
post加电自检,检测硬件信息(包括CPU,硬盘,内存,时钟,设备启动顺序信息)。为硬件分配中断号码(中断例程),并且将硬件信息存到CMOS。根据CMOS中系统启动顺序(光盘,U盘,硬盘)启动硬件系统引导
2、读取MBR
第一步说到硬件引导,引导过程既是读取硬盘中的第一个扇区。就是MBR。
MBR的知识点:
硬盘上第0磁道第一个扇区被称为MBR,也就是Master Boot Record,即主引导记录,它的大小是512字节,可里面却存放了预启动信息、分区表信息。可分为两部分:第一部分为引导(PRE-BOOT)区,占了 446个字节;第二部分为分区表(PARTITION PABLE),共有66个字节,记录硬盘的分区信息。预引导区的作用之一是找到标记为活动(ACTIVE)的分区,并将活动分区的引导区读入内存。

系统找到BIOS所指定的硬盘的MBR后,就会将其复制到0×7c00地址所在的物理内存中。其实被复制到物理内存的内容就是Boot Loader,而具体到你的电脑,那就是lilo或者grub了。
3、Boot Loader(grub引导)
Boot Loader 就是在操作系统内核运行之前运行的一段小程序,即grub。通过这段小程序,我们可以初始化硬件设备、建立内存空间的映射图,从而将系统的软硬件环境带到一个合适的状态,以便为最终调用操作系统内核做好一切准备。
4、加载内核
kernel-->initrd-->system module
   initrd的目的就是在kernel加载系统认识CPU、内存等信息之后,像接力赛般地让系统进一步知道"还

有哪些硬件是启动所必须使用到的",若和启动无关的,就可以丢给接下来用户自行配置的系统模块。
   但什么时候需要在initrd文件中放入额外的模块(或拿掉模块),答案是当主机多了一个在启动操作

系统之前就要先找到的设备。
   如果该硬设备可以等进入操作系统再使用,就可以直接以modprobe的方式载入模块使用,而无须去修改initrd文件,因为这样只会增加启动时所要加载的文件数目。但要注意的是,在initrd文件中所放入的模块,必须是与操作系统同一版本kernel所编译的模块,这样才可使用。
5、加载initrd
上面解释了
6、init进程
  系统加载完Linux内核,在最后过程中kernel会启动系统的第一个系统进程,即init进程。然后把系统的

启动移交给init进程
7、/etc/inittab
  init进程会读取/etc/inittab文件,并且根据文件中的系统运行级别来进行系统初始化工作。
8、/etc/rc.d/rc.sysinit
  init执行的第一个脚本,主要包括设定PATH、设定网络配置(/etc/sysconfig/network)、启动swap分区、设定/proc等等工作。
9、启动内核模块system module
具体是依据/etc/modules.conf文件或/etc/modules.d目录下的文件来装载内核模块
10、执行不同运行级别的脚本程序
根据运行级别的不同,系统会运行rc0.d到rc6.d中的相应的脚本程序,来完成相应的初始化工作和启动相应的服务
11、执行/etc/rc.d/rc.local
最后一个脚本,用户可自定义的开机启动程序
12、login程序,登录状态

查询信息:

http://www.ibm.com/developerworks/cn/linux/l-k26initrd/
http://book.51cto.com/art/200903/117057.htm

本文出自 “1058223494” 博客,请务必保留此出处http://4708705.blog.51cto.com/4698705/1431120

Linux启动过程,古老的榕树,5-wow.com

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。