赞
踩
请阅读以下这篇文章,您将了解SPL和U-boot的代码流。
板初始化流程:
这是板的预期启动流程。这两者都适用
SPL和U-Boot正确(即它们都遵循相同的规则)。
注意:“SPL”代表“Secondary Program Loader”,如中所述,更多详细信息,请参阅本文件。
目前,SPL主要使用单独的代码路径,但是函数名每个功能的作用是相同的。一些板或架构
可能与此不符。至少大多数ARM板CONFIG_SPL_FRAMEWORK符合这一点。
执行通常是从特定于体系结构的(而且可能是特定于CPU)start.S文件,例如:
-arch/arm/cpu/armv7/start.S
-arch/powerpc/cpu/mpc83xx/start.S
- arch /mips/cpu/start.S
等等。从这里可以调用三个函数:目的和这些功能的限制如下所述。
lowlevel_init():
-目的:基本初始化以允许执行到达board_init_f()
-无global_data或BSS
-没有堆栈(ARMv7可能有一个堆栈,但很快就会被移除)
-不得设置SDRAM或使用控制台
-必须只执行最低限度的操作才能继续执行board_init_f()
-这几乎是不需要的
-从此函数正常返回
board_init_f():
-目的:设置机器准备运行board_init_r():i.e. SDRAM和串行UART
- global_data可用
-堆栈在SRAM中
-BSS不可用,因此不能使用全局/静态变量,仅堆栈变量和global_data
非SPL特定注释:
-调用dram_init()来设置dram。如果已经在SPL中完成什么也做不了
SPL特定注释:
这里BSS被清除。对于SPL,如果定义了CONFIG_SPL_STACK_R,则此时,堆栈和global_data将重新定位到下面配置文件栈地址。对于非SPL,U-Boot被重新定位为在内部的顶部。
board_init_r():
-用途:主执行,通用代码
- global_data 可用
-SDRAM可用
-BSS可用,可以使用所有静态/全局变量
-执行最终继续到main_loop()
非SPL特定注释:
-U-Boot被重新定位到内存顶部,现在正在从那里运行。
SPL特定注释:
-如果定义了CONFIG_SPL_STACK_R并且CONFIG_SPL_STACK_R_ADDR指向SDRAM,则堆栈在SDRAM中是可选的
-这里可以调用preloader_console_init()-通常是通过定义CONFIG_SPL_BOARD_INIT,然后提供包含此调用的spl_board_init()函数
-加载U-Boot或(在falcon模式下)Linux
如果您在当前的PSDK U-boot上找不到确切的代码流,请探索如何从grep命令的优势中获益。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。