ARM上电启动:Uboot初始化与地址映射详解
需积分: 50 176 浏览量
更新于2024-08-10
收藏 827KB PDF 举报
本文档深入探讨了板级初始化在PYNQ-Z2平台上的配置和引导过程,特别关注ARMv7架构下的Uboot源码分析。首先,文章介绍了上电后第一条指令的位置,指出当Uboot烧写在NorFlash中时,启动时_start标号通常位于0x0,但如果经过relocate阶段,会移动到TEXT_BASE位置,该值在board/~/config.mk文件中指定。接着,文章详细剖析了_start和reset这两个关键部分:
1. `_start`:这是程序的起始点,包含一个跳转指令,引导程序的执行。通过`.globl _start`声明它为全局变量,用于确保在整个程序中都能访问。当上电后,程序会从_reset标号开始执行。
2. `reset`:这是一个全局函数,标志着系统复位后程序的初始状态。它可能是程序的第一条实际指令,负责设置CPU寄存器、初始化硬件设备以及执行必要的系统初始化步骤。
随后,文档进一步探讨了Uboot的链接脚本(如Uboot.lds)的重要性,因为链接脚本负责将各个模块和数据正确地放置在内存中,包括地址映射和缓存管理。文章逐个解析了start.S文件中的多个关键函数,如`cpu_init_cp15`、`cpu_init_crit`、`lowlevel_init`等,这些函数涉及CPU初始化、中断处理、内存初始化以及调用board初始化函数。
板级初始化章节中,提到了如何将代码从Flash复制到RAM并最终跳转到RAM继续执行的过程,涉及`jump_2_ram`函数。此外,文档还概述了如何从Uboot引导到Linux内核,以及Uboot的异常处理机制,包括异常向量表、异常处理函数的跳转和真正处理函数的实现。
整个文档提供了一个详尽的入门指南,帮助读者理解ARM上电启动流程中的关键步骤,以及Uboot如何与硬件交互和管理系统初始化。这对于理解和调试嵌入式系统的开发人员来说具有很高的价值。
2019-11-18 上传
2021-01-24 上传
164 浏览量
2024-08-15 上传
2023-05-25 上传
2024-05-09 上传
2023-05-19 上传
2024-10-30 上传
2024-10-30 上传
物联网_赵伟杰
- 粉丝: 46
- 资源: 3967
最新资源
- Java集合ArrayList实现字符串管理及效果展示
- 实现2D3D相机拾取射线的关键技术
- LiveLy-公寓管理门户:创新体验与技术实现
- 易语言打造的快捷禁止程序运行小工具
- Microgateway核心:实现配置和插件的主端口转发
- 掌握Java基本操作:增删查改入门代码详解
- Apache Tomcat 7.0.109 Windows版下载指南
- Qt实现文件系统浏览器界面设计与功能开发
- ReactJS新手实验:搭建与运行教程
- 探索生成艺术:几个月创意Processing实验
- Django框架下Cisco IOx平台实战开发案例源码解析
- 在Linux环境下配置Java版VTK开发环境
- 29街网上城市公司网站系统v1.0:企业建站全面解决方案
- WordPress CMB2插件的Suggest字段类型使用教程
- TCP协议实现的Java桌面聊天客户端应用
- ANR-WatchDog: 检测Android应用无响应并报告异常