以S3C6410 为例子,S3C6410 的内部SRAM 地址为0x0C00 0000 ~ 0x0C00 1FFF,DRAM 的Base 地址为0x50000000 ,S3C6410 支持NAND,SD 启动,S3C6410 里面有固化的ROM, 当系统上电的时候,将执行固化ROM 中的代码,然后检查硬件的GPIO 配置,如果配置成NAND 启动,则把NAND 的前8K 读入内部的SRAM(stepping Stone)中,然后跳转到 Stepping Stone 的开头,执行Bootloader1 (也就是下文的stepldr), stepldr 负责把eboot 从NAND中搬到DRAM 中,然后执行eboot( boot loader 2),eboot 通过网络下载 NK
bin 或者从NAND 中把内核搬到DRAM 中,然后执行WINCE 内核
所以整个启动过程分为三阶段,stepldr -->eboot --> wince kernel
下面详细地分析各个阶段
一 bootloader 1 stepldr 从stepldr 的startup
startup
s 主要是初始化硬件,中断,配置好C 运行的环境,然后跳转到main 函数中,执行C 代码
startuo
s 的流程是 : startup --> Enable I cache -->关闭watchdog ,Interrupt dosable -> 时钟初始化 --> 初始化DRAM 控制器 --> 初始化IRQ,SVC stack --> 判断是否睡眠 ---N--> Clear DRAM -->main --Y-> 跳到NK 的开头 (也就是DRAM + 0x100000 的地方) main
c : UART 初始化 --> nand 初始化 -> 从NAND 中把eboot 搬到DRA