当前位置: 代码迷 >> 驱动开发 >> 针对at91rm9200芯片,从外部nor flash启动ubtoot遇到的有关问题
  详细解决方案

针对at91rm9200芯片,从外部nor flash启动ubtoot遇到的有关问题

热度:82   发布时间:2016-04-28 10:08:04.0
针对at91rm9200芯片,从外部nor flash启动ubtoot遇到的问题
硬件环境(选用的优龙公司的Yl9200开发板):
                  nor flash芯片选用的是intel的E28f128j3a
                  cpu芯片选用的是at91rm9200
uboot选用的版本为1.1.1
通过内部启动uboot时,uboot已经能够正常启动,但是将uboot通过nor flash启动时,遇到的问题如下。
1、移植好的uboot通过内部启动时,已经可以在sdram中运行。
2、从网上下载引导uboot启动的boot源码进行编译生成boot.bin文件,然后将boot.bin文件烧写到0x10000000地址,uboot.gz文件烧写到0x10010000地址时,发现uboot无法启动。引导文件卡在解压uboot.gz文件的地方,通过对boot源码进行分析,在解压uboot数据时,程序卡死在如下函数中:

static int fill_inbuf()
{
AT91F_DBGU_Printk("\n\r fill_inbuf is execing--lqs1\n\r");
//AT91F_DBGU_Printk(insize);
if (insize != 0) { //程序卡死
AT91F_DBGU_Printk("\n\r fill_inbuf ran out of input data--lqs2\n\r");
error("ran out of input data\n"); 
}

AT91F_DBGU_Printk("\n\r fill_inbuf is execing--lqs3\n\r");
AT91F_DBGU_Printk("\n\r fill_inbuf lqs--4 insize is\n\r");
inbuf = input_data;
insize = input_len;
inptr = 1;
return inbuf[0];
}
3、经分析,以上函数在insize变量不等于0时,程序进入error函数的死循环。
请问boot源码中那些地方需要修改,是因为没有读到uboot.gz在flash中存放的数据吗?还是在boot源码中需要修改对nor flash数据的初始化,本人感觉可能是因为没有读到flash中的数据造成的,但是不知道从何处下手进行boot源码的修改,请高手帮忙看下,谢谢!
------解决方案--------------------
引用:
网上下载引导uboot启动的boot源码进行编译生成boot.bin文件

该boot.bin是官方开发的版本么?从哪下载的?
------解决方案--------------------
if (insize != 0)  怎么会死循环呢 ?!
------解决方案--------------------
那你要追溯 为什么 insize != 0
  相关解决方案