嵌入式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 [email protected] 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为选择软件库实现浮点运算...
标签:bin,4.4,gcc,--,eclipse,usr,Ubuntu,local,arm From: https://www.cnblogs.com/FireLife-Cheng/p/18068428