首页 > 其他 > 详细

解析Linux启动流程及系统初始化

时间:2014-03-09 08:11:05      阅读:628      评论:0      收藏:0      [点我收藏+]

Linux系统启动流程:

POST-->BIOS(Boot Sequce)--》MBR(bootloader)-->Kernel(CentOS5:initrd,CentOS6:initramfs)-->/sbin/init(CentOS5:/etc/inittab, CentOS6:/etc/inittab, /etc/init/*.conf)


启动详解:

1.POST自检:第一步就是CPU加电然后寻址,而CPU寻址所需的代码指令

 来自于ROM->硬件厂商制作(内存分为ROM+RAM),关于CPU如何找到
 指令代码的?硬件的设计的思想就是:CPU懂的去特定的位置去寻找
 代码,而代码得存贮者ROM就应该在特定的位置。与此同时POST自检
 还会检测内存,主板,显卡,声卡,网卡等I/O设备,等一切没有

 问题POST自检完成!将工作移交给BIOS去处理

2.BIOS:(Boot Sequence)加载可选择的启动设备->固件厂商制造

 Bios中存放着各种I/O设备的信息参数、系统时间、启动寻找顺序
 所以必须要检测Bios是否正常。之后会去加载第一个硬盘设备

3.MBR:硬盘的主引导记录,存在于0磁道第0扇区,共512字节。其中Bootloader占据

 446字节,分区表占据64字节,magic num占据2字节。MBR将加载Bootloader去开始
 后边的工作。

4.Bootloader(内核加载器)位于第0磁道第0扇区的446字节是最前边

 的446字节哦!Bootloader的工作机制:bootloader可以访问文件系
 统,而内核则作为文件而存在。所以bootloader可以访问内核文件,
 深入的说bootloader访问内核文件时,是将内核文件Vmlinz所在的
 整个分区当作根去访问的,如访问/Vmlinz而根"/"本身的存在位置
 是由内核文件自己决定。(因为每个文件必须要有一个自己的起始路径)
 能理解这种逻辑吗?
 现代我们常用的内核加载器是grub(Grand Unified Bootloader)
 以此grub来加载内核。加载内核之前grub所做的工作。

第一步

  grub将内核文件Vmlinz 和 grub自己加载到了/boot上,

     同时也在/boot上存放了所有模块的驱动程序xxx.img文件

     用ll /boot 查看bubuko.com,布布扣

bubuko.com,布布扣

            grub目录中存放着grub.conf自身配置文件,device.map磁盘映射图(映射分区/boot和/根分区)

bubuko.com,布布扣

bubuko.com,布布扣

第二步  上边我们已经提到grub目录中存放着device.map磁盘映射分区,接下来我们去查看

                   映射的根分区/(内核真正挂载的分区)中的各种模块所在的路径

bubuko.com,布布扣

接下来查看路径下的各个模块.ko文件

bubuko.com,布布扣

 Kernerl

Linux属于单核系统:Kernel+各种外围模块组成
通过grub加载内核后,内核开始自我解压并工作

通过虚拟根文件系统initrfs 调用init工作


bubuko.com,布布扣

/etc/rc.d 目录中存放着123456运行级别的目录

bubuko.com,布布扣

 以rc3.d为例,目录中存放着进程, 进程运行级别 ,进程状态(K为开启、S为关闭)——>

init就是控制进程是K还是S得总管 (当系统在1 2 3 4 5 6 之间切换时由父进程fork而来的

子进程就会在K与S之间切换状态)

bubuko.com,布布扣


解析Linux启动流程及系统初始化,布布扣,bubuko.com

解析Linux启动流程及系统初始化

原文:http://8577707.blog.51cto.com/8567707/1370893

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!