Bootloader分析

一. 在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特殊寄存器地址定义。(未完待续)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值