我们通过board/smdk2410/config.mk来分析运行时的内存分布情况
board/smdk2410/config.mk:
#
# SMDK2410 has 1 bank of 64 MB DRAM
#
# 3000'0000 to 3400'0000
#
# Linux-Kernel is expected to be at 3000'8000, entry 3000'8000
# optionally with a ramdisk at 3080'0000
#
# we load ourself to 33F8'0000
#
# download area is 3300'0000
#
TEXT_BASE = 0x33F80000
在顶层config.mk中:
ifdef BOARD #指定特定板子的镜像连接时的内存基地址,相当重要!
sinclude $(TOPDIR)/board/$(BOARDDIR)/config.mk # include board specific rules,即/u-boot-1.1.6/board/smdk2410/config.mk
endif
从默认的u-boot代码及注释可知,smdk2410的memory为64M, 接在了nGCS6上即0x3000’0000到0x3400’0000的区域上,而准备把linux内核放在0x3000’8000的位置,如果有ramdisk的话则放在0x3080’0000的位置,而把u-boot自己放在0x33F8’0000的位置。TEXT_BASE在启动的第一阶段中的重定位的时候会用到。最终把linux内核成功引导后的内存分布情况如下: