根据网上的移植UBOOT的步骤进行移植的时候,在支持NORFLASH之前都是可以下载到内存(0x30000000地址处)直接启动的,在到支持NANDFLASH之后,下载到内存中就无法启动了(串口无任何输出),产生着这种现象的原因有两个
一是:在start.S汇编文件中存在这样的一个条件编译语句:
#ifndef CONFIG_SKIP_LOWLEVEL_INIT
bl cpu_init_crit
#endif
在
没有宏定义CONFIG_SKIP_LOWLEVEL_INIT的情况下,会跳转到cpu_init_crit中,该函数实现CPU与RAM的初始化,这
样在将程序下载到RAM中运行时,执行到给条件编译语句后,就会初始化内存,这样程序代码就会丢失,这样就会导致系统无法启动
二是:与变量TEXT_BASE = 0x33F80000也有关系
在/cpu/arm920t/start.s汇编文件中,有这样几句
adr r0, _start /* r0 <- current position of code */
ldr r1, _TEXT_BASE /* test if we run from flash or RAM */
cmp r0, r1 /* don't reloc during debug */
blne cpu_init_crit
意
思是看uboot目前是在sdram中还是在flash中,如果_start==_TEXT_BASE就表明在sdram中,而我们看看/board
/mini2440/config.mk可发现_TEXT_BASE=0x33F80000。而如果直接用d命令下载到内存中(使用默认地址
0x30000000),则造成了_start不等于_TEXT_BASE,因程序会认为目前不在sdram中,而进行将_start开始代码到
_TEXT_BASE的搬移,而用的搬移函数是copycode2ram,而这个函数只能用于nor nand
flash中代码的搬移,所以就存在问题。
解决方法:
经测试将DNW中的configuration->option->USB Port->Download Address中的地址改为0x33f80000,再使用d命令下载到内存中即可以启动信息。
但在在利用另一中方法即将TEXT_BASE=0x33F8000改为0x30000000,DNW中的下载地址依然还是0x30000000时,下载到内存中系统无法启动,个人认为在uboot的程序中还有地方需要修改,但是现在还没有找到解决办法。
注意:这样做的前提就是UBOOT已经实现NANDFLASH启动
阅读(1908) | 评论(1) | 转发(0) |