JavaScript is disabled on your browser. Please enable JavaScript to enjoy all the features of this site.
Uboot中start.S源码的指令级的详尽解析
正文之前
Sidebar
|
正文之前
目录
1. 本文内容
2. 本文目标
3. 代码来源
4. 阅读此文所要具有的前提知识
5. 声明
Contents
Search
正文之前
1. 本文内容
2. 本文目标
3. 代码来源
4. 阅读此文所要具有的前提知识
5. 声明
1. start.S详解
1.1. 设置CPU模式
1.1.1. globl
1.1.2. _start
1.1.3. ldr
1.1.4. .word
1.1.5. .balignl
1.1.6. _TEXT_BASE _armboot_start
1.1.7. _bss_start _bss_end
1.1.8. FREE_RAM_END FREE_RAM_SIZE
1.1.9. IRQ_STACK_START FIQ_STACK_START
1.1.10. cpsr
1.1.11. bic
1.1.12. orr
1.1.13. msr
1.2. 关闭看门狗
1.2.1. pWTCON INTMOD INTMSK INTSUBMSK CLKDIVN
1.2.2. ldr pWTCON
1.2.3. mov
1.2.4. str
1.3. 关闭中断
1.3.1. set INTMSK
1.3.2. set INTSUBMSK
1.3.3. set CLKDIVN
1.3.4. bl
1.4. 设置堆栈sp指针
1.4.1. stack_setup
1.4.2. calc stack
1.4.3. bl clock_init
1.4.4. adr
1.4.5. clear_bss
1.4.6. cal armboot size from _armboot_start
1.4.7. cal armboot size from CopyCode2Ram
1.5. 清除bss段
1.5.1. clear_bss
1.5.2. clear css loop
1.5.3. ldr pc
1.5.4. cpu_init_crit
1.5.5. disable MMU
1.5.6. clear bits
1.5.7. bl lowlevel_init
1.6. 异常中断处理
1.6.1. macros stmia
1.6.2. cal reg value and store
1.6.3. irq_save_user_regs irq_restore_user_regs
1.6.4. exception handlers
1.6.5. Launch
1.6.6. int_return
2. start.S的总结
2.1. start.S各个部分的总结
2.2. Uboot中的内存的Layout
3. 相关知识点详解
3.1. 如何查看C或汇编的源代码所对应的真正的汇编代码
3.2. uboot初始化中,为何要设置CPU为SVC模式而不是设置为其他模式
3.3. 什么是watchdog + 为何在要系统初始化的时候关闭watchdog
3.3.1. 什么是watchdog
3.3.2. 为何在要系统初始化的时候关闭watchdog
3.4. 为何ARM7中PC=PC+8
3.4.1. 为何ARM9和ARM7一样,也是PC=PC+8
3.5. AMR寄存器的别名 + APCS
3.5.1. ARM中的寄存器的别名
3.5.2. 什么是APCS
3.6. 为何C语言(的函数调用)需要堆栈,而汇编语言却不需要堆栈
3.6.1. 保存现场/上下文
3.6.1.1. 什么叫做上下文context
3.6.2. 传递参数
3.6.3. 举例分析C语言函数调用是如何使用堆栈的
3.7. 关于为何不直接用mov指令,而非要用adr伪指令
3.8. mov指令的操作数的取值范围到底是多少
3.9. 汇编学习总结记录
3.9.1. 汇编中的标号=C中的标号
3.9.2. 汇编中的跳转指令=C中的goto
3.9.3. 汇编中的.globl=C语言中的extern
3.9.4. 汇编中用bl指令和mov pc,lr来实现子函数调用和返回
3.9.5. 汇编中的对应位置有存储值的标号 = C语言中的指针变量
3.9.6. 汇编中的ldr+标号,来实现C中的函数调用
3.9.7. 汇编中设置某个寄存器的值或给某个地址赋值
参考书目
Search Highlighter (On/Off)