Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2095359
  • 博文数量: 505
  • 博客积分: 1552
  • 博客等级: 上尉
  • 技术积分: 2514
  • 用 户 组: 普通用户
  • 注册时间: 2007-09-23 18:24
文章分类

全部博文(505)

文章存档

2019年(12)

2018年(15)

2017年(1)

2016年(17)

2015年(14)

2014年(93)

2013年(233)

2012年(108)

2011年(1)

2009年(11)

分类: LINUX

2013-05-02 16:10:19

根据网上的移植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启动
阅读(1122) | 评论(1) | 转发(0) |
给主人留下些什么吧!~~