分类:
2008-03-17 21:49:03
最近看了一下系统上电启动过程,
总结一下,bootloader共有三种方式:Flash加载、RAM加载、文件系统加载。Flash加载:
1.CPU复位完成,执行第一条指令(往往为跳转指令)跳到BootRom内硬件初始化代码位置,进行初始化。
2.完成CPU初始化,设置CPU的段寄存器、堆栈指针等,完成其他硬件初始化。
3.硬件初始化完成,跳转到Flash存储器特定位置开始执行,这个位置一定是代码段(TEXT段)中的一个特定位置。
4.将Flash中的DATA节代码复制到RAM中。
5.完成后,根据BSS节大小,在RAM中预留内存空间,留给未被初始化的变量使用。汇编部分执行完毕,进入操作系统初始化阶段。
优点:节约物理内存,缺点是FlashRAM慢,性能影响较大。Flash是只读的,无法实现自我修改。操作系统核心编译时必须指定TEXT节,DATA节和BSS节的起始地址(开发困难)
。
RAM加载:
1,2同上。
3.位于BootRom中的代码,把位于Flash中的操作系统和应用程序的TEXT节从Flash中转移到RAM中,这个过程中,搬移代码要知道TEXT节的起始地址和大小,可以在操作系统映像的开始处设置一个数据结构指明大小和目标位置。
4.搬移DATA节。
5.完成RSS节在RAM中的预留
6.跳转到RAM中操作系统的入口点,启动系统。
从文件系统加载运行(需要额外的驱动):
1、2相同。
3.BootRom中的引导代码通过外部设备的驱动程序读取外部设备,把操作系统和应用程序加载到RAM中,可以不区分TEXT和DATA节,统一搬移。
4.完成二进制映像加载后,BootRom中代码设置操作系统预留BSS空间。
5.跳到系统入口点。
除了这几种加载方式外还有从串口,从以太网接口,,usb接口等加载方式,无非是在BootRom中实现一个驱动来完成设备数据的读取。