ARM上电启动与Uboot代码深度解析

4星 · 超过85%的资源 需积分: 9 98 下载量 76 浏览量 更新于2024-07-23 1 收藏 1.22MB PDF 举报
"本文档详细分析了ARM处理器的上电启动流程以及Uboot引导加载器的代码结构,包括从上电后的第一条指令开始,到Uboot的链接脚本解析,再到start.S文件的关键函数解析,深入理解Uboot的初始化过程。" 在了解ARM处理器的上电启动时,首先要明白的是,当系统电源接通后,CPU会执行的第一条指令通常位于ROM或Flash存储器中。这个位置取决于系统的硬件设计,可能是Nor Flash或Nand Flash。Nor Flash以其直接执行代码的能力而闻名,数据可以按字节读取,而Nand Flash则以块为单位进行操作,成本较低但访问速度相对较慢。 进入Uboot的分析部分,链接脚本`Uboot.lds`扮演着至关重要的角色。链接脚本定义了程序在内存中的布局,包括各个段(如.text、.data、.bss等)的位置和大小。分析链接脚本有助于理解代码的加载和执行过程,例如,哪些代码是在引导阶段执行的,哪些数据是在运行时初始化的。 `start.S`是Uboot的入口点,它由汇编语言编写,负责初始化硬件环境,为C代码的执行做好准备。在`start.S`中,`_start`是程序的第一个标签,通常会调用`reset`函数来处理CPU复位。接下来,`cpu_init_cp15`初始化CPU的控制寄存器CP15,这涉及到处理器的配置,如缓存和MMU的设置。`cpu_init_crit`则负责设置关键的处理器状态,确保系统安全。`lowlevel_init`是更低层次的初始化,可能涉及时钟、中断控制器和其他硬件模块。 `s_init`函数进一步初始化系统,可能包括堆栈设置和内存检测。`call_board_init_f`调用了板级初始化函数,这些函数是特定于硬件平台的,用于初始化板子上的外设和设置。最后,`board_init_f`是整个初始化序列的一部分,根据不同的硬件需求执行特定的任务,比如设置GPIO、初始化网络接口等。 通过这样的分析,我们可以更深入地理解ARM系统如何从上电到启动Uboot,以及Uboot如何逐步初始化硬件,为Linux内核或其他操作系统加载做好准备。这份文档对于理解嵌入式系统的启动过程和进行相关开发具有很高的参考价值。
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