快速业务通道

linux启动过程详解

作者 佚名技术 来源 Linux系统 浏览 发布时间 2012-04-15
安装到软驱的引导扇区(fd0).

  (fd0)/boot/grub/stage2

  告诉grub stage2这个文件所在的位置.

  p 参数后面跟着(fd0)/boot/grub/grub.conf 告诉grub的配置文件所在的位置.

  好了,让BIOS从软驱启动,试一下,没有e2fs_stage_1.5文件照样能够进入系统.

  其实这就是一个小小的启动盘啊.(了解了grub的运行原理,就简单多了^_^)

  3. 现在我们已经到grub的开机选单这一步了,接下来grub所需要做的就是装载在一个特定分区上的操作系统,如linux内核.一旦GRUB从它的命令行或者配置文件中,接到开始操作系统的正确指令,它就寻找必要的引导文件,然后把机器的控制权移交给操作系统.

  篇幅有限,避免冗长,grub的命令我就不多说了,网上很有多的资料,一个典型完整的引导linux的命令如下:

  title 51base

  root(hd0,0)

  kernel /bzImage ro root=/dev/ram0

  initrd /initrd.img

  这里有必要注意一下几个问题:

  (1)grub的磁盘以及分区的命名方式和linux有所区别,第一个磁盘是从0开始,第一个分区也是从0开始.譬如第一个硬盘的第5分区在linux下面是/dev/hda5 ,而在grub里面是(hd0,4).再如/dev/fd0在grub里面是(fd0,0).(一句如有错误望提醒)

Empire CMS,phome.net

  (2)不管是IDE硬盘hda,hdb还是SCSI硬盘sda,sdb在grub里面都是以hd方式命名.

  譬如虚拟机里面的/dev/sda2在grub里面是(hd0,1),再如/dev/hdb7在grub里面以(hd1,6)命名.

  (3)要搞清楚上面两个root的关系,root (hd0,0)中的root是grub命令,它用来指定boot所在的分区作为grub的根目录.而root=/dev/ram0是kernel的参数,它告诉操作系统内核加载完毕之后,真实的文件系统所在的设备.要注意grub的根目录和文件系统的根目录的区别.

  再回到上面的几行命令.

  kernel命令用来指定内核所在的位置,"/"代表(hd0,0),也就是grub的根目录

  initrd命令用来指定初始化ram的img文件所在位置.

  grub载入内核bzImage并展开到指定位置(应该是0x100000这个地方),同时载入initrd.img到内存(不知道是什么地方).

  ps:

  grub的任务至此就结束了,下面grub将机器的控制权转交给操作系统(linux).

  操作系统接到控制权之后,开始start_kernel,接着内核将initrd.img展开到/dev/ram0为临时根文件系统,执行里面的linuxrc文件.

  P.这里有必要说一下initrd的作用特别是它里面的核心文件linuxrc的作用.

  initrd是inital ram disk的宿写.

  当存在initrd的时候,机器启动的过程大概是以下几个步骤(当initrd这一行用noinitrd 命令代替后,就不存在initrd了)

  1)boot loader(grub)加载内核和initrd.img

  2)内核将压缩的initrd.img解压成正常的ram disk并且释放initrd所占的内存空间

  3)initrd作为根目录以读写方式被挂载

  4)initrd里面的文件linuxrc被执行

  5)linuxrc挂载新的文件系统

  6)linuxrc使用pivot_root系统调用指定新的根目录并将现有的根目录place到指定位置.

  7)在新的文件系统下正式init

  8)initrd被卸载.

  为了便于理解,我将red hat linnux9 里面的initrd-2.4.20-8.img拿出来分析一下.

  这其实是一个压缩了的文件,是以gz结尾的.

  [root@localhost root]#cp /boot/initrd-2.4.20-8.img /mnt/initrd-2.4.20-8.gz

  [root@localhost root]#gunzip /mnt/initrd-2.4.20-8.gz

  [root@localhost root]#mount -o loop /mnt/initrd-2.4.20-8 /mnt/ram

Empire CMS,phome.net

  [root@localhost root]#cd /mnt/ram

  [root@localhost ram]#ls

  bin dev etc lib linuxrc loopfs proc sbin sysroot

  [root@localhost ram]#ls bin

  insmo

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号