U-Boot-2009-03移植笔记(从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岁也要写程序