連接關(guān)系是這樣的:gdb —> openocd —>(這里需要兩個(gè)xx.cfg配置文件) jlink —> arm-a9板子文章來源:http://www.zghlxwxcb.cn/news/detail-690590.html
具體流程是這樣的:文章來源地址http://www.zghlxwxcb.cn/news/detail-690590.html
- 給jlink(硬件調(diào)試器)安裝驅(qū)動(dòng),用USB Driver Tool這個(gè)軟件,原因:openocd操控jlink只能通過libusb-winusb這個(gè)驅(qū)動(dòng),而ozone等調(diào)試端軟件卻只能通過原本的驅(qū)動(dòng),而USB Driver Tool這個(gè)軟件還能把驅(qū)動(dòng)恢復(fù)回去,所以更推薦這個(gè)。(注意:這個(gè)軟件安裝后,不會(huì)產(chǎn)生桌面快捷方式啥的,就在它的同級(jí)文件夾能找到安裝后的應(yīng)用了,用這個(gè)才是對(duì)的。如果是別的地方打開的,好像打開后在右鍵安裝,會(huì)提示簽名時(shí)間過期啥的,從而驅(qū)動(dòng)安裝不上)
? - openocd本質(zhì)上是一個(gè)gdbserver,使用命令行是:openocd -f 調(diào)試器.cfg -f 板子.cfg。有的使用只用一個(gè)配置文件即可 openocd -f xx.cfg,這是因?yàn)?xx.cfg 里包含了兩個(gè)配置文件,如下:(此時(shí)后面就不要再接 -f v7arm.cfg(這個(gè)配置文件和板子是息息相關(guān)的,將會(huì)告訴jlink把代碼加載到處理器的哪個(gè)起始地址,所以該腳本是處理器設(shè)計(jì)公司需要給的,除非是通用cpu)了,因?yàn)闀?huì)報(bào)錯(cuò) xx.dap已經(jīng)定義了,這是因?yàn)橄喈?dāng)于兩次-f v7arm.cfg了,?當(dāng)然會(huì)報(bào)錯(cuò)了)
這里需要注意的是,自從openocd 0.10版本后,v7arm.cfg里面的語法就不再支持?-chain-position 這個(gè)語法了,會(huì)報(bào)錯(cuò)(如果該腳本還用的是老的腳本語法),所以需要修改,就按照?qǐng)?bào)錯(cuò)這里提示的網(wǎng)址,點(diǎn)進(jìn)去,就有修改步驟,修改后就可以了。修改后的樣子如下所示:(具體的,或者參考一下openocd自帶的腳本文件寫法就明白了)
? - openocd通過命令行,openocd.exe ?-f C:/opt/xx.cfg?
就會(huì)輸出調(diào)試器電壓值,目標(biāo)板電壓值等信息,且等待 gdb通過3333端口連接它了
Info : Listening on port 3333 for gdb connections - 打開另一個(gè)命令行終端,輸入?
arm-none-eabi-gdb .\xx.out(注:out文件和elf文件是一樣的,都是帶調(diào)試信息的最終可執(zhí)行文件,都可以用,其實(shí)out文件才是新一代的可執(zhí)行文件,elf逐漸過時(shí)了)
進(jìn)入了gdb,再輸入
target remote localhost:3333
連接上了openocd后,再輸入
load,這個(gè)命令非常重要,因?yàn)樗艜?huì)告訴gdb將解析的.\xx.out的text段等內(nèi)容載入到板子對(duì)應(yīng)內(nèi)存去,此時(shí)cpu才能讀到且運(yùn)行程序,否則直接運(yùn)行會(huì)報(bào) no bound即找不到邊界。還有就是,該命令在gdb mi接口可能沒有,但是mi接口可以直接用cli接口命令的,因此mi接口模式下也直接用這個(gè)命令即可。
此時(shí)板子就等待運(yùn)行了,再輸入
break main
continue(全速運(yùn)行意思)
此時(shí)板子就能運(yùn)行的main函數(shù)入口而停下來了,就能正常使用gdb的調(diào)試命令了
到了這里,關(guān)于gdb openocd jlink arm-a9調(diào)試的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!