Bootloader启动大多数都分为两个阶段.第一个阶段主要包含依赖于CPU的体系结构硬件初始化的代码,通常都用汇编语言来实现。这个阶段的任务有:
1、基本的硬件设备初始化(屏蔽所有的中断、关闭处理器内部指令/数据cache等)。
2、为第二阶段准备RAM空间。
3、如果是从某个固态存储煤质中,则复制Bootloader的第二阶段代码到RAM。
4、设置堆栈。
5、跳转到第二阶段的c程序入口点。
特别注意的地方:
在第一阶段中为什么要关闭cache?通常使用cache以及写缓冲是为了提高系统性能。但由于cache的使用可能改变访问主存的数量、类型和时间,因此Bootloader通常是不需要的。
第二阶段通常用C语言完成,以便实现更复杂的功能,也使程序有更好的可读性和可移植性,这个阶段的任务有:
1、初始化本阶段要使用到的硬件设备。
2、检测系统内存映射。
3、将内核映像和根文件系统映像从Flash读到RAM。
4、为内核设置启动参数。
5、调用内核。