2017.01 U-Boot启动流程源码详解:关键步骤与初始化
需积分: 49 171 浏览量
更新于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架构下嵌入式系统的设计和调试非常有帮助,特别是对于嵌入式开发人员或研究者来说,它提供了深入了解底层硬件和操作系统交互的重要线索。阅读和研究这部分代码有助于优化启动性能,诊断硬件问题,或者进行定制化功能的添加。
126 浏览量
414 浏览量
295 浏览量
162 浏览量
119 浏览量
113 浏览量
107 浏览量
crystal_266
- 粉丝: 213
- 资源: 46
最新资源
- PL2302驱动.rar
- jotto-testing-project:为使用React构建的简单猜字游戏项目编写测试
- BASS 音频输出设备自动切换-易语言
- coding-notes
- foobarx.github.io
- C# Base64编码和解码 带源码.rar
- LiveTags in every eMail-crx插件
- 自动化码头内集卡作业调度优化.rar
- UITextViewExtras(iPhone源代码)
- JLINKV9.4 PCB-自动升级固件-教程.rar
- 博克
- blogwithaddexperience
- Stocks Market-crx插件
- jsp+mysql图书馆管理系统
- EXDUI2.0日期框扩展,支持时分秒-易语言
- saybeking.github.io