在pc上引导linux的过程为从BIOS(基本输入/输出系统)转移到Bootloader,而在嵌入式系统直接运行Bootloader。在X86进入与linux相关代码之前,会经历如下阶段。
(1)当系统上电或复位时,CPU会将PC指针赋值为一个特定的地址0xFFFF0,并执行该地址处的指令,在PC中,该地址位于BIOS中,它保存在主板上的ROM或Flash中。
(2)BIOS运行时按照CMOS的设置定义的启动设备顺序来搜索处于活动状态,并且可以引导的设备,若从硬盘启动,BIOS会将硬盘MBR(主引导记录)中的内存加载到RAM、MBR是一个512字节大小的扇区,位于磁盘上的第一个扇区中(0道0柱而1扇区)。当MBR被加载到RAM中之后,BIOS就会将控制权交给MBR。
(3)主引导加载程序查找并加载次引导加载程序。它在分区表中查找活动分区,当找到一个活动分区时,扫描分区表中的其他分区,以确保它们都不是活动的,当这个过程验证完成之后,就将活动分区的引导记录从至二个设备中读入RAM中并执行它。
(4)次引导加载程序加载linux内核和可选的初始RAM磁盘,并将控制权交linux内核源代码。
(5)运行被加载的内核,并启动用户空间应用程序。
具有如下特征就可以成为Bootloader
(1)可以再系统上电或复位的时候以某种方式执行,这些方式包括被BIOS引导执行,直接在NOR Flash中执行,NAND Flash中的代码被MCU自动复制到内部或外部RAM执行等。
(2)能将U盘,磁盘,光盘,NOR/NAND Flash,ROM,SD卡等存储介质,或将网口,串口中的操作系统加载到RAM,并把控制权交割操作系统源代码执行。
当内核映像被加载到RAM之后,Bootloader的控制权被释放。内核映像并不是可直接执行的目标代码,而是一个压缩过zImage或bzImage或uImage
并非zImage和bzImage或uImage映像中的一切都是被压缩的部分,映像中包含未被压缩的部分,这部分中包含解压缩程序,解压缩程序会解压缩映像中被压缩的部分,
阅读(615) | 评论(0) | 转发(0) |