linux上使用J-Link調試S3C2440裸機代碼
工具:
- segger的jlink仿真器
- segger的jlink for linux
- 交叉編譯工具鏈里面的arm-xx-linux-xx-gdb
- 初始化腳本
工具安裝
segger的jlink for linux
進入Segger官網--->Download--->J-Link/J-Trace--->J-Link Software and Documentation Pack。有deb、rpm、tgz三種包可供選擇,隨便選一個,我選的是tgz。由於我的仿真器是和諧版,所以我不敢選擇高版本的J-Link,選擇Older versions。下載一個比較老的,我下的是最老的。
解壓至你要安裝的目錄。里面有個README.txt,安裝說明操作。安裝完了為方便起見,記得export一下PATH。
交叉編譯工具鏈里面的arm-xx-linux-xx-gdb
這個不多介紹,你想自己編譯就編譯,想用別人制作好的也行。
初始化腳本
此初始化腳本是給arm-xx-linux-xx-gdb用的,gdb可以通過-x file.cmd
從文件里面指定命令序列。具體如下:
#初始化 S3C2440 CPU.
#定義一個函數(功能塊)
define reset_s3c2440
##設置小端模式,要和你跑的裸機程序一致.
monitor endian little
##copied from JLinkGDBServer Document.
monitor reset #復位 S3C2440
monitor reg cpsr = 0xd3 #設置 cpsr 寄存器.
monitor speed auto #Link Speed.
end
##main function defined for connect to the TARGET.
##arg0 = IP地址.
##arg1 = JLinkGDBServer端口號.
define connect_s3c2440
if $argc == 2
target remote $arg0:$arg1
reset_s3c2440
end
end
大概就是通過IP:PORT連接上JLinkGDBServer,然后下發一系列的指令初始化s3c2440。這些指令也可以手動逐個敲進去。
工作原理介紹
參考gdb工作原理
本地調試搞linux都熟悉。有時候由於資源限制、或者目標機不在現場,就需要借助gdbserver做遠程調試。可以這樣理解,gdb是由gdb前端和gdb后台組成,gdb前端負責和用戶交互,gdb后台負責和操作ptrace,在遠程調試時gdbserver提供一個后台和一個通訊接口與本地的gdb前端交互。gdb和gdbserver之間可以通過串口,usb,tcp/ip來通訊。一般來說gdbserver遠遠小於gdb,所以資源限制情況下直接放一個gdbserver到目標機里面,然后遠程調試。
JLinkGDBServer
JLinkGDBServer又相當於把gdbserver---->ptrace---->target替換成了gdbserver---->jlink--->jlink調試器---->target。JLink還有好多好玩的工具J-Link Remote Server、J-Link Commander、J-Link RTT Viewer、J-Link SWO Viewer等等。
調試步驟
1.代碼
https://github.com/tanghammer/mini2440_peripherals.git
2.硬件連線
按照jlink仿真器接線方式,啟動方式選擇NorFlash。
3.燒錄程序
Windows下操作:
- 啟動J-Flash
- file--->open project--->打開s3c2440.jflash
- file--->open data file--->選擇要燒錄的bin文件
- F7(Auto)
這樣程序就燒錄到了Norflash,下面是s3c2440.jflash分享鏈接。
鏈接:https://pan.baidu.com/s/17QSzRdSOImYv3LM1UROqiw
提取碼:vazg
4.啟動JLinkGDBServer
直接執行命令JLinkGDBServer
5.啟動GDB
arm-none-linux-gnueabi-gdb -x s3c2440_init -ex "connect_s3c2440 192.168.20.156 2331" ./sdram_elf
6.開始調試
load
b main
c