免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 42173 | 回复: 68
打印 上一主题 下一主题

[BootLoader] 【2012-06-08更新】Uboot中start.S源码的指令级的详尽解析 v1.7 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-05-01 21:39 |只看该作者 |倒序浏览
本帖最后由 crifan 于 2012-06-08 22:50 编辑


以后所有内容更新,都放在这里:

Uboot中start.S源码的指令级的详尽解析 在线版


Uboot



中start.S源码的指令级的详尽解析

Version: 1.6

Author: green-waste (at) 163.com


说明,由于本文内容太长,不方便在这里一点点贴出来,所以,此处只是贴出来目录。

此贴,之前发布过一个版本了,这里之所有又重新开贴发表新版本,是因为的确是新版本增加了很多内容,而不是很少的更新。

因此,单独开了个帖子来发布。

截止2011-05-01,当前最新版本是v1.6.

对此内容感兴趣的话,自己下载PDF版本:

Uboot中start.S源码的指令级的详尽解析 v1.6.pdf (2.05 MB, 下载次数: 6371)


其他下载地址:

1.chinaunix博客请下载后一定要将后缀改为7z,再解压,即可。):

http://blog.chinaunix.net/attachment/attach/77/44/27/277744278a6fbb52c4ea9bb1f25fd651107a3697.pdf

2.csdn资源下载:

http://download.csdn.net/source/3240514

3.爱问iask:

http://ishare.iask.sina.com.cn/f/15046236.html

4.rayfile:

http://www.rayfile.com/zh-cn/files/1a590578-745e-11e0-b1a7-0015c55db73d/

5.豆丁在线阅读:

http://www.docin.com/p-193341236.html


-----------------------------------------------------------------------------------------



   目录
1. 正文之前 4
1.1. 本文内容 4
1.2. 本文目标 4
1.3. 代码来源 4
1.4. 关于本文内容的组织形式 4
1.5. 阅读此文所要具有的前提知识 5
1.6. 声明 5
2. start.S详解 6
2.1. 设置CPU模式 6
2.2. 关闭看门狗 19
2.3. 关闭中断 23
2.4. 设置堆栈sp指针 27
2.5. 清除bss段 36
2.6. 异常中断处理 48
3. start.S的总结 63
3.1. start.S各个部分的总结 63
3.2. Uboot中的内存的Layout 64
4. 相关知识点详解 67
4.1. 如何查看C或汇编的源代码所对应的真正的汇编代码 67
4.2. uboot初始化中,为何要设置CPU为SVC模式而不是设置为其他模式 69
4.3. 什么是watchdog + 为何在要系统初始化的时候关闭watchdog 70
4.3.1. 什么是watchdog 71
4.3.2. 为何在要系统初始化的时候关闭watchdog 71
4.4. 为何ARM7中PC=PC+8 71
4.4.1. 为何ARM9和ARM7一样,也是PC=PC+8 73
4.5. AMR寄存器的别名 + APCS 79
4.5.1. ARM中的寄存器的别名 79
4.5.2. 什么是APCS 81
4.6. 为何C语言(的函数调用)需要堆栈,而汇编语言却不需要堆栈 81
4.6.1. 保存现场/上下文 82
4.6.1.1. 什么叫做上下文context 82
4.6.2. 传递参数 82
4.6.3. 举例分析C语言函数调用是如何使用堆栈的 83
4.7. 关于为何不直接用mov指令,而非要用adr伪指令 84
4.8. mov指令的操作数的取值范围到底是多少 85
4.9. 汇编学习总结记录 89
4.9.1. 汇编中的标号=C中的标号 89
4.9.2. 汇编中的跳转指令=C中的goto 89
4.9.3. 汇编中的.globl=C语言中的extern 90
4.9.4. 汇编中用bl指令和mov pc,lr来实现子函数调用和返回 90
4.9.5. 汇编中的对应位置有存储值的标号 = C语言中的指针变量 91
4.9.6. 汇编中的ldr+标号,来实现C中的函数调用 93
4.9.7. 汇编中设置某个寄存器的值或给某个地址赋值 94
5. 引用 97

图表
图表 1 global的语法 7
图表 2 LDR指令的语法 9
图表 3 .word的语法 10
图表 4 balignl的语法 11
图表 5 CPSR/SPSR的位域结构 16
图表 6 CPSR=0xD3的位域及含义 18
图表 7 pWTCON 19
图表 8 INTMOD 19
图表 9 INTMSK 19
图表 10 INTSUBMSK 20
图表 11 CLKDIVN 20
图表 12 WTCON寄存器的位域 23
图表 13 INTMSK寄存器的位域 24
图表 14 INTSUBMSK寄存器的位域 25
图表 15 CLKDIVN的位域 26
图表 16 控制寄存器1的位域含义 44
图表 17 时钟模式 45
图表 18 关于访问控制位在域访问控制寄存器中的含义 45
图表 19 关于访问允许(AP)位的含义 46
图表 20 macro的语法 50
图表 21 LDM/STM的语法 50
图表 22 条件码的含义 51
图表 23 Uboot中的内存的Layout 66
图表 24 ARM中CPU的模式 69
图表 25 AMR7三级流水线 72
图表 26 ARM7三级流水线状态 72
图表 27 ARM7三级流水线示例 73
图表 28 ARM7三级流水线 vs ARM9五级流水线 74
图表 29 ARM7三级流水线到ARM9五级流水线的映射 74
图表 30 ARM9的五级流水线示例 75
图表 31 ARM9的五级流水线中为何PC=PC+8 77
图表 32 ARM Application Procedure Call Standard (AAPCS) 79
图表 33 ARM寄存器的别名 80
图表 34 数据处理指令的指令格式 87
图表 35 mov指令0xe3a00453的位域含义解析 88


版本历史
版本时间内容
1.02011-04-171.详细解释了uboot的start.s中的每行代码;2.添加了相关知识点的详细解释;
1.62011-05-011.添加汇编学习记录;2.添加了如何查看C或汇编的源代码所对应的真正的汇编代码;3.添加Start.S的总结;3.1 Start.S的各个部分的总结;3.2 Uboot中的内存的layout;4.更加详细地解释了为何ARM9中PC=PC+8;5.添加了一些其他的细节的内容;6.修正一些拼写错误;

评分

参与人数 1可用积分 +5 收起 理由
embeddedlwp + 5 赞一个!

查看全部评分

论坛徽章:
0
2 [报告]
发表于 2011-05-01 21:44 |只看该作者
本帖最后由 crifan 于 2011-05-05 20:16 编辑

系统终于正常,终于成功传了附件。。。

论坛徽章:
0
3 [报告]
发表于 2011-06-14 16:15 |只看该作者
感谢分享。

论坛徽章:
0
4 [报告]
发表于 2011-07-20 19:26 |只看该作者
学习一下!
谢谢!

论坛徽章:
0
5 [报告]
发表于 2011-07-21 17:01 |只看该作者
回复 1# crifan
本文确实该置顶

论坛徽章:
0
6 [报告]
发表于 2011-12-01 19:33 |只看该作者
谢谢楼主,我大致搞明白了,主要是因为之前没有想到位置无关的代码,谢谢了!

论坛徽章:
0
7 [报告]
发表于 2011-12-02 08:40 |只看该作者
楼主好人啊!

论坛徽章:
0
8 [报告]
发表于 2011-12-02 09:34 |只看该作者
mark~~~

论坛徽章:
0
9 [报告]
发表于 2011-12-20 15:01 |只看该作者
谢谢楼主

论坛徽章:
0
10 [报告]
发表于 2012-01-26 21:50 |只看该作者
好东西,慢慢研究。
这么多下载的都没人顶
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP