11
UBoot工作过程
UBoot启动内核的过程可以分为两个阶段,两个阶段的功能如下:(1)第一阶段的功能硬件设备初始化加载UBoot第二阶段代码到RAM空间设置好栈跳转到第二阶段代码入口(2)第二阶段的功能初始化本阶段使用的硬件设备检测系统内存映射将内核从Flash读取到RAM中为内核设置启动参数调用内核111UBoot启动第一阶段代码分析
第一阶段对应的文件是cpuarm920tstartS和boardsamsu
gmi
i2440lowlevel_i
itS。UBoot启动第一阶段流程如下:
f图21UBoot启动第一阶段流程
根据cpuarm920tubootlds中指定的连接方式:ENTRY_startSECTIONS0x00000000
ALIGN4textcpuarm920tstartotext
boardsamsu
gmi
i2440lowlevel_i
itotextboardsamsu
gmi
i2440
a
d_readotexttext
f……第一个链接的是cpuarm920tstarto,因此ubootbi
的入口代码在cpuarm920tstarto中,其源代码在cpuarm920tstartS中。下面我们来分析cpuarm920tstartS的执行。1硬件设备初始化
(1)设置异常向量cpuarm920tstartS开头有如下的代码:globl_start_startbldrldrldrldrldrldrldrstart_codepc_u
defi
ed_i
structio
pc_software_i
terruptpc_prefetch_abortpc_data_abortpc_
ot_usedpc_irqpc_fiq复位未定义指令向量软件中断向量预取指令异常向量数据操作异常向量未使用
irq中断向量fiq中断向量
中断向量表入口地址wordu
defi
ed_i
structio
_u
defi
ed_i
structio
_software_i
terruptwordsoftware_i
terrupt_prefetch_abortwordprefetch_abort_data_abort_
ot_used_irq_fiqworddata_abortword
ot_usedwordirqwordfiq
fbalig
l160xdeadbeef
以上代码设置了ARM异常向量表,各个异常向量介绍如下:
表21ARM异常向量表地址异常复位进入模式管理模式描述复位电平有效时,产生复位异常,程序跳转到复位处理程序处执行未定义指令未定义模式遇到不能处理的指令时,产生未定义指令异常软件中断管理模式执行SWI指令产生,用于用户模式下的程序调用特权操作指令预存指令中止模式处理器预取指令的地址不存在,或该地址不允许当前指令访问,产生指令预取中止异常数据操作中止模式处理器数据访问指令的地址不存在,或该地址不允许当前指令访问时,产生数据中止异常未使用未使用未使用外部中断请求有效,CPSR中的I位为0时,且产生IRQ异常0x0000001cFIQFIQ快速中断请求引脚有效,且CPSR中的F位为0时,产生FIQ异常
在cpuarm920tstartS中还有这些异常对应的异常处理程序。当一个异常产生时,CPU根据异常号在异r