TQ2440之uboot---5.jlink 在線調(diào)試 u-boot
1. 首先修改u-boot源碼的兩個(gè)文件
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兩個(gè)文件,其中u-boot.bin 只包含可執(zhí)行的二進(jìn)制代碼及數(shù)據(jù)而u-boot是一個(gè)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. 連線,板子設(shè)為NorFlash啟動(dòng)并接通電源,
4. 配置Jlink, 最后點(diǎn)擊 Target—>connect 出現(xiàn)Connect successfully.
注:JLINK相關(guān)的資料及使用方法可以在TQ2440_CDWindows平臺(tái)開發(fā)工具包Jlink資源 中找到,
使用方法見 《TQ2440開發(fā)板使用手冊(cè)V2.3_20100125.pdf》
第一次用到是在手冊(cè)4.1.3節(jié)
第二次用到是在手冊(cè)5.3.3節(jié)
5. 打開axd,
5.1 Options—> Configure Interface –> Session File 中設(shè)定axd的 Run Configure Script 腳本來(lái)配置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)上還有人說(shuō)可以c語(yǔ)言單步調(diào)試,現(xiàn)在這項(xiàng)技術(shù)還沒(méi)有掌握,等搞定之后再研究c的調(diào)試。
1.注意此處是 -gdwarf-2而不是-gwarf,原因見如下連接:
http://againinput4.blog.163.com/blog/static/17279949120118901220684/
“正常編譯都是OK的,只是無(wú)意間,把一個(gè)編譯選項(xiàng)從:
DBGFLAGS= -gdwarf-2
設(shè)置為
DBGFLAGS= -gdwarf
結(jié)果導(dǎo)致編譯時(shí)候出錯(cuò):
cc1: error: invalid option `abi=apcs-gnu'
而不是預(yù)想的,如果識(shí)別不了編譯參數(shù)-gdwarf,那么至少會(huì)提示不識(shí)別此參數(shù),而不是給出不相關(guān)的其他錯(cuò)誤啊。
所以,此處弄出個(gè)
cc1: error: invalid option `abi=apcs-gnu'
還真的很是無(wú)語(yǔ),如果在不小心或者不知情的情況下,給了個(gè)錯(cuò)誤的編譯參數(shù),結(jié)果編譯器卻沒(méi)有正確提示,那么真的很難找到問(wèn)題到底出在哪,也就難解決問(wèn)題了。
【總結(jié)】
如果以后編譯Uboot的時(shí)候,遇到此提示:
cc1: error: invalid option `abi=apcs-gnu'
可以考慮一下,有可能是,類似于我這里,給了個(gè)編譯參數(shù)
DBGFLAGS= -gdwarf,而arm-linux-gcc不識(shí)別,導(dǎo)致報(bào)出此問(wèn)題。”
2原因見如下鏈接:
http://zhangzhiyin1982.blog.163.com/blog/static/28991217200753025619921/
“在make的過(guò)程中,出現(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'
出錯(cuò)的文件是/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(及更高版本)無(wú)法在arm-linux-gcc 2.95.3版本上編譯通過(guò),無(wú)法識(shí)別“-MQ”參數(shù),該參數(shù)在rules.mk中設(shè)定;”