嵌入式arm开发过程中,需要用到 jlink 进行调试开发,需要搭建eclipse arm linux gcc + jlink 调试环境,按照以下步骤搭建的环境可以识别到jlink。

0 环境搭建概述
所需工具:
(1)Eclipse
  Eclipse的本身只是一个框架平台,但是众多插件的支持,使得Eclipse拥有较好的灵活性。

(2)CDT

  CDT是Eclipse用于扩展Eclipse支持C/C++开发的插件。

(3)ARM cross GCC tooltain
  整合了GNU arm的交叉编译工具链,是一个跨平台的 ARM 架构开发平台,是一个 Eclipse 的插件。

(4)J-LINK GDB Server

  A JTAG GDB Debug agent run on Host

IDE整体结构框图

 

1 安装交叉编译器

下载arm-linux-gcc

Ubuntu下安装arm-linux-gcc-4.4.3
具体步骤:
0、软件下载
友善之臂的官网下载:

http://www.arm9.net/download.asp
或 http://download.csdn.net/download/mybelief321/5563837
arm-linux-none-gcc:
https://launchpad.net/gcc-arm-embedded/+download

1、解压 sudo tar zxvf arm-linux-gcc-4.4.3.tar.gz -C/   (实际上是在根目录下建立文件夹opt)
2、建立目录
sudo mkdir /usr/local/arm
3、复制文件
sudo cp -r /opt/FriendlyARM/toolschain/4.4.3 /usr/local/arm
4、添加环境变量
网上很多修改环境变量的方法,很杂。下面一共列举三种方法,有人都在ubuntu14.04.03上试过,可行。(本人实测第一种第二种都可行)

方法一:修改/etc/bash.bashrc文件(此文件只对当前用户适用)
sudo gedit /etc/bash.bashrc
在最后加上
export PATH=$PATH:/opt/FriendlyARM/toolschain/4.4.3/bin
export PATH=$PATH:/usr/local/arm/4.4.3/bin

(路径)(注意等号那边不要有空格)

方法二:修改/etc/profile文件(此文件属于系统级别的环境变量,设置在里面的东西对所有用户适用)
sudo gedit /etc/profile
增加路径设置,在末尾添加如下:
export PATH=$PATH:/usr/local/arm/4.4.3/bin

方法三:修改/etc/environment文件
sudo gedit /etc/environment
原文件应为
PATH=”/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games“
将其改为
PATH=”/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/arm/4.4.3/bin”
修改环境变量:
/etc$ vim environment
添加:
PATH=”/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/game s:/usr/local/games:/usr/local/arm/gcc-arm-none-eabi-4_8-2014q3/bin/”
/usr/local/arm/gcc-arm-none-eabi-4_8-2014q3/bin/

Tips: 关于环境变量问题:

  环境变量是什么?例如path,当要求系统运行一个程序而没有告诉它程序所在的完整路径时,系统除了在当前目录下面寻找此程序外,还应到path中指定的路径去找。用户通过设置环境变量,来更好的运行进程。
  如果上面不加入环境变量,要运行arm-linux-gcc这个程序,则每次都要把arm-linux-gcc的完整路径写出来。/usr/local/arm/4.4.3/binarm-linux-gcc 文件名 -o 输出文件名
这样非常的麻烦,所以加到path里面,让电脑知道这个程序在哪里。

5.注册环境变量(此步未做,步骤8同样显示安装成功)
立即使新的环境变量生效,不用重启电脑,对应步骤5也有3种方法
方法一:source /etc/bash.bashrc
方法二:source /etc/profile
方法三:立即生效
检查环境变量是否设置好。
$echo $PATH
输出:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/opt/FriendlyARM/toolschain/4.4.3/bin:/usr/local/arm/4.4.3/bin:/opt/FriendlyARM/toolschain/4.4.3/bin:/usr/local/arm/4.4.3/bin

【注】环境变量常见错误:若在该步骤中出现提示arm-linux-none-gcc command not found,只需要执行 sudo apt-get install lib32z1 可以解决问题

6、验证:arm-linux-gcc -v ,我的显示如下:
Using built-in specs.
Target: arm-none-linux-gnueabi
Configured with: /opt/FriendlyARM/mini2440/build-toolschain/working/src/gcc-4.4.3/configure –build=i386-build_redhat-linux-gnu –host=i386-build_redhat-linux-gnu –target=arm-none-linux-gnueabi –prefix=/opt/FriendlyARM/toolschain/4.4.3 –with-sysroot=/opt/FriendlyARM/toolschain/4.4.3/arm-none-linux-gnueabi//sys-root –enable-languages=c,c++ –disable-multilib –with-arch=armv4t –with-cpu=arm920t –with-tune=arm920t –with-float=soft –with-pkgversion=ctng-1.6.1 –disable-sjlj-exceptions –enable-__cxa_atexit –with-gmp=/opt/FriendlyARM/toolschain/4.4.3 –with-mpfr=/opt/FriendlyARM/toolschain/4.4.3 –with-ppl=/opt/FriendlyARM/toolschain/4.4.3 –with-cloog=/opt/FriendlyARM/toolschain/4.4.3 –with-mpc=/opt/FriendlyARM/toolschain/4.4.3 –with-local-prefix=/opt/FriendlyARM/toolschain/4.4.3/arm-none-linux-gnueabi//sys-root –disable-nls –enable-threads=posix –enable-symvers=gnu –enable-c99 –enable-long-long –enable-target-optspace
Thread model: posix
gcc version 4.4.3 (ctng-1.6.1)

学习:1、bin文件中一般存放的都是可执行的文件,
2、注意学习chown chmod 命令的基本用法和作用
3、学会看懂和修改文件的属性介绍
4、/etc/profile中的文件属于系统级别的环境变量,设置在里面的东西(配置信息)对所有用户适用

2 安装JLINK GDB-SERVER

SEGGER官网下载最新jlink驱动,网址 https://www.segger.com/downloads/jlink
由于国内使用的JLINK大部分都是盗版的:
建议使用jlink5.6以下的版本
本人使用的是 jlink_5.0_x86_64.deb
1,下载完成后,安装
安装deb软件包
sudo dpkg -i xxx.deb删除软件包
sudo dpkg -r xxx.deb
2,安装好啦,找到 /opt目录下SEGGER文件,说明驱动已经安装
3,找到路径 /opt/SEGGER/JLink/
4,执行./JLinkExe 进入JLink命令行模式
5,已经可以看到采集的REF电压勒,成功就在眼前啦,提示我们connect以下硬件,此时连接好电路板,电路板上电,输入 connect 命令,然后会要求输入芯片型号,然后选择调试模式(我只连接了SWD,所以选择SWD模式),最后选择接口速度,随便多少都行。
6,到目前为止已经可以通过JLink调试处理器了,通过两个简单命令来控制处理器,我的处理器里跑了一个rt-thread,做了一个跑马灯,h暂停,会显示处理器暂停到哪里以及其他好多数据输入h后灯停在闪动;g运行,输入g后继续开始运行,灯恢复闪动,说明JLink已经可以调试处理器

yyl@B490:/opt/SEGGER/JLink$ ./JLinkExe
SEGGER J-Link Commander V6.50b (Compiled Sep 6 2019 17:46:52)
DLL version V6.50b, compiled Sep 6 2019 17:46:40

Connecting to J-Link via USB…O.K.
Firmware: J-Link ARM V7 compiled Jun 20 2012 19:45:53
Hardware version: V7.00
S/N: 19087980
License(s): RDI, FlashDL, FlashBP, JFlash, GDBFull
VTref=0.569V

Type “connect” to establish a target connection, ‘?’ for help
J-Link>

*** J-Link V6.50b J-Link V6.50b Warning ***
The connected J-Link is defective. Proper operation cannot be guaranteed.
Please get in touch with support@segger.com and send a screenshot of this dialog with the e-mail.

J-Link information:
S/N: 19087980
Firmware: J-Link ARM V7 compiled Jun 20 2012 19:45:53

*** J-Link V6.50b J-Link V6.50b Warning ***

Unknown command. ‘?’ for help.
J-Link>

yyl@B490:/opt/SEGGER/JLink$ ./JLinkGDBServer
SEGGER J-Link GDB Server V6.50b Command Line Version

JLinkARM.dll V6.50b (DLL compiled Sep 6 2019 17:46:40)

—–GDB Server start settings—–
GDBInit file: none
GDB Server Listening port: 2331
SWO raw output listening port: 2332
Terminal I/O port: 2333
Accept remote connection: yes
Generate logfile: off
Verify download: off
Init regs on start: off
Silent mode: off
Single run mode: off
Target connection timeout: 0 ms
——J-Link related settings——
J-Link Host interface: USB
J-Link script: none
J-Link settings file: none
——Target related settings——
Target device: Unspecified
Target interface: JTAG
Target interface speed: 4000kHz
Target endian: little

Connecting to J-Link…
J-Link is connected.
Failed to set device (Unspecified). Unknown device selected?ERROR : Failed to set device.

Firmware: J-Link ARM V7 compiled Jun 20 2012 19:45:53
Hardware: V7.00
S/N: 19087980
Feature(s): RDI, FlashDL, FlashBP, JFlash, GDBFull
Checking target voltage…
Connecting to target failed. Connected correctly?
GDB Server will be closed…
Shutting down…
Could not connect to target.
Please check power, connection and settings.yyl@B490:/opt/SEGGER/JLink$

3 安装JDK执行环境

3.1安装openjdk

1、install java vm
sudo apt-get install openjdk-8-jdk

sudo apt-get purge openjdk-\*
这行命令会从你的系统中完整移除OpenJDK/JRE.

3.2 安装oracle jdk

下载:
https://www.oracle.com/technetwork/java/javase/downloads/jdk13-downloads-5672538.html
安装:
sudo mkdir -p /usr/local/java
sudo cp -r jdk-13_linux-x64_bin.tar.gz /usr/local/java/
cd /usr/local/java
sudo tar xvzf jdk-13_linux-x64_bin.tar.gz
sudo gedit /etc/profile

将下面几行插入你的/etc/profile文件底部:
JAVA_HOME=/usr/local/java/jdk-13
JRE_HOME=/usr/local/java/jre-13
PATH=$PATH:$JRE_HOME/bin:$JAVA_HOME/bin
export JAVA_HOME
export JRE_HOME
export PATH

sudo update-alternatives –install “/usr/bin/java” “java” “/usr/local/java/jdk-13/bin/java” 1
sudo update-alternatives –install “/usr/bin/javac” “javac” “/usr/local/java/jdk-13/bin/javac” 1

4 安装eclipse+

下载:
https://www.eclipse.org/downloads/download.php?file=/oomph/epp/2019-09/R/eclipse-inst-linux64.tar.gz&mirror_id=105

压缩版:

https://www.eclipse.org/downloads/packages/release/2019-09/r/eclipse-ide-eclipse-committers

安装:
直接点击eclipse install程序即可

卸载:
sudo apt-get autoremove eclipse*
rm -r ~/.eclipse/

5 安装c/c++ cdt

在help-》install new software中输入下面的网址,select all,安装CDT
http://download.eclipse.org/tools/cdt/releases/9.9

6 安装GNU arm c/c++ development support

在help-》install new software中输入下面的网址,select all,安装GNU arm c/c++ development support
http://gnuarmeclipse.sourceforge.net/updates
https://sourceforge.net/projects/gnuarmeclipse/files/latest/download  (这两个网址实测都用不了,可以在eclipse中的marketplace中搜索GNU arm进行安装

 

7 基本使用

7.1 编译

(1)创建新的工程
new->c project

 next—->advanced setting设置相关的芯片,注意检查:
(1)编译
(2)汇编
(3)链接
过程中使用的编译选项是否符合要求

 注意检查:
(1)Toolchains中的交叉编译器是否你设置的编译器
(2)编译器的路径设置是否正确(主要用于后期使用编译器自带的标准库)

 导入源码工程
(1)在工程下建立src文件夹,并import “file system”

 

编译调错

7.2 Debug设置

(1)debug设置前确保arm-gdb已经正确配置(前面的编译器工具链路径正确)
(2)确保JLINK包已经正确安装,并能正确执行:
./JLinkExe
./jlinkgdbserver
(3)Debug Configure

 (4)GDB SEGGER J-LINK Debugging
new lunch

main选项中,检查
project
elf文件的位置

 

 

设置
(1)device name
(2)JLINK相关配置
(3)设置command如下:
#set mem inaccessible-by-default on
# s3c2440_config
# connect to the J-Link gdb server
target remote localhost:2331
monitor reset
monitor halt
monitor speed 8000
monitor endian little
monitor reg cpsr = 0xd3

#WDT
monitor memU32 0x53000000 = 0x00000000 #WTCON
#PLL
monitor memU32 0x4C000000 = 0xFFFFFFFF #LOCKTIME
monitor memU32 0x4C000004 = 0x0005C011 #MPLLCON
monitor memU32 0x4C000008 = 0x00038022 #UPLLCON
monitor memU32 0x4C00000C = 0x00FFFFF0 #CLKCON
monitor memU32 0x4C000010 = 0x00000004 #CLKSLOW
monitor memU32 0x4C000014 = 0x00000005 #CLKDIVN
monitor memU32 0x4C000018 = 0x00000000 #CAMDIVN
#MEMCTRL
monitor memU32 0x48000000 = 0x22011110 #BWSCON
monitor memU32 0x48000004 = 0x00000700 #BANK0-5
monitor memU32 0x48000008 = 0x00000700
monitor memU32 0x4800000c = 0x00000700
monitor memU32 0x48000010 = 0x00000700
monitor memU32 0x48000014 = 0x00000700
monitor memU32 0x48000018 = 0x00000700
monitor memU32 0x4800001C = 0x00018005 #BANK6-7
monitor memU32 0x48000020 = 0x00018005
monitor memU32 0x48000024 = 0x008C07A3 #REFRESH
monitor memU32 0x48000028 = 0x000000B1 #BANKSIZE
monitor memU32 0x4800002C = 0x00000030 #MRSRB6-7
monitor memU32 0x48000030 = 0x00000030

break go_main #设置断电
#load
#continue

同时注意检查其它选项,开始调试

 

生成的编译指令: arm-none-eabi-gcc -mcpu=cortex-a9 -march=armv7-a -marm -mlittle-endian -mfloat-abi=soft -munaligned-access -O2 -g -std=gnu11 -c -o “目标文件名” “原始文件名”; 其中-mcpu设置CPU类型为cortex-A9、结构为armv7-a、存储格式为little-endian; -mfloat-abi=soft为选择软件库实现浮点运算…

 

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。