您的位置:首页 > 其它

u-boot ELF文件镜像的生成

2010-10-10 19:38 381 查看
u-boot ELF文件镜像的生成:

@依赖目标depend :生成各个子目录的.depend文件,.depend列出每个目标文件的依赖文件。生成方法,调用每个子目录的make _depend。

depend dep:

for dir in $(SUBDIRS) ; do $(MAKE) -C $$dir _depend ; done


@依赖目标version:生成版本信息到版本文件VERSION_FILE中。

version:

@echo -n "#define U_BOOT_VERSION /"U-Boot " > $(VERSION_FILE); /

echo -n "$(U_BOOT_VERSION)" >> $(VERSION_FILE); /

echo -n $(shell $(CONFIG_SHELL) $(TOPDIR)/tools/setlocalversion /

$(TOPDIR)) >> $(VERSION_FILE); /

echo "/"" >> $(VERSION_FILE)


@伪目标SUBDIRS: 执行tools ,examples ,post,post/cpu 子目录下面的make文件。

SUBDIRS = tools /

examples /

post /

post/cpu

.PHONY : $(SUBDIRS)

$(SUBDIRS):

$(MAKE) -C $@ all


@依赖目标$(OBJS),即cpu/start.o

$(OBJS):

$(MAKE) -C cpu/$(CPU) $(if $(REMOTE_BUILD),$@,$(notdir $@))


@依赖目标$(LIBS),这个目标太多,都是每个子目录的库文件*.a ,通过执行相应子目录下的make来完成:

$(LIBS):

$(MAKE) -C $(dir $(subst $(obj),,$@))


@依赖目标$(LDSCRIPT):
LDSCRIPT := $(TOPDIR)/board/$(BOARDDIR)/u-boot.lds

LDFLAGS += -Bstatic -T $(LDSCRIPT) -Ttext $(TEXT_BASE) $(PLATFORM_LDFLAGS)

对于smdk2410,LDSCRIPT即连接脚本文件是board/smdk2410/u-boot.lds,定义了连接时各个目标文件是如何组织的。内容如下:

OUTPUT_FORMAT("elf32-littlearm", "elf32-littlearm", "elf32-littlearm")

/*OUTPUT_FORMAT("elf32-arm", "elf32-arm", "elf32-arm")*/

OUTPUT_ARCH(arm)

ENTRY(_start)

SECTIONS

{

. = 0x00000000;

. = ALIGN(4);

.text :/*.text的基地址由LDFLAGS中-Ttext $(TEXT_BASE)指定*/

{ /*smdk2410指定的基地址为0x33f80000*/

cpu/arm920t/start.o (.text) /*start.o为首*/

*(.text)

}

. = ALIGN(4);

.rodata : { *(.rodata) }

. = ALIGN(4);

.data : { *(.data) }

. = ALIGN(4);

.got : { *(.got) }

. = .;

__u_boot_cmd_start = .;

.u_boot_cmd : { *(.u_boot_cmd) }

__u_boot_cmd_end = .;

. = ALIGN(4);

__bss_start = .;

.bss : { *(.bss) }

_end = .;

}


@执行连接命令:

cd $(LNDIR) && $(LD) $(LDFLAGS) $$UNDEF_SYM $(__OBJS) /

--start-group $(__LIBS) --end-group $(PLATFORM_LIBS) /

-Map u-boot.map -o u-boot


其实就是把start.o和各个子目录makefile生成的库文件按照LDFLAGS连接在一起,生成ELF文件u-boot 和连接时内存分配图文件u-boot.map。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: