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

mimic784887927 2014-07-22 05:16:01
硬件环境(选用的优龙公司的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源码的修改,请高手帮忙看下,谢谢!
...全文
243 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
mimic784887927 2014-07-23
  • 打赏
  • 举报
回复
引用 5 楼 zhxianbin 的回复:
那你要追溯 为什么 insize != 0
没有追朔到了,insize变量的初始值就是0了,里面还有一些汇编代码,昨天在网上看了下,有人说是交叉编译工具选用的版本号不对了!我换个交叉编译工具试下了!
zhxianbin 2014-07-22
  • 打赏
  • 举报
回复
那你要追溯 为什么 insize != 0
mimic784887927 2014-07-22
  • 打赏
  • 举报
回复
引用 3 楼 zhxianbin 的回复:
if (insize != 0) 怎么会死循环呢 ?!
error()函数为一个死循环函数! error(char *s) { AT91_debug_printk("...."); while(1); }
zhxianbin 2014-07-22
  • 打赏
  • 举报
回复
if (insize != 0) 怎么会死循环呢 ?!
mimic784887927 2014-07-22
  • 打赏
  • 举报
回复
引用 1 楼 Huntercao 的回复:
[quote=引用 楼主 lv784887927 的回复:] 网上下载引导uboot启动的boot源码进行编译生成boot.bin文件
该boot.bin是官方开发的版本么?从哪下载的?[/quote] 从pudn网站上下载的,看了下里面的代码应该是官方网站开发的版本,请问针对我的开发板,boot代码中应该修改什么呢,谢谢!
曹大夯 2014-07-22
  • 打赏
  • 举报
回复
引用 楼主 lv784887927 的回复:
网上下载引导uboot启动的boot源码进行编译生成boot.bin文件
该boot.bin是官方开发的版本么?从哪下载的?

21,600

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 驱动开发/核心开发
社区管理员
  • 驱动开发/核心开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧