2017.01 U-Boot启动流程源码详解:关键步骤与初始化

需积分: 49 26 下载量 97 浏览量 更新于2024-09-05 收藏 16KB TXT 举报
本文档深入分析了U-Boot 2017.01版本的启动过程源码,主要关注Sunxi架构下的ARMv7处理器,如AM33XX平台。整个启动流程可以大致分为以下几个阶段: 1. **SPL阶段(Second Stage Loader)**: SPL是U-Boot的早期引导部分,首先在`u-boot-spl.lds`链接文件中,它链接了`vectors.S`和`start.S`,这是关键的初始化代码。`save_boot_params`函数保存系统启动参数,接着设置系统服务模式并关闭非安全中断(FIQ和IRQ)。`cpu_init_cp15`负责禁用MMU和缓存,以保护系统在初始状态下不受干扰。 2. **CPU初始化**: - `cpu_init_crit`函数进一步执行低级别初始化,通过`lowlevel_init.S`设置堆栈空间。 - `s_init`函数在`arch/arm/mach-ompa2/am33xx/board.c`中完成,涉及RTC(实时时钟)初始化以及特定于`AM33XX`板子的初始化。 3. **CRT0初始化**: - `_main`函数在`arch/arm/lib/crt0.S`中执行,这里包括更高级别的初始化。 - `board_init_f`是AM33XX板子的初始化函数,负责设置硬件状态,如禁止看门狗、配置串口等。 - `early_system_init`函数执行一系列早期系统设置,比如禁用看门狗、设置串口配置、初始化时钟等,这些操作在`board/ti/am335x/board.c`和`arch/arm/mach-ompa2/am33xx/clock.c`中完成。 4. **特定平台定制**: - `uart_soft_reset`函数对串口进行软件重置,确保通信初始化正确。 这个文档对于理解U-Boot启动流程、学习ARMv7架构下嵌入式系统的设计和调试非常有帮助,特别是对于嵌入式开发人员或研究者来说,它提供了深入了解底层硬件和操作系统交互的重要线索。阅读和研究这部分代码有助于优化启动性能,诊断硬件问题,或者进行定制化功能的添加。