http://bbs.chinaunix.net/thread-2312785-1-1.html

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

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, 下载次数: 3845)

其他下载地址:

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.0 2011-04-17 1.详细解释了uboot的start.s中的每行代码;2.添加了相关知识点的详细解释;
1.6 2011-05-01 1.添加汇编学习记录;2.添加了如何查看C或汇编的源代码所对应的真正的汇编代码;3.添加Start.S的总结;3.1 Start.S的各个部分的总结;3.2 Uboot中的内存的layout;4.更加详细地解释了为何ARM9中PC=PC+8;5.添加了一些其他的细节的内容;6.修正一些拼写错误;

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

  1. Uboot中start.S源码的指令级的详尽解析(转)

    Uboot中start.S源码的指令级的详尽解析 转载于:https://www.cnblogs.com/LittleTiger/p/10877516.html

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

    Uboot中start.S源码的指令级的详尽解析 版本:v1.9 Crifan Li 摘要 本文对Uboot中的Start.S的源码的几乎每一行,都进行了详细的解析 本文提供多种格式供: 在线阅读 H ...

  3. Uboot中start.S源码的指令级的详尽解析【转】

    本文转载自:http://www.crifan.com/files/doc/docbook/uboot_starts_analysis/release/html/uboot_starts_analys ...

  4. NanoPi NEO Air使用七:获取并编译U-boot和Linux的源码

    NanoPi NEO Air使用一:介绍 NanoPi NEO Air使用二:固件烧录 NanoPi NEO Air使用三:OverlayFS.CPU温度和频率.wifi.蓝牙.npi-config ...

  5. Linux 信号量 源码,一文读懂go中semaphore(信号量)源码

    运行时信号量机制 semaphore 前言 最近在看源码,发现好多地方用到了这个semaphore. 本文是在go version go1.13.15 darwin/amd64上进行的 作用是什么 下 ...

  6. elementui组件_elementui 中 loading 组件源码解析(续)

    上一篇我们说了elementui如何将loading组件添加到 Vue 实例上,具体内容见上期 elementui 中 loading 组件源码解析. 这一篇我们开始讲讲自定义指令 自定义指令 关于自 ...

  7. elementui table某一列是否显示_elementui 中 loading 组件源码解析(续)

    上一篇我们说了elementui如何将loading组件添加到 Vue 实例上,具体内容见上期 elementui 中 loading 组件源码解析. 这一篇我们开始讲讲自定义指令 自定义指令 关于自 ...

  8. 在docker中编译tor 源码

    在docker中编译tor 源码 前言 一.docker中创建自定义镜像及容器 1. 创建镜像的目录并拉取Ubuntu16.04镜像: 2.书写Dockerfile,并build构建镜像 二.编译to ...

  9. 09 编译2022年最新的Linux kernel、U-Boot和BusyBox rootfs源码,并用QEMU模拟器运行

    编译2022年最新的Linux kernel.U-Boot和BusyBox rootfs源码,并用QEMU模拟器运行 作者 将狼才鲸 创建日期 2022-11-26 Gitee源码和工程地址:才鲸嵌入 ...

最新文章

  1. 专注NLP,竹间智能完成4500万美元B+轮融资
  2. ZIP 也能边下载边解压?流式解压技术揭秘!
  3. MySQL遇到Deadlock found when trying to get lock,解决方案
  4. ASP.NET GridView嵌套DataList实例
  5. java单例模式的应用_java单例模式的简单应用例子
  6. 痛!做C#半年,挣的不如做AI1个月?”看到第二句泪目……
  7. linux那些事之early pape fault
  8. Django模板层:模板继承 extends标签和block标签,csrf_token标签
  9. PostgreSQL中生成的列
  10. MyCat分布式数据库集群架构工作笔记0006---Mycat启动
  11. nodejs json转对象_nodejs读取xlsx格式文件
  12. leetcode771题
  13. redhat 安装 snort
  14. 全国软考中级软件设计师 学习笔记-数据流图部分
  15. 读一本自己心爱的书,冒什么风险都是值得的
  16. 计算机教室布置图cad,CAD制作平面图教程制作教室
  17. Hello CTP(七)——REM交易API
  18. 从贵价当道到平价之光,我们该如何看待全球智能穿戴市场之间的次元壁?
  19. matlab求dfa指数,关于使用MF-DFA方法计算广义Hurst指数的MATLAB操作问题
  20. 超全的电商数据指标体系分享,年底数据分析用得上

热门文章

  1. 添加或删除jupyter notebook的虚拟环境
  2. java 代码通用结构_java spring代码通用结构-java
  3. Linux有趣小工具命令,终端中的乐趣:6个有趣的Linux命令行工具
  4. mysql 5.6开启binlog_docker快速入门02——在docker下开启mysql5.6 binlog日志
  5. cvs有机添加剂检测_汽车到底有没有必要添加燃油添加剂,如果需要加从什么时间开始用...
  6. iphone照片删掉又出现_两个月前删的IPhone手机照片还有救?很简单,三招帮你轻松恢复...
  7. python dict下标_python数据类型性能问题
  8. nginx安装配置http、tcp代理
  9. eclipse远程连接Hadoop,用户认证失败
  10. There is no Action mapped for namespace [/]