Chinaunix

标题: 【2012-06-08更新】Uboot中start.S源码的指令级的详尽解析 v1.7 [打印本页]

作者: crifan    时间: 2011-05-01 21:39
标题: 【2012-06-08更新】Uboot中start.S源码的指令级的详尽解析 v1.7
本帖最后由 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, 下载次数: 6374)


其他下载地址:

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.修正一些拼写错误;

作者: crifan    时间: 2011-05-01 21:44
本帖最后由 crifan 于 2011-05-05 20:16 编辑

系统终于正常,终于成功传了附件。。。
作者: liseyy    时间: 2011-06-14 16:15
感谢分享。
作者: Young_Xu666    时间: 2011-07-20 19:26
学习一下!
谢谢!
作者: jtou100    时间: 2011-07-21 17:01
回复 1# crifan
本文确实该置顶
作者: q631951221    时间: 2011-12-01 19:33
谢谢楼主,我大致搞明白了,主要是因为之前没有想到位置无关的代码,谢谢了!
作者: walterpeng    时间: 2011-12-02 08:40
楼主好人啊!
作者: TerryJk    时间: 2011-12-02 09:34
mark~~~
作者: linux_gjp    时间: 2011-12-20 15:01
谢谢楼主
作者: vgbird    时间: 2012-01-26 21:50
好东西,慢慢研究。
这么多下载的都没人顶
作者: wode5130xm    时间: 2012-01-29 16:23
楼主好人
作者: ckf513728912    时间: 2012-02-02 00:05
谢谢分享
作者: asp00    时间: 2012-02-04 20:10

先顶后看!!
作者: hclin168    时间: 2012-02-15 13:11
very good !!!
thanks ~~~
作者: zehn_w    时间: 2012-02-17 16:26
LZ辛苦
资源mark~
作者: xuke87    时间: 2012-02-20 15:41
好东西,谢谢了
作者: xy598646744    时间: 2012-03-06 11:56
感觉不错的东东
作者: words_worth    时间: 2012-03-07 09:17
顶楼主,好东西。
作者: zzq宁静致远    时间: 2012-03-27 20:29
最喜欢无私奉献了
作者: armlife    时间: 2012-03-28 10:34
收藏学习了,谢谢楼主
作者: viperauter    时间: 2012-03-29 08:32
:wink:
作者: liuliuliu2    时间: 2012-03-30 09:10
学习中,谢谢分享

作者: yph007595    时间: 2012-04-06 16:05
我顶了,
作者: chich_cu    时间: 2012-04-11 16:25
顶一个
作者: jmyu2006    时间: 2012-04-26 15:18
绝对支持这种高品质的技术文章,希望看到楼主更多类似的总结。
作者: HateMath    时间: 2012-05-23 15:50
楼主原创?
一个字:牛逼
谢谢分享。
作者: xiaofenglinux    时间: 2012-05-23 16:41
研究的好深入,写得很详细,谢谢分享!
作者: tian2008zhe    时间: 2012-05-23 17:21
要看也要顶!
作者: axlrose    时间: 2012-05-26 00:09
已下载收藏了
感谢分享
作者: 空下这个座    时间: 2012-06-13 09:47
支持楼主,楼主好人啊。
作者: xxw19840406    时间: 2012-06-13 09:55
顶楼主      
作者: yph007595    时间: 2012-06-13 13:00
顶楼主,看来楼主对arm很熟悉了
作者: ckf513728912    时间: 2012-06-13 13:59
我                                                        顶
作者: 东方云滨    时间: 2012-06-21 14:04
必须顶啊,谢谢啊
作者: g050649    时间: 2012-06-22 03:02
谢谢分享!拜读了,楼主辛苦
作者: linxi_hnh    时间: 2012-07-17 16:10
谢谢  很好啊
作者: zhoujun24    时间: 2012-07-21 16:57
谢谢分享 哦!
作者: Jsheng258    时间: 2012-08-01 01:03
非常感谢!!!!!
作者: xiaoqiang_linux    时间: 2012-08-03 15:51
正想研究这个,感谢楼主
作者: hezhaoaqiang    时间: 2012-08-15 09:17
谢谢lz,学习~~
作者: mymach    时间: 2012-08-29 08:56
好资料,mark
作者: ruanwenlong18    时间: 2012-09-11 14:12
:wink:很好 帮助很大
作者: onlysuccess    时间: 2012-09-20 14:09
谢谢分享!!!
作者: xuhe1206    时间: 2012-09-21 09:25
刚刚才想学linux,刚刚才找到这个论坛
发现难度还是相当大滴啊
作者: 1354613072    时间: 2012-09-21 11:41
感谢楼主的无私奉献:wink:
作者: 8fu8    时间: 2012-09-23 23:25
楼主强大啊!
作者: yizhengming    时间: 2012-09-25 02:35
先下了 ...thanks.....
作者: windowsbbs126    时间: 2012-10-23 10:42
感谢分享:wink:
作者: th0530018    时间: 2012-10-23 13:32
非常好,谢谢!!
作者: hualiu0131    时间: 2012-10-25 20:22
学习了,谢谢
作者: luckyao    时间: 2012-10-31 23:30
感谢楼主分享教程
作者: tylerxiang    时间: 2013-06-14 10:15
心思细腻,讲解深入浅出。好!
作者: yhs0220    时间: 2013-06-18 08:18
uboot  source code
作者: 52621773    时间: 2013-07-01 14:53
感谢楼主分享.
作者: 南向路一    时间: 2014-02-17 21:24
谢谢了 学习了  辛苦
作者: sanchuyayun    时间: 2014-02-21 18:18
不错,慢慢学习
作者: 进击的菜鸟    时间: 2014-03-03 10:47
感谢楼主的奉献。。。。
作者: linux_zjf    时间: 2014-12-22 21:25
感谢分享。。。。。。。。。。。。。。。。
作者: hue2550    时间: 2015-01-11 21:50
mark~谢谢分享
作者: guo__qiu    时间: 2015-01-19 09:54
mark,回头再看
作者: lanyuflying    时间: 2015-01-28 14:46
不顶非好汉
作者: debian12345    时间: 2015-03-04 11:07
谢谢了
作者: greatliu1990    时间: 2015-03-05 22:42
楼主头象真漂亮!
作者: suiyufeng726    时间: 2015-03-24 21:44
真的需要!

作者: xiaocaovc    时间: 2015-04-19 18:47
非常好,谢谢分享
作者: cascle    时间: 2015-09-22 13:29
这个真的是非常好的东西
作者: zx920107    时间: 2015-12-23 14:47
好东西啊,学习了
作者: bjxydedu118    时间: 2016-10-25 09:35
辛苦!嵌入式开发学习3026827905






欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2