在研究lowlevel_init.s这个文件的时候,发现被编译到4K以外的地址上了,结果导致芯片上电的时候程序一跳到这里就跑飞了,后来在网上找资料,发现可以修改LD的链接顺序,保证NAND FLASH上前4K的内容是我们想要的。
要修改LD的选项就要研究Makefile的内容了。先查看lowlevel_init.s所在目录的Makefile,知道其被编译进libfl2440.o中了。然后再查看uboot根目录底下的Makefile,知道LIBBOARD的值就是libfl2440.o,又有以下语句
$(obj)u-boot : depend / $(SUBDIR) $(OBJS) $(LIBBOARD) $(LIBS) $(LIBSCRIPT) $(obj) u-boot.lds
所以我修改u-boot.lds,在start.o的下面按照其格式强制加上libfl2440.o。
修改完成后重新编译,查看System.map文件,发现lowlevel_init这个函数的入口地址变为0x33f80bf0,而SMRDATA的地址变为0x33f80c1c了,说明修改成功。