最新消息:20210816 当前crifan.com域名已被污染,为防止失联,请关注(页面右下角的)公众号

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

工作和技术 crifan 2283浏览 0评论

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

Version: 1.6

Author: green-waste (at) 163.com


说明,由于本文内容太长,不方便在博客系统一点点贴出来,所以,此处只是贴出来目录,感兴趣的话,自己下载PDF版本:

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

 

Uboot中start.S源码的指令级的详尽解析 v1.6.pdf的下载地址

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.    清除bss36

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.0

2011-04-17

1.详细解释了ubootstart.s中的每行代码;

2.添加了相关知识点的详细解释;

1.6

2011-05-01

1.添加汇编学习记录;

2.添加了如何查看C或汇编的源代码所对应的真正的汇编代码;

3.添加Start.S的总结;

3.1 Start.S的各个部分的总结;

3.2 Uboot中的内存的layout

4.更加详细地解释了为何ARM9PC=PC+8

5.添加了一些其他的细节的内容;

6.修正一些拼写错误;

 

转载请注明:在路上 » Uboot中start.S源码的指令级的详尽解析 v1.6

发表我的评论
取消评论

表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

网友最新评论 (2)

  1. 兄弟,这是你写的吗?太强了。
    Rainny01013年前 (2011-06-23)回复
    • 是的。如果是转载,我肯定会注明的。没注明转载的,都是我自己写的。话说写这东西,很累人的说。
      carifan13年前 (2011-06-23)回复
84 queries in 0.171 seconds, using 22.31MB memory