UBoot200903移植笔记(从Nandflash启动二)

U-Boot-2009-03移植笔记(从Nandflash启动一)中,我们写好了nandflash的读驱动,并且试图将u-boot本身从nandflash中读到sdram中,最后同时点亮led1和led2,可惜结果并不是我们想要的结果,本文就使用openjtag的调试方法,来诊断问题(不熟悉调试方法的,请参考U-Boot-2009-03移植笔记(调试篇))。

问题的发现

我们反编译u-boot文件,发现我们的程序还是在33f800090调用了nand_init_ll函数,那么我们在0x00000090和0x00000094两个地址设置断点,如图:

发现程序在0x00000090之后就跑飞了,怎么办?我们看看u-boot的反汇编代码:

先看0x00000090,发现没有问题,如图:

再来看看nand_init_ll函数本身,发现函数地址是0x33f8dcf0,如果映射到0地址,应该是0x0000dcf0,超出4K,无法在sram中被执行。知道问题的原因,也就很好解决。

问题的解决

打开board/xinna2440/u-boot.lds,将nand_op.c的代码放到前4k:

重新编译,烧写,发现led1和led2都被点亮.

80岁也要写程序
原文地址:https://www.cnblogs.com/smartcoder/p/3104147.html