TQ2440之uboot---5.jlink 在線調(diào)試 u-boot
1. 首先修改u-boot源碼的兩個文件
1.1 將u-boot根目錄下的config.mk,
#DBGFLAGS= -g改成:DBGFLAGS=-gdwarf-2
1.2 將 u-boot/cpu/arm920t/config.mk 中的
PLATFORM_CPPFLAGS +=$(call cc-option,-mapcs-32,-mabi=apcs-gnu)
改成:
PLATFORM_CPPFLAGS +=$(call cc-option,-mapcs-32,$(call cc-option,-mabi=apcs-gnu),)
附錄中有解釋。
改好后 make EmbedSky_config && make all, 生成 u-boot.bin 和 u-boot兩個文件,其中u-boot.bin 只包含可執(zhí)行的二進制代碼及數(shù)據(jù)而u-boot是一個elf格式的可執(zhí)行文件。u-boot: ELF 32-bit LSB executable, ARM, version 1 (ARM), statically linked, not stripped
2. 將u-boot 和 u-boot.bin 拷貝到windows目錄下,例如: c:source
3. 連線,板子設為NorFlash啟動并接通電源,
4. 配置Jlink, 最后點擊 Target—>connect 出現(xiàn)Connect successfully.
注:JLINK相關的資料及使用方法可以在TQ2440_CDWindows平臺開發(fā)工具包Jlink資源 中找到,
使用方法見 《TQ2440開發(fā)板使用手冊V2.3_20100125.pdf》
第一次用到是在手冊4.1.3節(jié)
第二次用到是在手冊5.3.3節(jié)
5. 打開axd,
5.1 Options—> Configure Interface –> Session File 中設定axd的 Run Configure Script 腳本來配置sdram.
5.2 Options –> Configure Target 選定Jlink的 Multi-ICE
5.3 System Views –> Command Line Interface(或按Alt + L)
loadbinary c:sourceu-boot.bin 0x33d80000
loadsymbols c:sourceu-boot
setpc 0x33d80000
好了下面就可以單步調(diào)試了,以上只是匯編部分的調(diào)試方法,網(wǎng)上還有人說可以c語言單步調(diào)試,現(xiàn)在這項技術還沒有掌握,等搞定之后再研究c的調(diào)試。
1.注意此處是 -gdwarf-2而不是-gwarf,原因見如下連接:
http://againinput4.blog.163.com/blog/static/17279949120118901220684/
“正常編譯都是OK的,只是無意間,把一個編譯選項從:
DBGFLAGS= -gdwarf-2
設置為
DBGFLAGS= -gdwarf
結果導致編譯時候出錯:
cc1: error: invalid option `abi=apcs-gnu'
而不是預想的,如果識別不了編譯參數(shù)-gdwarf,那么至少會提示不識別此參數(shù),而不是給出不相關的其他錯誤啊。
所以,此處弄出個
cc1: error: invalid option `abi=apcs-gnu'
還真的很是無語,如果在不小心或者不知情的情況下,給了個錯誤的編譯參數(shù),結果編譯器卻沒有正確提示,那么真的很難找到問題到底出在哪,也就難解決問題了。
【總結】
如果以后編譯Uboot的時候,遇到此提示:
cc1: error: invalid option `abi=apcs-gnu'
可以考慮一下,有可能是,類似于我這里,給了個編譯參數(shù)
DBGFLAGS= -gdwarf,而arm-linux-gcc不識別,導致報出此問題。”
2原因見如下鏈接:
http://zhangzhiyin1982.blog.163.com/blog/static/28991217200753025619921/
“在make的過程中,出現(xiàn):
isystem /usr/local/arm/bin/../lib/gcc-lib/arm-linux/3.2/include -pipe -DCONFIG_ARM -D__ARM__ -march=armv4 -mtune=arm7tdmi -msoft-float -mabi=apcs-gnu -Uarm -Wall -Wstrict-prototypes -c -o hello_world.o hello_world.c
cc1: invalid option `abi=apcs-gnu'
出錯的文件是/cpu/arm920t/下的config.mk:將
PLATFORM_CPPFLAGS +=$(call cc-option,-mapcs-32,-mabi=apcs-gnu)
改成:
PLATFORM_CPPFLAGS +=$(call cc-option,-mapcs-32,$(call cc-option,-mabi=apcs-gnu),)
再make,就OK了。
注意:
1、u-boot-1.1.5(及更高版本)無法在arm-linux-gcc 2.95.3版本上編譯通過,無法識別“-MQ”參數(shù),該參數(shù)在rules.mk中設定;”