毕业论文开发语言企业开发JAVA技术.NET技术WEB开发Linux/Unix数据库技术Windows平台移动平台嵌入式论文范文英语论文
您现在的位置: 毕业论文 >> linux >> 正文

改u-boot的代码命令行下任意输入某个命令后板子就挂掉了,串口上没有任何显示

更新时间:2012-7-24:  来源:毕业论文

正在改u-boot的代码,发现了奇怪的问题
1,步骤:我在代码中加入几条printf语句后,编译并烧写到板子上后,重启进入boot的命令行
  现象:在命令行下任意输入某个命令后板子就挂掉了,串口上没有任何显示
  修改:如果将新加入的这几行printf语句注释掉后,就恢复正常了

2,步骤:在函数内调用某个函数后,此函数中也有新加入的printf语句,编译并烧写到板子上后,重启进入boot的命令行
  现象:同上
  修改:将该函数注释掉后,恢复正常

排除硬件问题,因为已经试过几块板子,都有这问题;会不会是堆栈或内存之类的问题呢?
总结:推断应该是板子出现异常,但是在挂掉板子前,底层没有打印任意信息,在加上手头上也没有仿真器,不能对问题进行定位,现在很是纠结。


是否只要有printf调用,你的uboot都会死掉?
如果是,可能是printf相关的串口设置有问题。

以上情况,可能有几种可能的原因。第一:你的printf代码放在了串口初始化之前,应该还在之后;第二:没有初始化串口,printf在哪都不行。printf最终通过串口打印出来的有可能存在地址越界或者野指针,改写了代码段或者某个关键位置。加了printf可能刚好避开了这个修改。
如果把你加的造成问题的printf 换成别的代码会怎么样?应该是内存越界了,也就是缓冲区溢出。
你可以做这样的测试:
将原来printf语句改成其他没用的语句,例如:n=1;i++之类的。
看看板子是否会挂掉。

如果同样会挂掉,则可能的问题如下:
1、代码的其他部分有内存溢出之类的Bug,你添加了这些指令后,使得某处内存正好溢出。(这样的问题比较难排查。)排除的方法比较简单:在程序其他任意地方(最好是不同的函数层次中)加入这样的没用的语句,如果每次加入哪怕一条语句都会挂掉的话,就可以基本排除是内存溢出。
2、硬件设计可能有bug(指内存模块的设计,也许地址线什么的连错了)。

如果不会挂掉,则很可能是你使用printf有问题,要么使用了空指针之类的东西,要么打印的目标内存地址不对,造成了系统的崩溃。

设为首页 | 联系站长 | 友情链接 | 网站地图 |

copyright©chuibin.com 优尔论文网 严禁转载
如果本毕业论文网损害了您的利益或者侵犯了您的权利,请及时联系,我们一定会及时改正。