发布网友 发布时间:2024-10-23 20:20
共1个回答
热心网友 时间:2024-10-30 15:33
针对U-BOOT启动流程的详细分析如下:
U-BOOT的启动从链接文件开始,如果没有进行编译,则直接从start.S文件启动。以u-boot-2009.11为例,对于S3C2440A处理器,内核为arm920t,文件位于cpuarm920tstart.S。
在start.S文件中,首先执行start_code函数。该函数中包括以下步骤:
1. 设置CPU为SVC32模式
2. 关闭看门狗、中断,设定时钟分频系数,通常这部分与板级初始化相关,位于boardsamsungsmdk2410lowlevel_init.S文件中。
3. CPU初始化,关闭MMU和缓存。
4. 跳转至lowlevel_init函数,执行boardsamsungsmdk2410lowlevel_init.S文件中的内存控制器初始化。
随后,返回到start.S文件,继续执行以下动作:
1. 将U-BOOT程序重定向至内存中运行。
2. 初始化栈。
3. 清除BSS段。
4. 跳转至board.c文件中的start_armboot函数,执行NOR FLASH、NAND FLASH、串口、网卡、MMC等设备的初始化。
在board.c文件中,start_armboot函数进一步执行设备初始化,并跳转至main.c文件中的main_loop函数。
在main.c文件中,main_loop函数主要进行以下操作:
1. 设置启动相关配置,如启动次数、Modem功能、版本号、启动延时等。
2. 循环读取用户输入,执行对应操作。
整个U-BOOT启动流程通过一系列的文件跳转完成,从start.S到lowlevel_init.S,再到board.c和main.c文件,最终实现设备初始化和程序运行。