注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

singleboy的博客

愿工作和生活中的点点滴滴与你分享。。。感谢各位同仁,让我跟着大家一起进步。

 
 
 

日志

 
 

J-Link for Linux安装并在Eclipse环境下链接J-Link GDB Severer调试  

2011-03-30 20:35:18|  分类: 嵌入式开发环境 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

一,安装前准备

1,软件安装平台:CentOS 5.5

2,开发板硬件环境:Mini2440

3,JLink驱动下载http://www.segger.com/cms/jlink-software.html,当前版本是V4.22

4,mini2440与J-LinkJTag接头对应信号连接

j-link 的4、6、8、10、12、14、16、18、20脚与 mini2440的8、10脚相连,这个信号是地。

j-link 的3、5、7、9分别对应mini2440的3、5、7、9脚。

j-link 的1、2脚接入mini2440的1、2脚,这个信号是电源。

j-link 的15脚接入mini2440的4脚,这个信号是nRESET。

j-link 的13脚接入mini2440的6脚,这个信号是TDO。

参考文章

http://hi.baidu.com/lufeeyy/blog/item/04d7be0794e524e108fa93e7.html

http://www.towoo.net/forum.php?mod=viewthread&tid=398&page=1&extra=#pid420

http://blog168.chinaunix.net/space.php?uid=24948934&do=blog&id=59831

 

二,安装JLlink

1,将JLink_Linux_V422安装包解压到/usr/local目录

首先进入/usr/local

[root@localhost smbroot]# cd /usr/local

[root@localhost local]# tar -xzvf /smbroot/JLink_Linux_V422.tgz

JLink_Linux_V422/

JLink_Linux_V422/JLinkExe

JLink_Linux_V422/libjlinkarm.so.4

JLink_Linux_V422/start

JLink_Linux_V422/libjlinkarm.so.4.22.0

JLink_Linux_V422/JLinkGDBServer

JLink_Linux_V422/README

JLink_Linux_V422/45-jlink.rules

[root@localhost local]#


2,进入到JLink_Linux_V422目录下,将库文件移动/usr/lib目录下

[root@localhost JLink_Linux_V422]# mv libjlinkarm.so.4 /usr/lib

[root@localhost JLink_Linux_V422]# mv libjlinkarm.so.4.22.0 /usr/lib

[root@localhost JLink_Linux_V422]#  45-jlink.rules /etc/udev/rules.d

运行start测试下

[root@localhost JLink_Linux_V422]# ./start

./JLinkExe: symbol lookup error: /usr/lib/libreadline.so.5: undefined symbol: PC

[root@localhost JLink_Linux_V422]#

编辑/etc/profile配置文件,为JLink建立环境变量 

在终端执行pwd命令查看下当前路径

[root@localhost bin]# pwd

/usr/local/CodeSourcery/Sourcery_G++_Lite/bin

[root@localhost bin]#

然后执行

[root@localhost bin]# vi /etc/profile

在打开的profile配置文件中的# Path manipulation的下面if语句后面加入下面粗体字部分

# Path manipulation

if [ "$EUID" = "0" ]; then

 pathmunge /sbin
        pathmunge /usr/sbin
        pathmunge /usr/local/sbin
        pathmunge /usr/local/arm/4.4.3/bin
        pathmunge /usr/local/CodeSourcery/Sourcery_G++_Lite/bin
        pathmunge /usr/local/JLink_Linux_V422

fi

然后保存退出。存盘后,重新启动Linux,打开终端,

在打开的文件中

3,对在CentOS 5出现错误的解决办法

<1>下载readline-5.2.tar.gz,地址http://www.filewatcher.com/p/readline-5.2.tar.gz.2037705.htm

 将readline-5.2.tar.gz解压到当前目录

<2>在shlib这个目录下的Makefile中定义的变量SHLIB_LIBS = 是为空的。将其中改为SHLIB_LIBS = -lncurses

进入../readline-5.2/shlib

[root@localhost ~]# cd ./readline-5.2/shlib

[root@localhost shlib]# ls

Makefile.in

在Makefile.in文件中查找字符串SHLIB_LIBS

 [root@localhost shlib]# grep -n "SHLIB_LIBS" Makefile.in

87:SHLIB_LIBS = @SHLIB_LIBS@

[root@localhost shlib]#

可以看到文件的第87行SHLIB_LIBS 变量是没有被赋值的,所以修改文件中的这个变量

[root@localhost shlib]# vi Makefile.in

在打开的文件中并在命令模式下输入命令

:set nu

可以看到每行的行号,定位到87行,可以看到

87 SHLIB_LIBS = @SHLIB_LIBS@

将其修改为

SHLIB_LIBS = @SHLIB_LIBS@ -lncurses

然后保存退出

在源代码根目录执行configure命令,其参数含义请参考http://wenku.baidu.com/view/d619e0ff910ef12d2af9e798.html

./configure --prefix=/usr --with-ncurses

然后执行make

[root@localhost readline-5.2]# make

再执行 make install

[root@localhost readline-5.2]# make install

完毕之后,进入到之前解压的JLink_Linux_V422下执行start

[root@localhost JLink_Linux_V422]# ./start

SEGGER J-Link Commander V4.22 ('?' for help)

Compiled Dec 17 2010 17:41:09

Can not connect to J-Link via USB.

J-Link>

提示说没有连到USB,将JLink插到USB口

执行连接到USB命令,注意,在VM右下角找到SEGGER J-Link的图标并单击,选择Connect(Disconnect from host),这样能从主机断开连到VM中Cent OS 5,然后执行

J-Link>usb

Connecting to J-Link via USB (Port: 0)

Updating firmware:  J-Link ARM V8 compiled Dec 16 2010 20:21:29

Replacing firmware: J-Link ARM V8 compiled Aug 18 2009 09:06:07

New firmware booted successfully

Communication timed out - Can not execute firmware update

J-Link>

 

三,将JLlink的USB线拔下在插上,执行USB连接命令

J-Link>usb
Connecting to J-Link via USB (Port: 0)
Can not connect to J-Link via USB.
J-Link>
再看JLink硬件,usb插头插上和拔掉均没有反应,在windows的设备管理器重做插拔测试时能看到Unkown Device,但不知何故?

经过百度搜索得知,是固件问题。


四,J-Link V8 固件烧录

1,下载烧录工具http://www.atmel.com/dyn/products/tools_card.asp?tool_id=3883

2,安装下载好的工具,安装好之后在桌面上会出现如下图标


J-Link for Linux安装并在Eclipse环境下链接J-Link GDB Severe调试 - singleboy - singleboy的博客


 3,擦出芯片并进入编程模式

打开J-Link外壳,可以找到J1和J2的两组跳线孔。

J-Link for Linux安装并在Eclipse环境下链接J-Link GDB Severe调试 - singleboy - singleboy的博客

 

使用USB线连接J-Link与PC机,以提供J-Link工作电源。

【1】短接J2处的两个孔约5秒。断开J2位置的两个孔的短接。然后拔掉J-Link与PC间的USB线(注意先后顺序)。

【2】短接J1处的两个孔。

【3】使用USB线连接J-Link与PC机,至少超过10秒后,拔掉USB线,停止给J-Link供电(说明:请确保此过程中J1处一直处于可靠的端接状态)。

【4】断开J1处的短接。


五,固件更新


1,双击桌面上的SAM-PROG v2.4图标,运行SAM-PROG v2.4烧录软件,按下图所示进行设置。

J-Link for Linux安装并在Eclipse环境下链接J-Link GDB Severe调试 - singleboy - singleboy的博客

 2,将J-Link V8通过USB线与PC机连接。此时,SAM-PROG v2.4软件中的Write Flash按钮将变为有效。(注意,先打开SAM-PROG v2.4再连接J-Link 与PC机)。

3,点击Write Flash 按钮,烧录固件,在烧录工程中,In 项显示为1,待烧录完成后,In 项显示为0,Active Connection将变为1。J-Link电路板上的指示灯为红色。

4,拔掉J-Link与PC机之间的USB线。

5,重新插上J-Link与PC机之间的USB线,J-Link电路板上的指示灯为绿色闪烁,然后常绿。

6,至此J-Link V8的固件已经更新完毕。  


六,连接J-Link调试

1,启动JLink,检查是否连接成功

[root@localhost openocd]# JLinkExe
SEGGER J-Link Commander V4.22 ('?' for help)
Compiled Dec 17 2010 17:41:09
Can not connect to J-Link via USB.
J-Link>usb(usb是连接测试命令)
Connecting to J-Link via USB (Port: 0)
DLL version V4.22, compiled Dec 17 2010 17:41:06
Firmware: J-Link ARM V8 compiled Dec  1 2015 11:42:48
Hardware: V8.00
S/N: xxxxxxxx
Feature(s): RDI,FlashDL,FlashBP,JFlash,GDBFull
VTarget = 0.000V

看到此信息,说明开发板没上电,给开发板上电后在连接
J-Link>usb
Connecting to J-Link via USB (Port: 0)
DLL version V4.22, compiled Dec 17 2010 17:41:06
Firmware: J-Link ARM V8 compiled Dec  1 2015 11:42:48
Hardware: V8.00
S/N: xxxxxxxx
Feature(s): RDI,FlashDL,FlashBP,JFlash,GDBFull
VTarget = 3.261V
Info: TotalIRLen = 4, IRPrint = 0x01
Info: CP15.0.0: 0x41129200: ARM, Architecure 4T
Info: CP15.0.1: 0x0D172172: ICache: 16kB (64*8*32), DCache: 16kB (64*8*32)
Info: Cache type: Separate, Write-back, Format A
Found 1 JTAG device, Total IRLen = 4:
 #0 Id: 0x0032409D, IRLen: 04, Unknown device
Found ARM with core Id 0x0032409D (ARM9)
JTAG speed: 100 kHz
J-Link>

2,启动J-Link GDB Server

重新打开一个终端并运行JLinkGDBServer

[root@localhost ~]# JLinkGDBServer
SEGGER J-Link GDB Server V4.22

JLinkARM.dll V4.22 (DLL compiled Dec 17 2010 17:41:06)

Listening on TCP/IP port 2331
ERROR: Can not connect to J-Link.

如果连不上,在windows下查启动下J-Link GDB Server看下能否连上

J-Link for Linux安装并在Eclipse环境下链接J-Link GDB Severer调试 - singleboy - singleboy的博客

 然后再VMware右下角有SEGGER J-Link提示的USB的图标上断开和主机的连接,连到Linux客户机上,再次尝试

J-Link for Linux安装并在Eclipse环境下链接J-Link GDB Severer调试 - singleboy - singleboy的博客

  
[root@localhost ~]# JLinkGDBServer
SEGGER J-Link GDB Server V4.22

JLinkARM.dll V4.22 (DLL compiled Dec 17 2010 17:41:06)

Listening on TCP/IP port 2331

J-Link connected
Firmware: J-Link ARM V8 compiled Dec  1 2015 11:42:48
Hardware: V8.00
S/N: xxxxxxxx
Feature(s): RDI,FlashDL,FlashBP,JFlash,GDBFull

J-Link found 1 JTAG device, Total IRLen = 4
JTAG ID: 0x0032409D (ARM9)

可要看到连接JLinkGDBServer成功

3,调试测试

在开始调试操作之前应先参考来自J-Link官方的JLinkGDBServer参考手册

参考文章搭建GCC+JLINK开发调试环境(裸机调试) 

由JLink GDB Server 参考手册可知,要使用JLink GDB Server调试程序,必需有启动脚本。搭建GCC+JLINK开发调试环境这篇文章中已经给出了测试代码的下载地址,下是执行过程:

【1】下载测试代码,这里改名为mini2440_gdb_test.rar 

【2】解压并共享到Linux系统

【3】新打开一个终端窗口,进入到mini2440_gdb_test目录下

[root@localhost ~]# cd mini2440_gdb_test
[root@localhost mini2440_gdb_test]# ls
2440.cmd  init.o  link.lds  main.c  main.out  targets.cmd
dump.txt  init.S  main.bin  main.o  makefile
【4】执行调试测试

[root@localhost mini2440_gdb_test]# arm-none-eabi-gdb -x targets.cmd -ex "connect_jei localhost 2331" main.out
GNU gdb (Sourcery G++ Lite 2010.09-51) 7.2.50.20100908-cvs
Copyright (C) 2010 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.  Type "show copying"
and "show warranty" for details.
This GDB was configured as "--host=i686-pc-linux-gnu --target=arm-none-eabi".
For bug reporting instructions, please see:
<https://support.codesourcery.com/GNUToolchain/>...
Reading symbols from /root/mini2440_gdb_test/main.out...done.
0x00000000 in ?? ()
Target endianess set to "little endian"
Resetting target

...... ......

(gdb)

另外在另一个终端即运行JLinkGDBServer的终端中也可以看到JLinkGDBServer的执行信息。
【5】输入load 指令加载调试代码到内存

(gdb) load
Loading section .text, size 0x38 lma 0x30000000
Start address 0x30000000, load size 56
Transfer rate: 3 KB/sec, 56 bytes/write.
(gdb)

【6】开始调试(b 是break设置断点,c是continue 继续运行)

b _start
Breakpoint 1 at 0x30000004: file init.S, line 7.
(gdb) b _main
Breakpoint 2 at 0x30000020: file main.c, line 3.
(gdb) c
Continuing.

Breakpoint 1, _start () at init.S:7
7               mov  sp,  #0x34000000  @@sp

【7】退出调试(quit命令)

(gdb) q
[root@localhost mini2440_gdb_test]#
在JLinkGDBServer运行的终端中显示

Debugger terminated connection !

至此在命令行执行调试成功。

七,在Eclipse IDE中编译并连接上J-Link GDB Server 调试

有两种方法可以实现:

第一种方法:通过ZylinCDT嵌入式调试插件

1,安装嵌入式调试插件ZylinCDT。ZylinCDT是一个非常优秀的交叉调试插件,操作简单,具体操作步骤:

首先确认你的操作系统可以上网(实际的、虚拟机里的都一样);

然后在Eclipse的菜单里选择Help->Software Updates;选择Available Software选项卡,点Add Site按钮;

输入地址http://www.zylin.com/zylincdt,列表里就多了一项;刷新之后点上面的Install按钮安装。

2,在Eclipse环境下导入现有的工程Leds.rar

执行Eclipse->File->New->Makefile Project with Existing Code,在Existing Code Location 栏点击Browse按钮,定位到现有的工程Leds,然后在Toolchain for Indexer Settings栏的列表框中选中ARM Linux GCC(Sourcery G++ Lite),如下图所示,点击Finish关闭对话框。

J-Link for Linux安装并在Eclipse环境下链接J-Link GDB Severer调试 - singleboy - singleboy的博客

3,修改Makefile以使用现有的arm-none-eabi-gcc编译器 

将文件中的arm-elf-替换为arm-none-eabi-,并用赋给变量CROSS=arm-none-eabi-,如下图所示。然后按Ctrl+B编译。

J-Link for Linux安装并在Eclipse环境下链接J-Link GDB Severer调试 - singleboy - singleboy的博客

 
4,点击Run->Debug Configurations,如图,在左侧列表项中的Zylin Embedded debug(Native)上双击,在右侧的Name栏保留默认的debug configuration名称,在Main选项页的Project(optional)栏右侧点击Browse按钮定位到Leds工程所在的工程目录。

J-Link for Linux安装并在Eclipse环境下链接J-Link GDB Severer调试 - singleboy - singleboy的博客

  5,在Debugger选项页的Debugger Options栏的Main选项页上,在GDB debugger栏输入arm-none-eabi-gdb,然后将GDB command file栏的内容清空。如下图所示 

J-Link for Linux安装并在Eclipse环境下链接J-Link GDB Severer调试 - singleboy - singleboy的博客

6, 在Commands选项页的'Initialize' commands栏内,如下图所示,将下列内容粘贴进去:

J-Link for Linux安装并在Eclipse环境下链接J-Link GDB Severer调试 - singleboy - singleboy的博客

 #J-LINK GDB SERVER initialization
#
# This connects to a GDB Server listening
# for commands on localhost at tcp port 2331
target remote localhost:2331

# Set JTAG speed to 30 kHz
monitor speed 30

# Set GDBServer to big or little endian
monitor endian little #big

# Reset the chip to get to a known state.
monitor reset

#Sleep 10ms
monitor sleep 10

#
# CPU core initialization (to be done by user)
#
# Set the processor mode
monitor reg cpsr = 0xd3

#disable watchdog
monitor MemU32 0x53000000 = 0

#disalbe interrupt --- int-mask register
monitor MemU32 0x4A000008 = 0xFFFFFFFF

#disalbe interrupt --- int-sub-mask register
monitor MemU32 0x4A00001C = 0x7FFF

#initialize system clocks --- locktime register
monitor long 0x4C000000 = 0xFF000000

#initialize system clocks --- clock-divn register
monitor long 0x4C000014 = 0x5   #CLKDVIN_400_148

#initialize system clocks --- mpll register
monitor long 0x4C000004 = 0x7f021 #default clock

#setup memory controller
monitor MemU32 0x48000000 = 0x22111110 #conw
monitor MemU32 0x48000004 = 0x00000700 #bank0
monitor MemU32 0x48000008 = 0x00000700  #bank1
monitor MemU32 0x4800000c = 0x00000700  #bank2
monitor MemU32 0x48000010 = 0x00000700  #bank3
monitor MemU32 0x48000014 = 0x00000700  #bank4
monitor MemU32 0x48000018 = 0x00000700  #bank5
monitor MemU32 0x4800001c = 0x00018009  #bank6
monitor MemU32 0x48000020 = 0x00018009  #bank7
monitor MemU32 0x48000024 = 0x008e04eb  #vREFRESH
monitor MemU32 0x48000028 = 0xB2        #vBANKSIZE -- 128M/128M
monitor MemU32 0x4800002c = 0x30        #vMRSRB6
monitor MemU32 0x48000030 = 0x30        #vMRSRB7  

# Setup GDB FOR FASTER DOWNLOADS
set remote memory-write-packet-size 1024
set remote memory-write-packet-size fixed

# Set auto JTAG speed
monitor speed auto

break _start
# Load the program executable called "image.elf"
load 

continue

点击Apply按钮,然后点击Close关闭对话框。

有关以上初始化文件的语法请参照参考来自J-Link官方的JLinkGDBServer参考手册和S3C2440CPU相关内容,简单说就做以下几件事:

<1>连接JLinkGDBServer服务器,初始化和JTag通讯速率。

<2>对CPU寄存器的直接初始化操作包括设置成管理模式,屏蔽中断,初始化内存控制器等。

<3>加载目标文件。

参考文章http://www.arm9home.net/simple/index.php?t8300.html

7,配置外部工具

执行Run->External Tools->External Tools Configurations...,打开如下图所示对话框,在左侧列表Program上双击,然后在右侧Name栏输入JLinkGDBServer,在Location 栏按图示定位到JLinkGDBServer命令所在位置,在Working Directory 栏定位到当前工作目录,在Arguments栏输入JLinkGDBServer命令启动参数,这里不带参数。

J-Link for Linux安装并在Eclipse环境下链接J-Link GDB Severer调试 - singleboy - singleboy的博客

 
设置完成后,切换到build选项页,去掉勾选的Build before launch选项。

J-Link for Linux安装并在Eclipse环境下链接J-Link GDB Severer调试 - singleboy - singleboy的博客

 
设置完成后,点击Apply按钮,然后点击Run按钮启动JLinkGDBServer服务。

8,开始调试

点击主界面debug图标旁边下拉箭头中的Leds JLinkGDBServer命令,启动Debug程序,可以看到主界面底部的Console控制台显示初始化文件正在执行的过程。最后停在main函数中设定的断点处。

J-Link for Linux安装并在Eclipse环境下链接J-Link GDB Severer调试 - singleboy - singleboy的博客

  按下F5或者F6可以单步执行。按下Ctrl+F2或者Run->Terminate终止调试。

第二种方法:通过Eclipse CDT提供的默认的调试插件,具体操作步骤:

1~3,和第一种方法一样,略。

4,点击Run->Debug Configurations,如图,在左侧列表项中的C/C++ Application上双击,在右侧的Name栏保留默认的debug configuration名称,在Main选项页的Project(optional)栏右侧点击Browse按钮定位到Leds工程所在的工程目录。

J-Link for Linux安装并在Eclipse环境下链接J-Link GDB Severer调试 - singleboy - singleboy的博客

 5,将上面第一种方法第6步的粗体字部分的初始化脚本内容粘贴到位于Leds工程目录下名为gdbinit文件中。在Debugger选项页的Debugger Options栏的Main选项页上,在GDB debugger栏输入arm-none-eabi-gdb,然后点击GDB command file栏右侧的Browse按钮定位到刚才新建的gdbinit文件。如下图所示。注意保持Debugger栏gdb/mi选项不变。

J-Link for Linux安装并在Eclipse环境下链接J-Link GDB Severer调试 - singleboy - singleboy的博客

在默认状态下,debugger栏是不会显示的,如果之前没有经过设置,需要执行window->Preferences,在打开的对话框的左侧列表中,点击Run/Debug->Launching->Default Launchers,在右侧的Launch Type/Mode 栏内,点击C/C++ Application->Debug,然后在右侧的Preferred Laucher栏内勾选上Standard Create Process Launcher,如下图所示。然后点击Apply按钮,之后点击OK按钮关闭对话框。 
 J-Link for Linux安装并在Eclipse环境下链接J-Link GDB Severer调试 - singleboy - singleboy的博客

 

点击Apply按钮,然后点击Debug按钮开始调试,结果如下图所示。

J-Link for Linux安装并在Eclipse环境下链接J-Link GDB Severer调试 - singleboy - singleboy的博客

  同样按下F5或者F6可以单步执行。按下Ctrl+F2或者Run->Terminate终止调试。

 比较以上两种方法可以看到,第二种方法启动调试时,在控制台中没有输出初始化脚本的启动信息,有时调试程序不能正常启动时,第二种方法显然没有第一种方法好用,因为它能帮助我们分析问题。

 

 

 
  评论这张
 
阅读(5042)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017