已经通过load ram方式跑起来的u-boot,现在需要烧写到NAND中去,在这里有一些关键的技术点需要牢记,其中最重要的是所有必要的代码都需要安排在整个代码段的前4KB,因为板子加电后,硬件会将NAND中前4KB的数据LOAD到s3c2410内部的一个SRAM区域。
在之前向NAND烧写U-BOOT的失败经历中总结到,虽然在Makefile中添加了lowlevel_init.o、nand_read.o,但实际上其代码在链接后没有被安排在u-boot.bin的前4KB,因此板子加电后,在SRAM中运行时,遇到bl lowlevel_init或bl nand_read_ll时,就不知道跑到什么地方去了,CPU在定位其代码的时候在SRAM中没有找到。
因此需要修改board/samsung/matrix4/u-boot.lds文件,这是链接器在安排代码、数据时所使用的文件,需要在text部分加入lowlevel_init.o及nand_read.o,如下:
.text :
{
cpu/arm920t/start.o (.text)
board/samsung/matrix4/lowlevel_init.o (.text)
board/samsung/matrix4/nand_read.o (.text)
*(.text)
}
这样,在编译过后,lowlevel_init.o、nand_read.o的代码段就被安排在了u-boot.bin前4KB的代码段中,以保证相关函数或过程的正常调用。
转载于:https://blog.51cto.com/lion3875/532297