Linux启动流程(一)

Linux启动过程(一)

X86平台:

   1. 上电,执行00xFFFF0处的BIOS代码。BIOS进行POST(Power on Self Test),对硬件设备进行检测及枚举和初始化,接着BIOS根据CMOS设定的顺序来搜索处于活动状态并可引导的设备(软盘,CD-ROM,硬盘,网络设备,USB闪存等)。以硬盘引导为例,BIOS将MBR(Master Boot Record, 位于硬盘0柱面0磁头1扇区)加载到RAM中,并将控制权交给MBR(MBR中包含有446字节主引导加载程序和64字节分区表(4个分区记录,每个记录16个字节),并以0XAA55结束)

   2.Stage1阶段:主引导程序在分区表中查找活动分区,找到活动分区中的Stage2的引导程序起始扇区并将其读入RAM中执行(若使用grub2.0前的版本则此步下面还会加载Stage1.5,其位于MBR后数个扇区,主要是实现了简单的文件系统,为接下来的Stage2.0从文件系统中加载kernel提供支持。grub2.0已升级了该机制,合并到了Stage2)

   3.Stage2阶段:Stage2阶段的引导程序根据grub.conf显示可引导列表,根据选择将对应的kernel映像跟initrd映像加载到RAM里

   4.Stage释放控制权,开始内核阶段

嵌入式(ARM)平台:

   1. 上电,嵌入式处理器会加载一个位于闪存/ROM中的固定位置的代码(固化的bootrom上电后初始化cpu跟总线频率,然后就是加载位于闪存/ROM中的固定位置的代码,即bootloader,现在bootloader一般分为几级引导,一般BL1阶段为厂商提供,BL2阶段有通用的支持,比如U-boot)。

   2.bootrom加载BL1到SRAM中后,PC指针指向BL1执行。BL1初始化DDR等,并将BL2(U-boot等)加载到DDR中。

   3.BL2加载内核跟initrd到DDR中,并释放控制权,开始内核阶段





你可能感兴趣的:(linux,启动过程)