在335x 中ROM code是第一级的bootlader。mpu上电后将会自动执行这里的代码,完成部分初始化和引导第二级的bootlader,第二级的bootlader引导第三级bootader,在ti官方上对于第二级和第三级的bootlader由uboot提供。 在嵌入式系统开发中,启动加载器(Bootloader)起着至关重要的作用,它负责在硬件上电或复位后初始化系统,并加载操作系统。AM335x是一款基于ARM Cortex-A8架构的微处理器,广泛应用于各种嵌入式设备。在AM335x的启动流程中,ROM code作为第一级Bootloader,执行初步的硬件初始化和引导第二级Bootloader,即U-Boot。U-Boot进一步初始化系统并加载第三级Bootloader,这一过程对于系统的稳定运行至关重要。 U-Boot SPL (Secondary Program Loader) 是U-Boot的一个子程序,用于在主U-Boot之前执行更基础的初始化任务。SPL框架的设计目标是统一不同平台的实现,减少代码重复,便于添加新的板卡支持。其主要功能包括: 1. 基本的ARM架构初始化:设置处理器状态,初始化内存管理单元(MMU)等。 2. UART串口初始化:为后续的命令交互和日志输出提供通信通道。 3. 时钟和DPLL锁定:配置系统时钟频率,确保系统正常运行。 4. SDRAM初始化:配置和校验内存,确保数据传输的正确性。 5. MUX配置:根据硬件需求设置引脚复用功能。 6. 启动设备初始化:识别启动媒介,如MMC1、MMC2、NAND或ONENAND。 7. 从启动设备加载真实的U-Boot,并传递控制权。 在分析AM335x的U-Boot SPL时,我们关注的是其代码结构。在`makefile`中,SPL主要复用了U-Boot的原有代码,涉及的目录包括`arch/arm/cpu/armv7`、`arch/arm/lib`以及`drivers`。`LDSCRIPT`指定链接脚本,定义了内存布局和数据段的位置。 `u-boot-spl.lds`链接脚本中,定义了SRAM和SDRAM的地址,以及`.TEXT`、`.bss`和`.data`等段的布局。`.TEXT`包含了代码,`.bss`用于未初始化的数据,`.data`则是已初始化的数据。 `start.S`是汇编语言实现的启动点,`.globl _start`声明了程序的入口点。异常向量表在此处定义,包含了处理器可能遇到的各种异常情况的处理函数入口。 `_start`之后的代码通常包括加载和执行真正的U-Boot的过程,如通过`ldr pc, _undefined_instruction`这样的指令来处理未定义指令异常,然后跳转到相应的处理函数。 通过对U-Boot SPL的分析,我们可以理解其在启动流程中的具体作用,以及如何与硬件资源进行交互。这对于开发、调试和优化嵌入式系统的启动性能是极其关键的。通过深入理解这些细节,开发者能够更好地应对各种启动问题,确保系统的稳定和高效运行。
- 粉丝: 4
- 资源: 969
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助