Bootloader代码分析报告
徐凯
2007-8-3
Bootloader代码分析报告 1
1. 启动代码分析 1
. 1
. 宏定义 5
. 判断是否是thumb指令 6
. 定义新程序、引入新符号 6
. 定义新程序、引入新符号 7
. 定义系统异常向量表 7
. 程序跳转宏定义 7
. 异常处理程序定义 7
. 声明C主函数程序入口 10
. 10
. 定义从FLASH启动程序的函数 11
. 11
. 引入S3C4510相关系统配置寄存器的地址 18
. 定义用于配置ROM和RAM的宏 18
. 定义用于配置SYSCFG的宏 18
. 定义用于初始化内存的函数InitMemory 18
. 定义用于初始化内存的函数InitMemory 20
. 定义内存重设置函数ResetMemSet 21
. 初始化21种中断源响应函数InitInterrupt 21
. 初始化18个外部I/O端口函数InitPort 21
. 初始化2个计时器的函数InitTimer 22
. 初始化2个串口函数InitUart 22
. 初始化栈函数InitStack 23
. 系统初始化函数InitSystem 24
启动代码分析
由于连接器参数中有-first ,所以先从这个文件开始分析。首先,列出源代码:
ModeMask EQU 0x1F
SVC32Mode EQU 0x13
IRQ32Mode EQU 0x12
FIQ32Mode EQU 0x11
User32Mode EQU 0x10
Abort32Mode EQU 0x17
Undef32Mode EQU 0x1B
IRQ_BIT EQU 0x80
FIQ_BIT EQU 0x40
;RomBaseAddr EQU 0
RamBaseAddr EQU &100
;RamEndAddr EQU &200
GBLS MainEntry
MainEntry SETS "main"
IMPORT $MainEntry
;**********************************************************
;シ・鯡ヌキミア默・
GBLL THUMBCODE
[ {CONFIG} = 16
THUMBCODE SETL {TRUE}
CODE32
|
THUMBCODE SETL {FALSE}
]
[ THUMBCODE
CODE32 ;for start-up code for Thumb mode
]
;******************************************************
AREA SelfBoot, CODE, READONLY
IMPORT UDF_INS_VECTOR
IMPORT SWI_SVC_VECTOR
IMPORT INS_ABT_VECTOR
IMPORT DAT_ABT_VECTOR
IMPORT IRQ_SVC_VECTOR
IMPORT FIQ_SVC_VECTOR
ENTRY
IF :DEF: |ads$version|
ELSE
EXPORT __main
__main
ENDIF
ResetEntry
b SYS_RST_HANDLER
b UDF_INS_HANDLER
b SWI_SVC_HANDLER
b INS_ABT_HANDLER
b DAT_ABT_HANDLER
b .
b IRQ_SVC_HANDLER
b FIQ_SVC_HANDLER
;******************************************************
MACRO
$Label HANDLER $Vector
$Label
sub lr, lr, #4
stmfd sp!, {r0-r3, lr}
ldr r0, =$Vector
ldr pc, [r0]
ldmfd sp!, {r0-r3, pc}^
MEND
UDF_INS_HANDLER
stmfd sp!
bootloader代码分析报告 来自淘豆网m.daumloan.com转载请标明出处.