发布网友 发布时间:2024-10-23 20:20
共1个回答
热心网友 时间:2024-11-02 15:35
Uboot启动流程详解
Uboot的启动过程分为BL1和BL2两个阶段,本文主要聚焦于BL2阶段。BL1阶段的详细流程会在后续文章中介绍。无论启动介质如何,基本流程大体相同,让我们一起探索。
首先,Uboot的执行从u-boot.lds文件开始,这是链接脚本文件,定义了入口函数ENTRY(_start)的位置。通过查找或分析Makefile来定位特定的u-boot.lds。在文本段.text中,存放着执行代码。
接着是board_init_f函数,它调用init_sequence_f进行一系列初始化,包括串口、定时器、设备树、DM驱动模型等,还包括全局数据结构体。重要的是,它还执行了reloc_xxx函数,实现Uboot的重定向功能,将uboot镜像移动到高端内存区。
重定向技术是Uboot的关键特性,它在arch/arm/lib/crt0.S文件中实现,确保访问内存的正确性。setup_reloc函数帮助我们识别重定向后的地址。
重定向后的Uboot继续执行board_init_r,初始化外设并进入run_main_loop,最终执行main_loop。这个阶段涉及环境变量设置、命令行交互、预定义命令执行等。
总结起来,Uboot的启动过程涉及链接脚本、初始化、重定向和主循环等环节。深入理解这些步骤,对于嵌入式物联网开发者来说至关重要。如果你对某个部分有疑问,可在评论区交流。
参考资料:[1] board_init_f详解[2] 启动流程参考[3] main_loop相关内容
嵌入式艺术原创内容,原文链接:mp.weixin.qq.com/s/Mt-4...
版权声明:本文内容来源于网络,仅为知识分享,如需引用请注明出处。