目录

一、概述

  1.目的

  2、开发环境描述

  3、Eclipse构建的STM32集成开发环境结构

  4、GDB / GDB Server 调试模型

二、搭建步骤

三、详细的搭建过程

  1、安装eclipse IDE for C/C++ developers

  2、安装交叉编译链arm-none-eabi-gcc

  3、安装JLink驱动

  4、安装GNU ARM Eclipse插件包

  5、新建一个LED_Test工程并配置、编译

四、使用C/C++ GDB HardWare Debugging进行硬件调试

1、安装GDB调试插件--C/C++ GDB HardWare Debugging

  2、设置Eclipse调试环境并调试

  3、 另一种调试的方法

五、使用arm-none-eabi-gdb直接进行硬件调试

一、概述

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

    GNU ARM Eclipse (for STM32)

         linux下配置ARM开发环境笔记(STM32系列/Kinetis系列)

           ubuntu下安装stm32开发环境 秒杀keil和IAR

         Jlink 命令行 下载bin文件

         Eclipse配合GDB和jlinkGDBServer仿真调试STM32

Linux下STM32开发环境的搭建的更多相关文章

  1. windows下STM32开发环境的搭建

    一.概述 1.说明 笔者已经写了一篇Linux下STM32开发环境的搭建 ,这两篇文章的最区别在于开发环境所处的系统平台不一样,而其实这个区别对于开发环境的搭建其实影响不大,制作局部上的操作上发生了改 ...

  2. OpenCV2学习笔记01:Linux下OpenCV开发环境的搭建

    个人已经厌倦了Windows下的开发方式,于是决定转到Linux平台上来,当然我也知道这个转变会很艰辛,但是我还是要坚持.所以,后面的所有开发我都会基于Linux和Qt,先从开发环境的搭建开始做起,当 ...

  3. linux 下 eclipse 开发环境的搭建

    在windows平台下开发习惯了各种ide,不得不承认ide给我们开发带来的便捷.于是希望在linux平台下也希望找到一个合适的ide.这就想起来了eclipse具有跨平台性. 那么就开始搭建环境吧. ...

  4. <转>linux 下stm32开发环境安装

    传送门: http://www.eefocus.com/marianna/blog/13-10/298454_7e04f.html http://blog.sina.com.cn/s/blog_643 ...

  5. Linux环境下Android开发环境的搭建

    本文主要介绍在Ubuntu下Android开发环境的搭建,所使用的IDE为Eclipse(Android Studio同理,且可省去配置SDK以及安装adt插件的步骤). 1.安装JDK (1)JDK ...

  6. Linux设备驱动开发环境的搭建(转)

    经过两周的摸索,终于对Linux设备驱动开发有了个初步的认识,下面对Linux设备驱动开发环境的搭建做个小结,以方便自己以后查询,同时也能给同道的初学者一点帮助. 刚接触Linux设备驱动时,初学者往 ...

  7. Ubuntu 14.04下java开发环境的搭建--3--Tomcat及MySQL的安装

    前面两篇文章,已经说明了JDK和Eclipse 的安装方法,下面简单说一下,Tomcat及MySQL的安装方法. Tomcat的安装. 在合适的地方解压apache-tomcat-6.0.39.tar ...

  8. windows系统下ruby开发环境的搭建方法

    ruby是一种简单快捷的面向对象的脚本语言,非常直观.下面说一下windows系统下ruby开发环境的搭建方法. 工具/原料 rubyinstaller.exe 方法/步骤 1 到如下网站去下载最新的 ...

  9. deepin linux 下C开发环境配置

    # deepin linux 下C开发环境配置 ## 前言-----------------------------deepin操作系统商店默认提供了 eclipse for c\c++但是系统没有提 ...

随机推荐

  1. com.domain.bean

    package com.domain.bean; import java.util.LinkedHashMap; import java.util.Map; public class TmpBean ...

  2. C#_StringBuilder分离字符串实例

    using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace Stri ...

  3. Redirect

    Redirect To use this Class, add the following to the top of the file. use Redirect; Redirect::to($pa ...

  4. 使用angular的ng-repeat遇到的一个问题

    问题描述:ng-repeat绑定的数据集动态更新之后其包裹的子元素所绑定的事件全部丢失:问题详述:问题代码如下: <style> img{width:100px;height:100px; ...

  5. (转)C#创建windows服务

    原文地址:http://blog.itpub.net/23109131/viewspace-688117/ 第一步:创建服务框架 创建一个新的 Windows 服务项目,可以从Visual C# 工程 ...

  6. 用js实现简单排序算法

    一.冒泡排序 var arr1=[3,9,2,7,0,8,4]; for(var i=0;i<arr1.length;i++){ for(var j=i+1;j<arr1.length;j ...

  7. java星座、年龄、日期等

    星座: public static String getStar(Date date) { Calendar cal = Calendar.getInstance(); cal.setTime(dat ...

  8. javascript form 第22节

    <html> <head> <title>Form对象</title> </style> <script type="tex ...

  9. CSS3的几个标签速记3

    transition:CSS3过渡     css3里很好的一个标签,可以非常方便的完成需要很多JS才能完成的动态效果 例语法:transition:width 2S,height 2S,transf ...

  10. 04_SSM框架整合(Spring+SpringMVC+MyBatis)

    [SSM的系统架构] [整合概述] 第一步: MyBatis和Spring整合,通过Spring管理mapper接口. 使用mapper的扫描器自动扫描mapper接口在Spring中进行注册. 第二 ...