全部博文(25)
分类: LINUX
2013-01-05 10:19:09
参考http://blog.mcuol.com/User/nidetech/Article/79007_1.htm
SPL代码分析:
分析SPL代码,首先要看一下SPL目录下的Makefile文件,在Makefile中:
CONFIG_SPL_BUILD := y
export CONFIG_SPL_BUILD
这个宏定义用于打开U-boot代码里有关SPL部分的分支.
另外,Makefile还交代了SPL涉及到的相关代码文件:
主要有 u-boot-2011.09-psp04.06.00.08\arch\arm\cpu\armv7
u-boot-2011.09-psp04.06.00.08\arch\arm\lib
u-boot-2011.09-psp04.06.00.08\drivers
等.
除了通过Makefile分析SPL涉及到的相关代码文件外,还可以简单的通过在编译SPL时,在make 后加上O=am335x来将所有的.o文件归类在一起,在am335x/spl目录下:
通过上面的图,可以很清楚的了解SPL在编译时涉及到U-Boot中的代码文件
# Linker Script
ifdef CONFIG_SPL_LDSCRIPT
# need to strip off double quotes
LDSCRIPT := $(addprefix $(SRCTREE)/,$(subst ",,$(CONFIG_SPL_LDSCRIPT)))
endif
该处指定了SPL的链接脚本文件
CONFIG_SPL_LDSCRIPT 在 u-boot-2011.09-psp04.06.00.08\include\configs\Am335x_evm.h中定义:
#define CONFIG_SPL_LDSCRIPT "$(CPUDIR)/omap-common/u-boot-spl.lds"
所以SPL的链接脚本是u-boot-2011.09-psp04.06.00.08\arch\arm\cpu\armv7\omap-common\u-boot-spl.lds
在u-boot-spl.lds中,空间分配如下:
MEMORY { .sram : ORIGIN = CONFIG_SPL_TEXT_BASE,\
LENGTH = CONFIG_SPL_MAX_SIZE }
MEMORY { .sdram : ORIGIN = CONFIG_SPL_BSS_START_ADDR, \
LENGTH = CONFIG_SPL_BSS_MAX_SIZE }
其中,CONFIG_SPL_TEXT_BASE、CONFIG_SPL_MAX_SIZE、CONFIG_SPL_BSS_START_ADDR、CONFIG_SPL_BSS_MAX_SIZE都是在Am335x_evm.h定义:
#define CONFIG_SPL_TEXT_BASE 0x402F0400
#define CONFIG_SPL_MAX_SIZE (101 * 1024)
#define CONFIG_SPL_BSS_START_ADDR 0x80000000
#define CONFIG_SPL_BSS_MAX_SIZE 0x80000 /* 512 KB */
因此,实际的空间分配如下:
MEMORY { .sram : ORIGIN = 0x402F0400, LENGTH = (101 * 1024) }
MEMORY { .sdram : ORIGIN = 0x80000000, LENGTH = 0x80000 }
SRAM从0x402F0400开始用于存放.TEXT段、.rodata段、.data段内容
SDRAM从0x80000000开始用于存放.bss段内容