您的位置:首页 > 运维架构 > Linux

linux 启动相关知识介绍

2011-10-06 21:05 288 查看
悲催的十一终于过去了,待得我还蛋疼。。。

这几天终结了一下linux的启动大概流程。具体流程如下:

启动的时候会启动bios,之后如果是硬盘加载,bios会把第一个删去读入ram的0x7c00(物理地址),然后开始执行。这里需要一个MBR的概念,就是引导程序,默认的情况下引导程序都会到0x7C00下面。在linux还有两个引导软件LILO和GRUB,LILO这个软件由于太大,一个扇区装不下,会分为两部分,第一部分就是引导分区,第二部分才是引导程序,我们通过引导分区可以找到引导程序的位置。

还是回到linux,linux在启动的时候,会直接去找boot\header.S文件,这个文件表明了linux的具体文件结构(boot.txt下面也有详细的解说)。我们需要知道的是,这个文件前512位是其实是历史遗留问题,主要适用于软盘启动的时候用的,我们这里用不到。在header.S中我们能够看到我们会跳到真正的程序进入点_start,在这里我们才开始我们的主要工作,跳过63b的header初始化。这里主要干了初始化堆栈和BSS(解释一下这个BSS,他其实和DATA特别想,只是没有初始化的变量,一般EXE没有。)对了,在Header.S指明了内存分配的具体位置,我们的这个header.S是在0x90000地址开始载入的。_start也就是在0x90200开始的。在最后,我们能够看到header.S转入main.c文件当中,OK,我们也去看看。看的时候终于能不看汇编了。里面一堆函数,主要是初始化用个,最后一个protected_mode的最重要,最后在汇编文件中找到,如果打开protected mode。

这样boot\header.S看完了,开始看compressed\header.S了,之后会执行这个文件,它主要是解压缩内核,我们通过里面能找到decompressed_kernel字样的命令(不一定准,凭记忆的),打开文件,就看到了赤裸裸的zip解压缩,用的是lib/inflate.c

下面就开始跳到挤压之后的header.S里面了,就是kernel/header.S里面了,其实打开之后就会看到start_kernel了,这样,我们的启动就粗略的完成了。我这个一点都不细致,但是我想知道怎么进入start_kernel就够了。呵呵。
本文出自 “难得糊涂” 博客,请务必保留此出处http://hehedeng.blog.51cto.com/888740/681360
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: