CF卡上的Linux启动过程分析

一个嵌入式linux操作系统可以简单的抽象为,引导程序bootloader、内核vmlinuz、文件系统filesystem。

Bootloader是系统加电后运行的第一段代码,一般它只在启动系统时非常短的时间按内运行。对于linux系统来说,这是至关重要的一步。在系统中,整个bootloader由系统中的bios和u盘中MBR(主引导扇区)的一段代码来共同完成引导任务。这里我们采用grub引导方式。系统先将BIOS检测到的MBR内容读取到RAM中,然后将系统控制权交给grub,最后由grub负责把要引导的操作系统的内核镜像读取到系统RAM中,然后跳转到内核的入口点。

vmlinuz是Linux 内核的镜像文件,可以被引导程序加载,从而启动Linux系统。

initrd的全称是boot loader initialized RAM disk,它是系统启动时所使用的根文件系统映像文件,这个文件系统中包含几个驱动模块,都是系统启动时所必须加载的,另外当我们需要加载其它的模块时,也可以放在其中。

推荐阅读:

Linux启动流程知多少之迷你系统

解说Linux启动流程

Linux启动系统及故障排除

Linux启动流程介绍

一、引导程序Grub

机器加电启动后,BIOS开始检测系统参数,如内存的大小,日期和时间,磁盘设备以及这些磁盘设备用来引导的顺序,通常情况下,BIOS都是被配置成首先检查软驱或者光驱,然后再尝试从硬盘引导。如果在这些可移动的设备中,没有找到可引导的介质,那么BIOS通常是转向第一块硬盘最初的几个扇区,寻找用于装载操作系统的指令。装载操作系统的这个程序就是boot loader。

linux里面的bootloader通常是lilo或者grub,从Red Hat Linux 7.2起,GRUB取代LILO成为了默认的启动装载程序。那么启动的时候grub是如何被载入的呢?

grub有几个重要的文件,stage1,stage2,有时候还需要stage1.5。这些文件

一般都在/boot/grub文件夹下面。grub被载入通常包括以下几个步骤:

1、装载基本的引导装载程序(stage1)

stage1很小,只有512字节,

stage1通常位于主引导扇区里面,它的主要功能就是装载第二引导程序(stage2)。这主要是因为在主引导扇区中没有足够的空间用于其它东西, grub中stage2文件的大小是103.9K。

2. 装载第二引导装载程序(stage2)

这第二引导装载程序实际上是引出更高级的功能,以允许用户装载入一个特定的操作系统。在GRUB中,这步是让用户显示一个菜单或是输入命令。

上面还提到了stage1.5这个文件,它的作用是什么呢?在/boot/grub目录下可以看到有fat_stage_1.5  e2fs_stage_1.5 xfs_stage_1.5等等,很容易猜想stage1.5和文件系统有关系,有时候基本引导装载程序(stage1)不能识别stage2所在的文件系统分区,那么这时候就需要stage1.5来连接stage1和stage2了.因此对于不同的文件系统就会有不同的是stage1.5。但是对于我们做的grub好像stage1.5并不是很重要,因为我试过了,在没有stage1.5的情况下, 我把stage1安装在格式化为ext3的CF卡中,能够正常引导,并不需要e2fs_stage_1.5或者fat_stage_1.5。

我们的具体做法是把整个CF卡格式化为一个分区,文件系统为ext3格式,然后把stage1、stage2、grub.conf这几个启动的时候必须的文件拷贝到CF卡的指定目录下,然后进入grub使用一些命令将其安装到CF卡上。

二、内核配置

Linux内核所控制的东西非常广,从文件系统格式、程序开放、电源管理到用户的安全性等一大堆的项目,甚至连网络带宽的分配都在其中,由此可知内核的重要性。但是针对我们现在做的系统,在内核配置中我们主要对下面这些选项感兴趣

1、 Loadable module support  对模块的支持,这里面有三项:  Enable loadable module support:除非你准备把所有需要的内容都编译到内核里面,否则该项应该是必选的。

Set version information on all module symbols:表示该模块不跟内核一起发布,通常不选。

Kernel module loader:该选项表示内核可以实现模块加载的功能。Kernel程序可以在需要的时候自动调用模块,而在不用该功能的时候自动卸载该模块

2、Processor type and features

在它的下面,同样有很多的选项,但我们只关心Processor family:根据我

们自己的情况选择CPU类型。在我们的故障诊断仪上,经过试验证明选择386、486或586/K5/5x86/6x86/6x86MK都可以,但是选择Pentium-3/Celeron或者Pentium-4不行。

3、General setup

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:http://www.heiqu.com/19540.html