2024年5月2日发(作者:gtx好还是rtx好)
以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通过网络下载
或者从NAND中把内核搬到DRAM中,然后执行WINCE内核.所以整个启动
过程分为三阶段,stepldr -->eboot --> wince kernel .
下面详细地分析各个阶段.
一 bootloader 1 stepldr
从stepldr的startup.s开始.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搬到DRAM中 -->跳
转到 eboot的开头
我们看代码有2个全局变量。
ROMHDR * volatile const pTOC = (ROMHDR *)-1; 这个在ROMImage里面会赋
值。
static BOOL g_bLargeBlock = FALSE; // For Large Block Check
这两个全局变量的位置为:500F0000 根据
二 bootloader 2 eboot
startup.s
startup --> Enable I cache -->关闭watchdog ,Interrupt dosable -> 时钟初始
化 --> Disable VIC --> enable 中断 -->CLEAR DRAM(从1M到128M地址的DRAM,
发布者:admin,转转请注明出处:http://www.yc00.com/xitong/1714579494a2473909.html
评论列表(0条)