没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
1
U-boot
源码分析
启动内核的过程可以分为两个阶段,两个阶段的功能如下:
()第一阶段的功能
硬件设备初始化
加载 第二阶段代码到 空间
设置好栈
跳转到第二阶段代码入口
()第二阶段的功能
初始化本阶段使用的硬件设备
检测系统内存映射
将内核从 读取到 中
为内核设置启动参数
调用内核
1.1.1 U-Boot 启动第一阶段代码分析
第一阶段对应的文件是
和 !"!#。
启动第一阶段流程如下:
$
图 % 启动第一阶段流程
2
$
(先列出 在 %处理器启动中的几个关键点:
系统上电:
# 标号
%!! 标号
%
## 标号 %
% #!"!# 标号 & #!"!#
%
!! 标号
### 标号
#'(函数 #
%#'(函数
进入 命令行
1 Start.S 是 u-boot 整个程序的入口,该文件使用汇编语言编写,不同体系结构的启动代码是
不同的;low_level_init.S 是特定开发板的设置代码;board.S 包含开发板底层设备驱动;
main.C 是一个与平台无关的代码,u-boot 应用程序的入口在此文件中。)
根据 )*+, 中指定的连接方式:
-+.+#-+'/!01!/2%/!01!/2%/!01!/(
3-+.+#-+'/!01/2%/!01/2%/!01/(3
-+.+#45'(
67+8'#(
3
64+9-7
:
%;%<=
%;%>9?7'(=
!<%%%%%%@
:
%% '!<(
%%+, !"!#%%%%%'!<(
%%+,#!%%%%%%%'!<(
%%3'!<(
A
%;%>9?7'(=
%@%:%3'(%A
%;%>9?7'(=
%@%:%3'(%A
%;%>9?7'(=
%@%:%3'(%A
%;%=
#####%;%=
##%@%:%3'##(%A
#####!%;%=
%;%>9?7'(=
###%;%=
%@%:%3'(%A
#!%;%=
A 第一个链接的是 ,因此 的入口代码
在 中,其源代码在 中。下面我们来分析
的执行。//在天翔电子的相广超的视频里此文件并没有修改,为什么?
4
1. 硬件设备初始化
(1)设置异常向量
开头有如下的代码:
%#
#@ #! 3%复位,无条件转移到 start_code 标号 3
2%#!B!# 3$未定义指令向量 3
2%#0 !#! 3%$软件中断向量 3
2%#!0!# 3%%预取指令异常向量 3
2%## 3%$数据操作异常向量 3
2%##! 3%%未使用 3
2%#C 3%%C 中断向量 3
2%#BC 3%%BC 中断向量 3
3%%中断向量表入口地址 3
#!B!#@ %!B!#
#0 !#!@ %0 !#!
#!0!#@ %!0!#
##@ %#
##!@ %#!
#C@ %C
#BC@ %BC
$
%*2<!!!0
$
以上代码设置了 异常向量表,各个异常向量介绍如下:
表 % 异常向量表
地址 异常 进入模式 描述
<
$
复位 管理模式 复位电平有效时,产生复位异常,程序跳转
到复位处理程序处执行
<
$
未定义指令 未定义模式 遇到不能处理的指令时,产生未定义指令异
常
<
D
软件中断 管理模式 执行 E9 指令产生,用于用户模式下的程序
调用特权操作指令
<
预存指令 中止模式 处理器预取指令的地址不存在,或该地址不
5
允许当前指令访问,产生指令预取中止异常
<
数据操作 中止模式 处理器数据访问指令的地址不存在,或该地
址不允许当前指令访问时,产生数据中止异
常
<
未使用 未使用 未使用
<
D
9F 9F
外部中断请求有效,且 4. 中的 9 位为
时,产生 9F 异常
< 9F 9F
快速中断请求引脚有效,且 4. 中的 位
为 时,产生 9F 异常
在 中还有这些异常对应的异常处理程序。当一个异常产生时,
4. 根据异常号在异常向量表中找到对应的异常向量,然后执行异常向量处的跳转指令,
4. 就跳转到对应的异常处理程序执行。
其中复位异常向量的指令“#!G决定了 启动后将自动跳转到标号
“#!G处执行。
-start 标号下面的代码主要是一些伪指令,设置全局变量,供启动程序把 u-boot 映像从
FLASH 存储器复制到内存中。其中比较重要的是 TEXT_BASE,该变量通过连接脚本得到,
在本例中,TEXT_BASE 全局变量定义在 board/smdk/config.mk 中,默认值是
0x33f80000。TEXT_BASE 变量需要根据开发板的情况自己修改,具体地址需要根据硬件设计
确定。其他还有一些全局变量如_bss_start,_end 在 board/smdk2410/u-boot.lds 文件中。U-boot.lds
文件保存了 u-boot 数据段代码段等在内存中的存放情况,具体的值由编译器计算。
(2)reset 标号:
reset:
/*
* set the cpu to SVC32 mode
*/
mrs r0,cpsr
bic r0,r0,#0x1f3工作模式位清零 3
orr r0,r0,#0xd3 3工作模式位设置为“G(管理模式),并将中断禁止位和快中
断禁止位置 %3
msr cpsr,r0//写入 CPSR 的值强制切换处理器模式位为超级保护模式
/* turn off the watchdog ,以下为看门狗的设置*/
#if defined(CONFIG_S3C2400)
# define pWTCON 0x15300000 3%E+45H-? 控制寄存器地址3
剩余32页未读,继续阅读
资源评论
- BLLYB2002013-10-09这个好!很详细!正在学习中!
- BANXIAN20052019-10-16正需要,非常感谢。
- aqingzeng2014-02-10作者自己对源码的一些体会,比较详细,针对2440的uboot
Tom_殇子
- 粉丝: 30
- 资源: 56
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功