摘要:
本文介绍了如何在Ubuntu平台配置J-Link,因版本较高,网上一些资料已不适用,根据J-Link的README文件操作,会产生诸多问题,本文对产生问题的原因进行简单分析,并给出解决方法。最后给出J-Link基本用法。
1 引言
最近因项目需要,需要配置Linux下的J-Link工具,网上有一博文《ubuntu 9.04下J-Link for linux 的配置与使用 》,介绍得蛮详细的,但在实际操作过程中差别甚大,应该是版本的原因(我用的是Ubuntu 10.04LTS和JLink_Linux_V430)。 JLink_Linux_V430安装包里的README文件,介绍了如何配置,过于简单,而且安装过程中会遇到不少问题,遂记录整个过程,以供分享。
2 J-Link配置
2.1安装libusb
如果J-Link是通过USB连接的,得先装libusb,README文件声称用apt-get install libusb,在我机器上不行,提示“无法找到软件包”。所以得自己下载安装。
在 下载(libusb官网,),并安装,整个过程多次需要root权限,可通过命令sudo -s一次性取得root权限:
root@jelline: ~ / Downloads# tar jxvf libusb- 1. 0. 8. tar. bz2
root@jelline: ~ / Downloads# cd libusb- 1. 0. 8/
root@jelline: ~ / Downloads/ libusb- 1. 0. 8# . / configure
root@jelline: ~ / Downloads/ libusb- 1. 0. 8# make
root@jelline: ~ / Downloads/ libusb- 1. 0. 8# make install
2.2 安装libreadline JLinkExe会用到libreadline库,所以得把libreadline库装上。 中Current Status选择下载,并安装,如下所示:
root@jelline: ~ / Downloads# tar - zxvf readline- 6. 2. tar. gz
root@jelline: ~ / Downloads/ readline- 6. 2# . / configure
root@jelline: ~ / Downloads/ readline- 6. 2# make
root@jelline: ~ / Downloads/ readline- 6. 2# make install
2.3 下载Beta software version for Linux
到下载Beta software version for Linux,提示输入序列号,随便输入一串数字即可,点submit serial number,接着在 I confirm that I will not use the software with illegal clones打勾,而后Download Software。拷贝库,并执行ldconfig,具体如下:
jelline@jelline: ~ / Downloads$ tar zxvf JLink_Linux_V430. tgz
jelline@jelline: ~ / Downloads/ JLink_Linux_V430$ cp libjlinkarm. so. 4* / usr/ lib
jelline@jelline: ~ / Downloads/ JLink_Linux_V430$ ldconfig
上述是依README指示操作,会报如下错误:
/sbin/ldconfig.real: /usr/lib/libjlinkarm.so.4 is not a symbolic link
问题出在把libjlinkarm.so.4拷贝到/usr/lib就不再是符号链接文件(这点我也纳闷),进入到/usr/lib目录下,删除 libjlinkarm.so.4,并重新建立符号链接文件即可,如下:
root@jelline: / usr/ lib# rm libjlinkarm. so. 4
root@jelline: / usr/ lib# ln - s libjlinkarm. so. 4. 30. 0 libjlinkarm. so. 4
root@jelline: / usr/ lib# ldconfig
为了让标准用户有权使用JLinkExe(这句话是README翻译过来的),还需要进行如下操作:
root@jelline: ~ / Downloads/ JLink_Linux_V430# cp 45- jlink. rules / etc/ udev/ rules. d/
root@jelline: ~ / Downloads/ JLink_Linux_V430# groupadd plugdev
root@jelline: ~ / Downloads/ JLink_Linux_V430# usermod - a - G plugdev jelline 2.4 测试
按README文件,貌似已经装好了,但执行JLinkExe,仍提示如下错误:
root@jelline: ~ / Downloads/ JLink_Linux_V430# . / JLinkExe
error while loading shared libraries: libreadline. so. 5: cannot open shared object file: No such file or directory 在/usr/lib找不到libreadline.so.5库,最后发现libreadline.so库被放在/lib/下,但其版本是6,创建一个符号链接指向libreadline.so.6.1, 具体如下:
jelline@jelline: / lib$ ls libreadline. so. 6*
libreadline. so. 6 libreadline. so. 6. 1
jelline@jelline: / lib$ ln - s libreadline. so. 6. 1 libreadline. so. 5
OK,现在重新运行JLinkExe就可以了,提示如下信息:
jelline@jelline: ~ / Downloads/ JLink_Linux_V430$ . / JLinkExe
SEGGER J- Link Commander V4. 30 ( ' ? ' for help)
Compiled Jun 30 2011 15: 53: 19
DLL version V4. 30, compiled Jun 30 2011 15: 53: 15
Firmware: J- Link ARM V8 compiled Jun 21 2011 20: 26: 20
Hardware: V8. 00
S/ N: 20100214
Feature( s) : RDI, FlashDL, FlashBP, JFlash, GDBFull
VTarget = 3. 306V
Info: TotalIRLen = 9, IRPrint = 0x0011
Info: Found Cortex- M3 r1p1, Little endian.
Info: TPIU fitted.
Info: FPUnit: 6 code ( BP) slots and 2 literal slots
Found 2 JTAG devices, Total IRLen = 9:
#0 Id: 0x3BA00477, IRLen: 04, IRPrint: 0x1, CoreSight JTAG- DP ( ARM)
#1 Id: 0x16410041, IRLen: 05, IRPrint: 0x1, STM32 Boundary Scan
Cortex- M3 identified.
JTAG speed: 100 kHz J-Link>
3 使用JLink
在J-Link>输入"?",即给出命令列表。我在使用过程中,总体觉得Linux下JLink不够成熟,主要表现在资料太小、功能不易用、操作成功与否不提示(当然不排除不熟练的原因)。
3.1 下载loadbin
loadbin用于将二进制文件下载到目标存储器,语法如下:
Syntax: loadbin , // Load binary file into target memory 下载之前需要设置下目标版的处理器,否则无法正常烧写,我的型号是STM32F103RBT6,但在指定的时候只指定为STM32F103RB,如下:
J-Link>exec device = STM32F103RB 有个麻烦,下载完没有明显提示成功与否,可以通过这样解决:在PC通过命令xxd查看待下载文件,下载进去通过JLink命令mem查看,判断这两者是否一样(只比较前面若干字节即可),若一样,则表示烧写成功。举个例子,把/bin/cp文件烧到板子:
J-Link>loadbin /bin/cp, 0x08000000
Loading binary file... [/bin/cp]
Writing bin data into target memory @ 0x08000000.
J-Link>mem 0x08000000,3f
08000000 = 7F 45 4C 46 01 01 01 00 00 00 00 00 00 00 00 00
08000010 = 02 00 03 00 01 00 00 00 40 A1 04 08 34 00 00 00
08000020 = 04 73 01 00 00 00 00 00 34 00 20 00 09 00 28 00
08000030 = 1D 00 1C 00 06 00 00 00 34 00 00 00 34 80 04
jelline@jelline:~$ xxd /bin/cp | more
0000000: 7f45 4c46 0101 0100 0000 0000 0000 0000 .ELF............
0000010: 0200 0300 0100 0000 40a1 0408 3400 0000 ........@...4...
0000020: 0473 0100 0000 0000 3400 2000 0900 2800 .s......4. ...(.
0000030: 1d00 1c00 0600 0000 3400 0000 3480 0408 ........4...4... 3.2 保存savebin
Syntax: savebin , , //Saves target memory into binary file 这里值得一提的是,参数 是十六进制,比如指定10,保存的是16个字节。我最开始误以为是十进制,我通过ls命令,发现文件大小与自己预期不一致,对比实际文件与预期大小,才发现这个问题。命令mem的也是十六进制的。
尽管版本不一,具体配置还需依情况而定,希望本文有启发作用。
PS:我刚开始用,欢迎交流!Jelline@126.com
阅读(6787) | 评论(0) | 转发(0) |