在看了鸡蛋的帖子后就到图书馆借了几本相关书籍学到了不少内容。在此把相关知识整理下。

Bootloader类似计算机中的BIOS,是芯片复位X后进入操作系统之前执行的代码,主要完成由硬件启动i到操作系统启动的过渡(即Boot和Loader功能的组合);完成系统的初始化,加载引导自身和嵌入式系统;为操作系统提供基本的运行环境,如初始化处理器、堆栈、存储器系统等。其代码与芯片的内核结构、具体型号、嵌入式系统的配置及使用的操作系统等因素有关。
由于Bootloader的实现依赖于处理器a的体系结构,因此大多数Bootloader都分为两部分:依赖于处理器体系结构的代码,通常放在第一步中,用汇编语言来实现;第二步通常用C语言来实现较为复杂的功能,而且由于C语言的硬件体系结构无关性,使代码具有更好的可读性和可移植性。
第一步执行的先后顺序 硬件设备初始化;为加载Bootloader的第二步准备RAM空间,即存储空间的初始化;拷贝Bootloader第二步代码到RAM中;设置好堆栈;跳转到第二部的C语言o入口点。
第二步执行的先后顺序 初始化本阶段要使用到的硬件设备;检测.系统内存映射(Memory map);将kernel映像和根文件系统映像从Flash读到RAM中;为内核设置启动参数;调用内核。

下面总结Bootloader通常实现的功能。由于Bootloader的实现依赖于CPU的体系结构,因此大多数Bootloader都分为2个步骤。步骤1通常依赖于CPU体系结构的汇编语言实现,完成系统初始化;而步骤2则通常用具有更好的可读性和移植性的C语言实现D,用于实现较为复杂功能,如串口通信、TFTP、NFS等。步骤1和步骤2的流程如图1和图2所示。
(图1占位) 新建 BMP 图像.jpg
图1

2007-12-13 21:19

步骤1用于实现前面给出的两种Bootloader中start.S及其相关的汇编程序实现的功能。包括:RAM初始化,为加载Bootloader的第二步准备RAM空间;设置各个部件的时钟和片选,拷贝Bootloader的步骤2到RAM空间中;设置堆栈;调用步骤2,跳转到步骤2的C入口。在步骤2中,执行流程部分是可调整的,即不同的Bootloader的操作流程可以不同,但在步骤1中的必要设置在每个Bootloader中都是必需的。
步骤2通常是用C语言完成的,包括再次使用C语言初始化本阶段要使用到的硬件设备,如串口、看门口、中断控制器等(主要是为了提高这部分程序的可移植性);显示菜单,通过菜单获取用户输入并执行相应操作,如初始化;调用应用程序或启动内核。图2中执行的例程是可选的,也可在Bootloader进行裁剪时直接根据自己的嵌入式系统进行选择。


转自伊甸园 谢谢原作者的努力啊

oiz99kimo 發表在 痞客邦 留言(1) 人氣()