目录
1、安装eclipse IDE for C/C++ developers
四、使用C/C++ GDB HardWare Debugging进行硬件调试
1、安装GDB调试插件--C/C++ GDB HardWare Debugging
一、概述
1、目的
MDK+Jlink的开发环境集编译、下载、调试为一体,配合上友好的操作界面,给用户者提供了很Happy的开发工具。但是,曾经玩过Linux系统的人总想尝试对开发环境的一次搬移,转战到Linux下看有什么事情发生。
在Linux下,搭建STM32的开发环境是一种具有挑战性的任务,从中我们能学到如何创造一个集成开发环境,或者说我们知道集成开发环境的构成元素。不得不提出“Eclipse”绝对是一个好东西,它就像一个开发环境框架,在这个框架中我们添加STM32专用的编译器、调试工具,就构造出一个STM32集成开发环境。
开源给电子行业工作者提供了一种向技术更深处进发的机遇,开源在技术垄断的商业模式中开辟了一块属于世界的*的知识财富。
2、开发环境描述
硬件开发板:野火STM32开发板
Cortex-M3型号:STM32F103VET6
下载器与调试接口:Jlink + JTAG
操作系统:虚拟机VMware6.5 + Ubuntu12.0.4
集成开发环境平台:eclipse IDE for C/C++ developers
交叉编译链:arm-none-eabi-gcc
调试服务器:JLink GDB Server
3、Eclipse构建的STM32集成开发环境结构
4、GDB / GDB Server 调试模型
The GNU Project Debugger (GDB) is a freely available debugger, distributed under the terms of the GPL. It connects to an em ulator via a TCP/IP connection. It can con-nect to every emulator for which a GDB Server software is available.
GDB Server is a remote server for GDB. When you run GDB in the GDB source direc-tory, it will read a .gdb file. The GDB .gdb file contains default setting informationand additional monitor commands. GDB and GDB Server communicate via a TCP/IP connection, using the standard GDB remote serial protocol. The GDB Server trans-lates the GDB monitor commands into J-Link commands.
二、搭建步骤
1、安装eclipse IDE for C/C++ developers
2、安装交叉编译链arm-none-eabi-gcc
3、安装JLink驱动
4、安装GNU ARM Eclipse插件包
5、新建一个LED_Test工程并配置、编译
6、安装GDB调试插件--C/C++ GDB HardWare Debugging
7、设置Eclipse调试环境并调试
说明:
本文需要用到的Eclipse插件的下载地址不能确保读者从该网址上就能找到可用的资源,因为Eclipse的插件下载地址会经常更新,而且更改了下载地址。所以如果出现找不到资源的情况,需要读者自己从Google上搜索出当前Eclipse提供的可用的资源。
三、详细的搭建过程
1、安装eclipse IDE for C/C++ developers
参考ubuntu安装eclipse IDE for C/C++ developers,安装到这一步就可以像VC6.0一样进行C/C++的开发,但是编译的代码只能在X86平台上运行,不支持ARM。
为了能进行交叉编译,我们需要安装交叉编译链arm-none-eabi-gcc,但是次编译链不属于Eclipse的一部分,也不是Eclipse的可安装插件。Eclipse只是来调用交叉编译链,再调用之前还需要安装“GNU ARM Eclipse插件”,有了这个插件便可以调用arm-none-eabi-gcc来编译我们的源程序。倘若没有安装GNU ARM Eclipse插件,打开工程的属性,情况是这样的:
仅仅安装了“eclipse IDE for C/C++ developers”,只能进行X86平台上的程序调试,却不能进行ARM平台的硬件调试。为了能进行硬件调试,我们需要安装交叉编译链arm-none-eabi-gcc中的工具arm-none-eabi-gdb,同样此工具不属于Eclipse的一部分,也不是Eclipse的可安装插件。Eclipse只是来调用此调试器,再调用之前还需要安装“GDB调试插件”,有了这个插件便可以调用arm-none-eabi-gdb来硬件调试我们的源程序。倘若没有安装“GDB调试插件”,打开“Debug Configurations”,情况是这样的:
仅仅安装了“eclipse IDE for C/C++ developers”,是可以调用外部的硬件调试服务器--JLinkGDBServer,只是这个时候由于无法连接到GDB调试客户端而无法进行调试。
2、安装交叉编译链arm-none-eabi-gcc
1> 编译器下载,地址为https://launchpad.net/gcc-arm-embedded/+download
2> 解压安装 tar
3> 修改/etc/profile
4> 使/etc/profile的修改生效
5> 测试
#arm-none-eabi-gcc -v
成功的界面如下
3、安装JLink驱动
Jlink驱动包含四个工具:JLinkExe、JLinkGDBServer、JLinkRemoteServer、JLinkSWOViewer。
1> 驱动下载,地址为http://www.segger.com/jlink-software.html
注意选择安装包:“Software and documentation pack for Linux V4.86a, DEB Installer 32-bit version”
2> 利用dpkg -i命令进行安装,安装位置在/usr/bin目录下
3> 测试版本
首先将硬件Jlink连接在电脑上,再将Jlink从物理PC机转移映射到虚拟机下,输入测试命令
#JLinkExe
成功的界面如下
4> 下载测试
命令序列
① h --停止程序的运行
② exec device=STM32F103ZE --选择芯片型号
这里选择的是STM32F103ZE,而不是STM32F103VET6,原因是由于此版本的JLink驱动不支持STM32F103VET6,所以用一个与之接近的型号代替。
③ loadbin Led_Test.bin 0x8000000 --下载
4、安装GNU ARM Eclipse插件包
此插件包包含了6个插件,可以手动下载安装,不过这种方法只能安装其中的4个插件;如果采用自动下载安装则可以完整的安装所有的插件。
方法一:手动下载安装
1> 下载插件,地址:http://sourceforge.net/projects/gnuarmeclipse/files/Current%20Releases/2.x/
插件名:ilg.gnuarmeclipse.repository-2.2.2-201404240550.zip
2> 拷贝到Linux的某一目录下,假设为/source
3> 安装该插件
打开Eclipse-->help-->Install New Software-->Add-->Archive-->选择该插件-->选中“√”-->一路Next-->等待
方法二:自动下载安装
The recommended way to install these plug-ins is to use the Eclipse standard install/update mechanism: In the Eclipse menu: Help → Install New Software…
- in the Install window, click the Add… button (on future updates, just select the URL in theWork with: combo)
- fill in Name: with GNU ARM Eclipse Plug-ins
- fill in Location: with http://gnuarmeclipse.sourceforge.net/updates
- click the OK button
- normally the main window should list a group named CDT GNU Cross Development Tools; expand it
- (in case the main window will list There are no categorized items, you are probably using a very old version; disable the Group items by category option)
- select all the plug-ins (the one marked End of life is needed only for compatibility with previous version, normally can be safely skipped)
- click the Next button and follow the usual installation procedure
Once you define the update site URL, further updates are greatly simplified (Help → Check For Updates). 摘自:Plug-ins install
☆ 测试
测试一:Eclipse-->help-->Install New Software-->already installed查看已经安装的插件:
测试二:此插件安装成功后,在新建C工程的时候,界面也发生了变化
5、新建一个LED_Test工程并配置、编译
1> 新建一个工程
File-->Project-->C Project-->Project name-->Cross ARM GCC-->Tools chain path-->Finsh
此时在工作目录下(笔者的为/root/workspace)就多了一个子目录LED_Test
2> 将源码拷贝到该目录下
把曾经在MDK做LED实验的源码拷贝到Linux系统中,放进/root/workspace/LED_Test目录下
3> 添加源码到工程中
在工程浏览器(Project Explorer)中,点击“F5”刷新,就可以添加所有的源码目录和其中的文件。
4> 更改需要的文件
① 启动文件
另外,注意将TureSTUDIO/startup_stm32f10x_hd.s 的后缀"s"改成大写的"S",原因是由于编译器对应S的文件会先进行预处理操作然后是汇编操作,而s的只进行汇编操作,详细原因参考gcc编译 .s文件和.S文件有什么区别。
② 连接脚本
③ 其他文件与在MDK上的需要文件类似,把需要的文件保留,不需要的文件从工程中移除
5> 开始配置工程
在工程浏览器中选中工程,右键单击选择Properties,再选择C/C++ Build-->Settings,跳出如下界面
6> 配置汇编器Cross ARM GNU Assembler
主要是添加预处理宏
7> 配置编译器Cross ARM C Compiler
① 添加预处理宏
② 添加头文件搜索目录
- /root/workspace/LED_Test/STM32F10x_StdPeriph_Lib_V3.5.0/Libraries/CMSIS/CM3/CoreSupport
- /root/workspace/LED_Test/STM32F10x_StdPeriph_Lib_V3.5.0/Libraries/CMSIS/CM3/DeviceSupport/ST/STM32F10x
- /root/workspace/LED_Test/STM32F10x_StdPeriph_Lib_V3.5.0/Libraries/STM32F10x_StdPeriph_Driver/inc
- /root/workspace/LED_Test/STM32F10x_StdPeriph_Lib_V3.5.0/Project/STM32F10x_StdPeriph_Template
- /root/workspace/LED_Test/User
8> 配置连接器 Cross ARM C Linker
主要是选择连接脚本文件
- /root/workspace/LED_Test/STM32F10x_StdPeriph_Lib_V3.5.0/Project/STM32F10x_StdPeriph_Template/TrueSTUDIO/STM3210E-EVAL/stm32_flash.ld
9> 配置生成的镜像文件 Cross ARM GNU Creat Flash Image
选择生成二进制的镜像文件
10> 编译
Project-> Build Project
在/root/workspace/LED_Test/Debug目录中就可以看到生成的目标文件
四、使用C/C++ GDB HardWare Debugging进行硬件调试
1、安装GDB调试插件--C/C++ GDB HardWare Debugging
1> 安装
此种方法是Eclipse自动在用户提供的网络地址上进行搜索,然后下载安装,所以确保虚拟机能上网。
2> 验证
成功以后,就可以在Run-->Debug Configurations中看到如下界面
需要说明的是倘若Run菜单下没有找到“Debug Configurations”选项,那是由于之前工程处于编译环境,还没有切换到调试环境,只有切换到调试环境才能在Run菜单下找到该选项。切换方法是:
2、设置Eclipse调试环境并调试
1> 配置Eclipse调试选项
① Debugger
Run-->Debug Configurations-->GDB Hardware Debugging -->Debugger
② Startup
在Initialization Commands中输入检测参数
monitor flash device = STM32F103ZE
monitor flash download =
monitor flash breakpoints =
monitor clrbp
monitor endian little
monitor speed
monitor reset
monitor sleep
monitor speed auto
monitor writeu32 0xE000ED08 = 0x00000000
再在Run Commands中输入命令
monitor reg r13 = (0x00000000)
monitor reg pc = (0x00000004)
break ResetHandler
break main
continue
2> 配置Eclipse调试选项
Run-->External Toos-->External Toos Configurations-->New _configuration
3> 调试
Run -->Debug
3、 另一种调试的方法
1> 配置
配置还是步骤7中的1>和2>
2> 启动JLinkGDBServer
在终端上启动JLinkGDBServer
3> GDB调试
Run -->Debug
如果连接成功,此时在终端上打印出如下界面
五、使用arm-none-eabi-gdb直接进行硬件调试
1、安装Jlink驱动
2、安装交叉编译链arm-none-eabi-gcc
3、编译工程以生成elf文件
4、在当前用户目录下创建.gdbinit文件
笔者的当前用户是root,所以在root目录下创建.gdbinit初始化文件
#gedit ~/.gdbinit
内容为:
set auto-load safe-path /
5、在工程文件夹下的Debug目录中创建.gdbinit文件
在工程的Debug目录下创建.gdbinit文件,内容为:
target remote :2331
set mem inaccessible-by-default off
monitor speed auto
monitor endian little
monitor reset
monitor flash device = STM32F103ZE
monitor flash breakpoints = 1
monitor flash download = 1
load
monitor reg sp = (0x08000000)
monitor reg pc = (0x08000004)
break ResetHandler
break main
continue
需要说明的是:由于当前版本的Jlink驱动不支持STM32F103VET6,所以选择STM32F103ZE来代替。
6、启动JLinkGDBServer
打开一个终端输入命令
root@daneiqi:~# JLinkGDBServer
7、启动调试
再打开一个终端,在工程的Debug目录下输入命令:
root@daneiqi:~/workspace/LED_Test/Debug# arm-none-eabi-gdb LED_Test.elf
调试界面如下
本章参考资料: GNU ARM Eclipse (for STM32)
STM32 Discovery Development On Linux
全文参考资料: J-Link GDB Server User Guide - Segger