(一)問題描述
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的順序也可以了
這里定位就到這里,問題已解決,待深究問題?為什么編譯的時候沒有報錯,而是執行的時候報錯了,理論來說頭文件不包含編譯就會報警告的