www.久久久久|狼友网站av天堂|精品国产无码a片|一级av色欲av|91在线播放视频|亚洲无码主播在线|国产精品草久在线|明星AV网站在线|污污内射久久一区|婷婷综合视频网站

當(dāng)前位置:首頁 > 公眾號精選 > 嵌入式IoT

樹莓派JTAG詳細(xì)使用筆記

  • 1.說明

  • 2.環(huán)境準(zhǔn)備

    • 2.1 硬件連接

    • 2.2 準(zhǔn)備軟件

  • 3.總結(jié)


1.說明

有的時候,在調(diào)試代碼的時候,往往會借助一些硬件調(diào)試工具,JTAG就是很好的調(diào)試工具。下面來詳細(xì)介紹一下如何在樹莓派上使用JTAG進(jìn)行調(diào)試。

本文主要在樹莓派4上實(shí)現(xiàn)jlink調(diào)試功能。通過jlink+openocd調(diào)試樹莓派4。之后就可以通過gdb指令調(diào)試樹莓派4的程序了。

工欲善其事,必先利其器,有了更好的工具,讓開發(fā)的程序變得更加穩(wěn)定,同時也在后期對程序進(jìn)行定位分析的時候,也能很容易的進(jìn)行程序的跟蹤。

1

下面來詳細(xì)描述一下環(huán)境搭建與使用。

2.環(huán)境準(zhǔn)備

對于gdb的使用,建議在Ubuntu上進(jìn)行,這樣支持的更加友好。所以本次實(shí)驗(yàn)的軟件部分主要是在Ubuntu上進(jìn)行環(huán)境搭建與開發(fā)。

2.1 硬件連接

樹莓派的40pin引腳上其實(shí)是有jtag接口的,所以不用飛線,只需要杜邦線就可以實(shí)現(xiàn)線路連接。

基本的引腳定義如下:

管腳名字 gpio功能ALT4
GPIO22 ARM_TRST
GPIO24 ARM_TDO
GPIO25 ARM_TCK
GPIO26 ARM_TDI
GPIO27 ARM_TMS

為了更加方便的看清線路的連接,圖片標(biāo)識如下

2

其引腳的定義如下:

3

實(shí)物連接可以看下面的圖片:

4

其中樹莓派接入一個jlink調(diào)試器。

5

放大后的引腳圖如下:

6

線路連接完成后,可以進(jìn)行后續(xù)操作。

2.2 準(zhǔn)備軟件

安裝JLinkOB

首先必須安裝JLinkOB驅(qū)動。

7

因?yàn)槭窃赨buntu上搭建環(huán)境,所以可以進(jìn)行圖中下載,然后安裝

sudo dpkg -i JLink_Linux_V672c_x86_64.deb

看到如下的圖片則成功

8

驗(yàn)證是否安裝成功,可以輸入:

sudo JLinkExe

看到如下信息表示成功

9

「安裝openocd」

對于openocd的安裝,要支持樹莓派4,則可以到如下的鏈接去下載

https://github.com/xpack-dev-tools/openocd-xpack/releases/download/v0.10.0-13/xpack-openocd-0.10.0-13-linux-x64.tgz

對于Windows上的openocd,下載地址

https://gnutoolchains.com/arm-eabi/openocd/

如果從其他渠道下載,后期調(diào)試時,可能會遇到如下的錯誤:

raspi4.cfg:15: Error: invalid command name "dap"

可以通過對腳本的配置實(shí)現(xiàn)。其樹莓派4的腳本可以在百度網(wǎng)盤中找到。

執(zhí)行

sudo /home/bigmagic/tools/xpack-openocd-0.10.0-13-linux-x64/xPacks/openocd/0.10.0-13/bin/openocd -f /home/bigmagic/tools/xpack-openocd-0.10.0-13-linux-x64/xPacks/openocd/0.10.0-13/scripts/interface/jlink.cfg -f /home/bigmagic/openocd/raspi4.cfg

可以實(shí)現(xiàn)openocd通過jlink的連接到樹莓派4上。

讓程序halt

為了讓樹莓派程序在啟動的時候停下來,然后手動通過openocd加載固件到內(nèi)存,可以進(jìn)行如下操作:

看下面github中的實(shí)現(xiàn)

https://github.com/metebalci/baremetal-rpi/blob/master/01-infinite-loop/infloop.s

只有一段代碼

l: b l

在不斷執(zhí)行循環(huán)程序。

而后修改SD卡中的配置文件

enable_uart=1
arm_64bit=1
kernel=infloop.bin

enable_jtag_gpio=1
gpio=22-27=a4
init_uart_clock=48000000
init_uart_baud=115200

其中infloop.bin表示可執(zhí)行的程序,這里替換成自己的程序就可以運(yùn)行正常的程序了。

開啟調(diào)試

「第一步:存放文件」

將啟動固件放到sd卡中。

將相關(guān)的文件放入,可以在我的網(wǎng)盤下進(jìn)行下載:

https://pan.baidu.com/s/1F5toHNpt20tfVsmhzspw6Q

提取碼:iq7m

將SD卡插入,插上電源,系統(tǒng)進(jìn)入等待JTAG連接的模式。

「第二步:連接openocd」

通過下面的指令腳本進(jìn)行連接

sudo /home/bigmagic/tools/xpack-openocd-0.10.0-13-linux-x64/xPacks/openocd/0.10.0-13/bin/openocd -f /home/bigmagic/tools/xpack-openocd-0.10.0-13-linux-x64/xPacks/openocd/0.10.0-13/scripts/interface/jlink.cfg -f /home/bigmagic/openocd/raspi4.cfg

其中主要的命令就是

openocd -f xxx.cfg -f raspi4.cfg

連接完成可以看到打印信息如下:

10

主要注意的是三個端口的連接,這里控制openocd采用telnet,連接gdb的端口采用3333。

「第三步:通過telnet加載固件」

此時需要通過telnet去load內(nèi)存鏡像到內(nèi)存中。

本次實(shí)驗(yàn)采用的是rt-thread的raspi4的系統(tǒng)進(jìn)行調(diào)試。

https://github.com/RT-Thread/rt-thread/tree/master/bsp/raspberry-pi/raspi4

編譯完成生成rtthread.bin和rtthread.elf可以看到如下圖所示

11

然后就可以進(jìn)行相關(guān)的調(diào)試了。

啟動telnet

telnet localhost 4444

加載固件

halt
load_image /home/bigmagic/work/rt-thread2/bsp/raspberry-pi/raspi4/rtthread.bin 0x80000

表示將rtthread.bin固件加載到樹莓派4的0x80000地址處。

12

然后輸入

step 0x80000

表示從入口地址0x80000執(zhí)行程序。

「第四步:啟動gdb調(diào)試」

在另外的一個控制臺輸入

aarch64-elf-gdb


接著輸入

target remote localhost:3333
file rtthread.elf

此時程序就可以在入口函數(shù)處停留了。

「第五步:查看寄存器與代碼」

輸入layout src可以展開代碼

輸入layout reg可以查看寄存器

輸入layout split可以展開匯編

14

然后就可以按照gdb的方式進(jìn)行調(diào)試了。

比如我們設(shè)置斷點(diǎn)為entry

break entry
c

然后就可以看到停到斷點(diǎn)處了

15

這樣調(diào)試程序起來就非常方便了。

3.總結(jié)

上述介紹了樹莓派4上用jlink與openocd調(diào)試程序的過程。工欲善其事,必先利其器。

擁有好的分析代碼手段,將很容易的進(jìn)行代碼定位與質(zhì)量分析。在關(guān)鍵的時候,能夠發(fā)揮出巨大的作用,特別在對復(fù)雜代碼的邏輯分析上,也能很好的定位。


本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請及時聯(lián)系本站刪除。
關(guān)閉