樹莓派JTAG詳細使用筆記

2022-01-28 嵌入式IoT
樹莓派JTAG詳細使用筆記



1.說明

有的時候,在調試代碼的時候,往往會藉助一些硬體調試工具,JTAG就是很好的調試工具。下面來詳細介紹一下如何在樹莓派上使用JTAG進行調試。

本文主要在樹莓派4上實現jlink調試功能。通過jlink+openocd調試樹莓派4。之後就可以通過gdb指令調試樹莓派4的程序了。

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

1

下面來詳細描述一下環境搭建與使用。

2.環境準備

對於gdb的使用,建議在Ubuntu上進行,這樣支持的更加友好。所以本次實驗的軟體部分主要是在Ubuntu上進行環境搭建與開發。

2.1 硬體連接

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

基本的引腳定義如下:

管腳名字gpio功能ALT4GPIO22ARM_TRSTGPIO24ARM_TDOGPIO25ARM_TCKGPIO26ARM_TDIGPIO27ARM_TMS

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

2

其引腳的定義如下:

3

實物連接可以看下面的圖片:

4

其中樹莓派接入一個jlink調試器。

5

放大後的引腳圖如下:

6

線路連接完成後,可以進行後續操作。

2.2 準備軟體安裝JLinkOB

首先必須安裝JLinkOB驅動。

7

因為是在Ubuntu上搭建環境,所以可以進行圖中下載,然後安裝

sudo dpkg -i JLink_Linux_V672c_x86_64.deb

看到如下的圖片則成功

8

驗證是否安裝成功,可以輸入:

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/

如果從其他渠道下載,後期調試時,可能會遇到如下的錯誤:

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

可以通過對腳本的配置實現。其樹莓派4的腳本可以在百度網盤中找到。

執行

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通過jlink的連接到樹莓派4上。

讓程序halt

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

看下面github中的實現

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

只有一段代碼

l: b l

在不斷執行循環程序。

而後修改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表示可執行的程序,這裡替換成自己的程序就可以運行正常的程序了。

開啟調試

「第一步:存放文件」

將啟動固件放到sd卡中。

將相關的文件放入,可以在我的網盤下進行下載:

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

提取碼:iq7m

將SD卡插入,插上電源,系統進入等待JTAG連接的模式。

「第二步:連接openocd」

通過下面的指令腳本進行連接

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內存鏡像到內存中。

本次實驗採用的是rt-thread的raspi4的系統進行調試。

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

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

11

然後就可以進行相關的調試了。

啟動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執行程序。

「第四步:啟動gdb調試」

在另外的一個控制臺輸入

aarch64-elf-gdb



接著輸入

target remote localhost:3333
file rtthread.elf

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

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

輸入layout src可以展開代碼

輸入layout reg可以查看寄存器

輸入layout split可以展開彙編

14

然後就可以按照gdb的方式進行調試了。

比如我們設置斷點為entry

break entry
c

然後就可以看到停到斷點處了

15

這樣調試程序起來就非常方便了。

3.總結

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

擁有好的分析代碼手段,將很容易的進行代碼定位與質量分析。在關鍵的時候,能夠發揮出巨大的作用,特別在對複雜代碼的邏輯分析上,也能很好的定位。

相關焦點

  • 樹莓派4有線網卡驅動調試筆記
    樹莓派4有線網卡驅動調試筆記1.概述2.樹莓派4的有線網卡簡介3.設計思路4.樹莓派4有線網卡上電初始化流程5.樹莓派4的有線網卡中斷通知6.調試總結1.概述在樹莓派4之前,有線網卡的驅動都是接在USB設備上,也就是說之前的樹莓派都是必須啟用了USB協議,然後再開啟網卡,這樣網速的差別以及網絡處理效率上的差別也就不敢恭維了。博通bcm的網卡晶片還是不錯的,這次為樹莓派4適配和千兆乙太網口,配上樹莓派4的a72的4核的晶片,真的算是非常的良心的開發板了。
  • 樹莓派使用入門:如何啟動一個新的樹莓派 | Linux 中國
    如果你按順序看我們本系列的文章,那麼你已經 選擇[1] 和 購買[2] 了你的樹莓派和外圍設備,現在,你將要去使用它。
  • 使用JLINK仿真器調試樹莓派4
    其中樹莓派4就是一個優秀的代表,4核cortext-A72的IP核心,高端上檔次。而且價格超級便宜,只需要200~300多塊RMB,搭配一個幾塊錢的USB串口,就可以玩樹莓派了。下面教大家如何使用JLINK仿真器來調試樹莓派4b。首先我們需要把樹莓派4連結到JLINK上。
  • 零基礎學習樹莓派_樹莓派4b安裝OpenCV4.4
    樹莓派學習筆記公眾號搜索--樹莓派OpenCV學舍
  • [20200101] 樹莓派 4B+ 安裝筆記
    ,4 啟動樹莓派樹莓派插上 SD 卡,插上 Type-C 電源線,插上鍵鼠。(注意:不要插上 HDMI 線,原先測試的時候,想看一下 WiFi 的連接狀態,結果無論如何都連不上 WiFi,後面重新刷了系統之後沒有連接 HDMI 線,樹莓派就自動連接上 WiFi 了,如果有知道什麼原因的小夥伴可以在評論區給我留言,感激不盡)5 連接樹莓派這兩天發現 Win10 自帶了 SSH。突然間覺得手上的 XShell6 不香了。
  • 樹莓派使用入門:你應該選擇哪種樹莓派? | Linux 中國
    本文是《14 天學會樹莓派[1]使用》系列文章的第一篇。
  • 樹莓派Raspberry開發從基礎到進階視頻+設計資料超詳細合輯
    [初級篇]重點推薦:樹莓派開發實戰視頻教程+文檔教程(含源碼)教學視頻與原始碼1.[進階篇]Raspberry詳細視頻教程樹莓派基礎安裝樹莓派的作業系統遠程登錄和使用樹莓派的命令行界面樹莓派的桌面環境使用方法使用樹莓派學習Linux C語言開發使用樹莓派學習腳本語言開發樹莓派的外部接口引腳的使用樹莓派小車系列之配件介紹樹莓派小車系列之模塊接線樹莓派小車系列之電機轉動樹莓派小車系列之底盤安裝
  • 如何給樹莓派安裝作業系統
    是的,這就是樹莓派的存儲,因此你要把作業系統裝到一張micro SD卡中。在安裝作業系統之前,你要準備一張至少8G的micro SD卡,但也不用太大,如果超過了64G你可能還會遇到一些奇怪的麻煩。樹莓派官方建議SD卡的寫入速度為class 4就可以了,並不是寫入速度越快就越好。
  • 樹莓派
    樹莓派別廣泛的使用在編程、構建贏家項目、家庭自動化項目、滲透測試、家庭影院機頂盒、遊戲模擬器、監視器等很多環境中。       網上購買的裸機版的樹莓派沒有散熱片、亞克力板、保護盒、風扇這些個東西。這些網上可以自己淘貨。
  • 第1講:樹莓派購買指南【子豪兄的零基礎樹莓派教程】
    文中提到的淘寶連結,詳細連結見文末。主板配套的外殼:推薦樹莓派紅白色官方外殼,美觀大方,組裝簡易。淘寶上也可以買到亞克力透明外殼、透明塑料外殼、金屬外殼、3D列印外殼等。淘寶搜樹莓派官方外殼、樹莓派外殼等即可搜到,從10元到30元不等。microSD卡:也叫TF卡、SD小卡,推薦使用16G存儲空間的Class10以上的microSD卡,比如Kingston的16G卡親測比較好用。
  • 【.NET 與樹莓派】使用 GPIO 庫
    上回老周在說準備工作的時候【.NET與樹莓派】上手前的一些準備工作,提到過樹莓派用金屬盒散熱的事情。
  • 樹莓派4安裝Archlinux筆記 | 拯救RPI系列
    前提筆者的樹莓派此前一直用的是樹莓派的官方系統(Raspberry Pi OS Lite),整體性能okay,但相比archlinux還是會出現一些不足,主要如下:官方10月30日推出了新版本系統,採用的是Debian Bullseye,測試發現第一個問題得到解決了。但另外兩個問題需要經常手動配置或者編譯,就很麻煩,不如直接切換Archlinux。
  • 在樹莓派 Pico 上使用 Unix:FUZIX
    FUZIX 由英國計算機科學家 Alan Cox 創建,是用於小型計算機的輕量級 Unix 作業系統。
  • 樹莓派官方發布Hi-Fi音頻設備,可集成到樹莓派
    近日,樹莓派官方發布了四款高保真(Hi-Fi)音頻播放設備 IQaudio,型號分別為 DAC +,DAC Pro,DigiAMP +和 Codec Zero,可以搭配 Raspberry Pi 設備使用,對 Hi-Fi 音質感興趣的 DIY 開發者可以通過樹莓派官方認證的渠道進行購買。
  • 樹莓派使用入門:用樹莓派學 Linux | Linux 中國
    在本系列的 第三篇文章[1] 中開始了我們的樹莓派探索之旅,我分享了如何安裝 Raspbian,它是樹莓派的官方 Linux 版本。
  • 教程|如何使用Qtum Stakebox樹莓派挖礦?
    待區塊同步完成之後,你可以向錢包內的地址發送Qtum幣進行Stake,也可以將之前備份過的錢包文件傳輸到樹莓派上進行恢復。樹莓派上的Qtum錢包使用方式和普通電腦上的錢包相同,可以參考教程: https://docs.qtum.site/zh/Qtum-Wallet-Tutorial/ 詳細的 Stake 挖礦教程可以參考 :https://docs.qtum.site/zh/How-to-Staking-with-Qtum/
  • 什麼是樹莓派?
    這是否意味著樹莓派適合兒童使用?幾乎不。儘管設備本身只有信用卡大小,但它的功能卻是驚人的。它具有您期望從計算機上獲得的大部分埠,例如 USB、乙太網和 HDMI。因此,當您設置它時,真的感覺就像您在使用一臺迷你的桌上型電腦。樹莓派多少錢?樹莓派多少錢設計得儘可能便宜。
  • 樹莓派使用入門:進入物理世界 —— 如何使用樹莓派的 GPIO 針腳 | Linux 中國
    在樹莓派最初發布時,最讓我感興趣的主要特性之一就是它的 通用輸入輸出[1](GPIO)針腳。GPIO 可以讓你的樹莓派程序與連接到它上面的傳感器、繼電器、和其它類型的電子元件與物理世界來交互。樹莓派上的每個 GPIO 針腳要麼有一個預定義的功能,要麼被設計為通用的。另外,不同的樹莓派型號要麼 26 個,要麼有 40 個 GPIO 針腳,你可以根據情況使用的。
  • 在樹莓派3上測試Modbus RTU通信
    關於Modbus TCP/IP在之前的文章中也推送過,因為樹莓派3的硬體串口和藍牙是公用的,所以在用串口通信的時候,需要對樹莓派做一些配置和設置。並關掉串口控制臺功能。需要運行sudo raspi-confg 命令配置
  • 玩轉樹莓派~入門
    樹莓派是尺寸僅有信用卡大小的一個小型電腦,您可以將樹莓派連接電視、顯示器、鍵盤滑鼠等設備使用。樹莓派能替代日常桌面計算機的多種用途,包括文字處理、電子表格、媒體中心甚至是遊戲。並且樹莓派還可以播放高至1080p的高清視頻。我們希望將樹莓派推廣給全世界的青少年電腦愛好者,用於培養電腦程式設計的興趣和能力。