"uboot启动及部分外设驱动加载流程分析"
本文档主要探讨了uboot在Zynq芯片上的启动过程以及关键外设的初始化,包括NAND Flash、以太网、串口、SD卡和USB。通过分析uboot的启动流程,读者可以更好地理解系统在启动阶段如何对外设进行管理和调试。
Uboot启动流程大致如下:
1. 系统上电后,根据链接脚本uboot.lds,首先执行start.S文件,设置异常复位入口地址。
2. 因ZYNQ的内存初始化在FSBL(First Stage Boot Loader)中完成,uboot跳过lowlevelinit.S,直接执行board_init_f函数,配置堆栈并进行代码重定位。
3. board_init_r函数中,系统开始初始化各种外设,包括NAND Flash、以太网、串口、SD卡和DDR等。
4. 调用main_loop函数,执行run_command命令,随后调用do_bootm命令来加载操作系统。
5. boot_prep_linux函数根据是否使用设备树来处理bootargs参数,然后boot_jump_linux负责加载操作系统。
在外设初始化方面:
1. NAND Flash:在board_init_r函数中调用nand_init()和board_nand_init()进行初始化。由于NAND、NOR和QSPI等闪存都使用SMC控制器,其基地址在hardware.h文件中定义。
2. 以太网:uboot通常会初始化以太网控制器,为网络通信提供支持。
3. 串口:串口驱动用于命令行交互,是uboot调试的重要工具。
4. SD卡:在启动过程中,如果系统使用SD卡作为存储介质,uboot会对其进行初始化,以便加载内核和文件系统。
5. USB:虽然介绍较为简略,但USB驱动也是设备驱动的一部分,用于连接USB设备和数据传输。
整个uboot启动的目标是加载内核和文件系统,最终运行应用程序,为用户提供服务。通过理解uboot启动流程和外设驱动加载,开发者可以更有效地调试和定制uboot,以适应特定硬件平台的需求。