(一)问题描述
u-boot下新增了一条update的命令,直接输入update没有报错,但是输入up按TAB键补全时发现出现data abort,而且输入不支持的命令也会有data abort
(二)解决方法
最开始我包含的头文件为:
#include <command.h>
#include <common.h>
头文件改为下面后问题解决,但顺序不是最重要的原因,而是我用到了strncmp函数,头文件包含顺序出错
#include <common.h>
#include <command.h>
修改完成后效果:
(三)定位思路
1.最开始尝试下文的方法: 记一次uboot 中出现的 data abort 错误,文章写得很不错,但是当我反汇编以后,并没有解决问题,但是大概的问题可能找到了,按照上文提供的思路:
首先在mainloop函数打印出gd->reloc off = 13b000 ,出错PC的指针23f5fa6c,两者相减得到23e24a6c,查看反汇编语言得到:
这里只是看到可能是strncmp有问题,但是具体是谁调用了strncmp出错并没有给出,考虑是不是头文件的原因,加上linux/string.h头文件后,不用改变上面说的command.h和common.h的顺序也可以了
这里定位就到这里,问题已解决,待深究问题?为什么编译的时候没有报错,而是执行的时候报错了,理论来说头文件不包含编译就会报警告的