Linux Uboot第一阶段源码深度解析:start.S

5星 · 超过95%的资源 需积分: 9 6 下载量 33 浏览量 更新于2024-07-28 收藏 2.69MB PDF 举报
"这篇文档是针对Linux系统的Uboot第一阶段源码start.S的深度解析,主要面向想要从事Linux内核开发的学习者。作者green-waste(at)163.com提供了详细的指令级分析,并讨论了相关的重要知识点,如CPU模式设置、看门狗关闭、中断处理等。文档还涵盖了ARM处理器的一些基本概念,如寄存器别名、APCS、堆栈使用等,以及汇编和C语言在函数调用上的差异。" 正文开始: 1. **本文内容**:文档主要围绕Uboot启动加载器start.S的源码展开,详细解释了其中的每一步操作,包括设置CPU模式、关闭看门狗、配置中断、设置堆栈、清空bss段和处理异常中断。 2. **本文目标**:旨在帮助读者理解Linux Uboot启动过程的第一阶段,特别是对汇编语言和底层硬件操作有更深入的认识。 3. **代码来源**:未提供具体代码来源,但通常Uboot源码可以在其官方仓库找到。 4. **内容组织形式**:按照源码执行顺序逐步解析,每部分操作后都有相应的技术讲解。 5. **前提知识**:阅读本文需要具备ARM处理器基础知识,了解汇编语言,以及一定的Linux内核和Uboot工作原理。 6. **声明**:作者可能保留了版权,仅供学习交流使用。 **start.S详解**: - **设置CPU模式**:CPU从复位状态启动时通常处于管理模式,Uboot会将其切换到安全的SVC模式,以便进行后续的初始化操作。 - **关闭看门狗**:看门狗定时器用于检测系统是否死锁,初始化时关闭是为了防止在系统稳定运行前被不必要的重置。 - **关闭中断**:关闭中断可以确保初始化过程不被打断,保证系统初始化的顺序性和完整性。 - **设置堆栈sp指针**:初始化堆栈指针是为C语言环境的建立做准备,因为C语言依赖堆栈来保存和恢复函数调用的状态。 - **清除bss段**:bss段存放未初始化的全局变量和静态变量,初始化时清零确保程序的正确运行。 - **异常中断处理**:设置异常向量和中断处理程序,为系统运行期间可能出现的异常做好准备。 **相关知识点详解**: - **设置CPU模式**:选择SVC模式是因为它是最安全的用户态,适合系统初始化和运行用户级别的任务。 - **看门狗**:看门狗定时器是一种自恢复机制,防止系统因长时间无响应而冻结。 - **ARM7 PC=PC+8**:这是ARM指令流水线设计的结果,每次执行完一条指令,PC自动加8指向下一条指令。 - **ARM寄存器别名和APCS**:ARM寄存器有多种称呼,APCS(ARM Procedure Call Standard)定义了函数调用的规范。 - **堆栈与汇编语言**:汇编语言可以直接访问内存,不强制使用堆栈,而C语言的函数调用必须借助堆栈来保存和恢复上下文。 - **adr伪指令**:在某些情况下,adr比mov指令更合适,因为它能计算地址,而mov只能直接赋值。 - **mov指令操作数范围**:取决于具体的ARM架构,一般在16位或32位之间。 文档还包含了多个图表,如寄存器位域结构、控制寄存器的定义等,以辅助读者理解硬件层面的操作。 这篇文档为读者提供了一个深入了解Linux Uboot启动过程和底层硬件操作的窗口,通过解析start.S源码,帮助读者建立起从硬件到软件的桥梁。
2010-03-29 上传
所有资料来源网上,与朋友分享 u-boot-1.1.6之cpu/arm920t/start.s分析 2 u-boot中.lds连接脚本文件的分析 12 分享一篇我总结的uboot学习笔记(转) 15 U-BOOT内存布局及启动过程浅析 22 u-boot中的命令实现 25 U-BOOT环境变量实现 28 1.相关文件 28 2.数据结构 28 3.ENV 的初始化 30 3.1env_init 30 3.2 env_relocate 30 3.3*env_relocate_spec 31 4. ENV 的保存 31 U-Boot环境变量 32 u-boot代码链接的问题 35 ldr和adr在使用标号表达式作为操作数的区别 40 start_armboot浅析 42 1.全局数据结构的初始化 42 2.调用通用初始化函数 43 3.初始化具体设备 44 4.初始化环境变量 44 5.进入主循环 44 u-boot编译过程 44 mkconfig文件的分析 47 从NAND闪存中启动U-BOOT的设计 50 引言 50 NAND闪存工作原理 51 从NAND闪存启动U-BOOT的设计思路 51 具体设计 51 支持NAND闪存的启动程序设计 51 支持U-BOOT命令设计 52 结语 53 参考文献 53 U-boot给kernel传参数和kernel读取参数—struct tag (以及补充) 53 1 、u-boot 给kernel 传RAM 参数 54 2 、Kernel 读取U-boot 传递的相关参数 56 3 、关于U-boot 中的bd 和gd 59 U-BOOT源码分析及移植 60 一、u-boot工程的总体结构: 61 1、源代码组织 61 2.makefile简要分析 61 3、u-boot的通用目录是怎么做到与平台无关的? 63 4、smkd2410其余重要的文件 : 63 二、u-boot的流程、主要的数据结构、内存分配 64 1、u-boot的启动流程: 64 2、u-boot主要的数据结构 66 3、u-boot重定位后的内存分布: 68 三、u-boot的重要细节 。 68 关于U-boot中命令相关的编程 : 73 四、U-boot在ST2410的移植,基于NOR FLASH和NAND FLASH启动。 76 1、从smdk2410到ST2410: 76 2、移植过程: 76 3、移植要考虑的问题: 77 4、SST39VF1601: 77 5、我实现的flash.c主要部分: 78 6、增加从Nand 启动的代码 : 82 7、添加网络命令。 87