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特殊寄存器地址定义。(未完待续)
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特殊寄存器地址定义。(未完待续)
相关文章推荐
- bootloader的启动流程分析
- 结合PXA270 Bootloader实例详细分析ARM映象文件
- U-BOOT全线移植分析系列之一――――BOOTLOADER介绍
- 基于ARM的嵌入式系统Bootloader启动流程分析(S3C44B0X)
- S3C2440 BootLoader启动流程分析--startup
- bootloader分析
- STM32 BootLoader原理分析
- 基于S3C2440的bootloader详细分析
- s3c2410的Bootloader(Vivi)源代码分析
- 启动程序BootLoader的分析
- Linux中关于 -- Bootloader , Uboot的作用,和整个linux系统的启动过程分析
- 简单的bootloader分析(start.s)
- TI Cortex M3串口转以太网例程分析2-----bootloader
- arm调试的准备内容,注意事项,以及BOOTLOADER和散列表加装的分析
- BootLoader中PLL的初始化代码分析
- 开贴分析FL2440的bootloader
- WinCE6.0 BootloaderMain源码分析之OEMDebugInit
- U-boot在开发板上移植过程详解--bootloader架构分析
- WinCE6.0 bootloader 启动分析
- bootloader---2.U_BOOT_CMD分析