免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 6902 | 回复: 3

[BootLoader] 【求解答】uboot 2011.03中的board_init_f()中的init_sequence无法正常执行 [复制链接]

论坛徽章:
0
发表于 2011-04-19 21:39 |显示全部楼层
本帖最后由 crifan 于 2011-04-19 21:40 编辑

最近遇到个问题,2011.03版本的uboot,tq2440的板子,在调试的时候,遇到很奇怪的事情,尝试N次,仍是失败:
uboot 2011.03的arch/arm/lib/board.c中:
如果把测试点亮led的函数s3c2440_led_on放在init_sequence之前,那么就可以正常执行s3c2440_led_on,点亮led。

  1. extern int s3c2440_led_on(void);
  2. ...
  3. init_fnc_t *init_sequence[] = {
  4. timer_init,  /* initialize timer */
  5. ... ...
  6. NULL,
  7. };

  8. void board_init_f (ulong bootflag)
  9. {
  10. ...
  11. gd->mon_len = _bss_end_ofs;

  12. s3c2440_led_on();

  13. for (init_fnc_ptr = init_sequence; *init_fnc_ptr; ++init_fnc_ptr) {
  14.   if ((*init_fnc_ptr)() != 0) {
  15.    hang ();
  16.   }
  17. }

  18. debug ("monitor len: %08lX\n", gd->mon_len);
  19. ...
复制代码
但是如果把该s3c2440_led_on放到init_sequence之中,即使是第一个要执行的函数,如下所示:

  1. extern int s3c2440_led_on(void);
  2. ...
  3. init_fnc_t *init_sequence[] = {
  4. s3c2440_led_on,
  5. timer_init,  /* initialize timer */
  6. ... ...
  7. NULL,
  8. };

  9. void board_init_f (ulong bootflag)
  10. {
  11. ...
  12. gd->mon_len = _bss_end_ofs;

  13. for (init_fnc_ptr = init_sequence; *init_fnc_ptr; ++init_fnc_ptr) {
  14.   if ((*init_fnc_ptr)() != 0) {
  15.    hang ();
  16.   }
  17. }

  18. debug ("monitor len: %08lX\n", gd->mon_len);
  19. ...
复制代码
结果程序都无法执行s3c2440_led_on,无法点亮led。
这个问题折腾了好久,怀疑过是函数调用堆栈没设置好的问题,但是后来排除此原因。
其他方面,实在想不通,是为何。
求高手指教,有知道的,帮忙分析一下。谢谢。

论坛徽章:
0
发表于 2011-04-20 08:08 |显示全部楼层
s3c2440_led_on是用汇编写的吗?一眼看不出来什么问题,先用skyeye单步试下。

论坛徽章:
0
发表于 2011-04-20 23:04 |显示全部楼层
回复 2# tempname3


    led那个函数,在start.S中也有一个版本,上面贴出来的,是C语言的版本,两个版本都是可以正常执行的。所以很杯具,找不出原因啊。。。

论坛徽章:
0
发表于 2011-10-30 21:55 |显示全部楼层
最后找到原因了,是在汇编跳转到C语音之前,自己添加的汇编的点亮led的调试代码,结果不小心加到了堆栈设置代码那几行的中间了,导致堆栈部分初始化有问题了,所以后面程序才会出现一些异常。
把汇编的调试代码,移到别的地方,不再影响堆栈初始化部分,就解决问题了。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

SACC2019中国系统架构师大会

【数字转型 架构演进】SACC2019中国系统架构师大会
2019年10月31日~11月2日第11届中国系统架构师大会(SACC2019)将在北京隆重召开。四大主线并行的演讲模式,1个主会场、20个技术专场、超千人参与的会议规模,100+来自互联网、金融、制造业、电商等领域的嘉宾阵容,将为广大参会者提供一场最具价值的技术交流盛会。




----------------------------------------

大会官网>>
  

北京盛拓优讯信息技术有限公司. 版权所有 16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122
中国互联网协会会员  联系我们:huangweiwei@it168.com
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP