您的位置:首页 > 其它

Bootloader分析

2010-01-29 19:14 1271 查看
一. 在flash里,首先存放bootload, 其次启动参数,是内核和根文件系统。bootloader分两个部分,stage1和stage2:stage1: 汇编部分执行简单的硬件初始化.

1. 硬件设备初始化
2. 为加载bootloader的stage2准备RAM空间
3. 设置好堆栈
4. 跳转到stage2的C入口
stage2: C语言部分负责复制数据,设置启动参数和串口通信等
1. 初始化本阶段使用到的硬件设备
2. 检测系统内存映像
3. 将kernel映像和根文件映像从flash读到RAM中
4. 为内核设置启动参数
5. 调用内核
二. S3C2440A启动程序步骤:

1. 屏蔽所有中断,关看门狗。
2. 根据工作频率设置PLL寄存器
3. 初始化存储控制相关寄存器
4. 初始化各模式下的栈指针
5. 设置缺省中断处理函数
6. 将数据段拷贝到RAM中,将零初始化数据段清零
7. 跳转到C语言Main入口函数中
三. S3C2440A启动代码分析:

1.option.inc -->可修改的的配置选项.包括一些起始地址,初始状态,总线宽度,时钟频率等。倘若以后对系统的设置有变化,直接修改”option.inc”中的配置即可,无需大量改动boot loader.

_STACK_BASEADDRESS EQU 0x33ff8000;定义STACK 的起始地址

_MMUTT_STARTADDRESS EQU 0x33ff8000; 定义MMU表基地址

_ISR_STARTADDRESS EQU 0x33ffff00; 定义中断起始地址

PLL_ON_START; 设置PLL 初始状态

ENDIAN_CHANGE; 选择ENDIAN,具体值应该根据硬件的设置来定

ENTRY_BUS_WIDTH; 配置入口总线宽度

BUSWIDTH; 配置GPIO的总线宽度

CPU_SEL; 配置ARM chip ID

UCLK; 配置USB clock (见芯片手册214页)

XTAL_SEL; 配置晶振频率

FCLK; 配置FLCK

CLKDIV_VAL; 设置CLOCK DIVISION

根据设置CPU_SEL, UCLK, XTAL_SEL, FCLK, CLIKDIV_VAL是用 “if”语句来配置相应的参数如M_MDIV, M_PDIV, M_SDIV, U_MIDV, U_PDIV, U_SDIV

公式如下:Mpll=(2*m*Fin)/(p*2^s)

m=M(the value for divider M)+8, p=P(the value for divider P)+2

2.memcfg.inc-->配置ARM memory寄存器.

BANK1~BANK7的BWSCON

B1_BWSCON

B1_Tacs

B1_Tcos

B1_Tacc

B1_Tcoh

B1_Tah

B1_Tacp

B1_PMC

如果是SDRAM, 则还需设置REFRESH寄存器

3.2440addr.inc-->2440特殊寄存器地址定义。(未完待续)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: