Linux下STM32开发环境的搭建

时间:2022-05-30 06:46:27

目录

一、概述

  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集成开发环境结构

Linux下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.

Linux下STM32开发环境的搭建

  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插件,打开工程的属性,情况是这样的:

Linux下STM32开发环境的搭建

  仅仅安装了“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”,情况是这样的:

Linux下STM32开发环境的搭建

Linux下STM32开发环境的搭建

  仅仅安装了“eclipse IDE for C/C++ developers”,是可以调用外部的硬件调试服务器--JLinkGDBServer,只是这个时候由于无法连接到GDB调试客户端而无法进行调试。

Linux下STM32开发环境的搭建

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

  成功的界面如下

Linux下STM32开发环境的搭建

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

  成功的界面如下

Linux下STM32开发环境的搭建

4> 下载测试

命令序列

① h   --停止程序的运行

Linux下STM32开发环境的搭建

②  exec device=STM32F103ZE   --选择芯片型号

  这里选择的是STM32F103ZE,而不是STM32F103VET6,原因是由于此版本的JLink驱动不支持STM32F103VET6,所以用一个与之接近的型号代替。

Linux下STM32开发环境的搭建

③ loadbin Led_Test.bin 0x8000000   --下载

Linux下STM32开发环境的搭建

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-->等待

Linux下STM32开发环境的搭建

方法二:自动下载安装

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 buttonLinux下STM32开发环境的搭建
  • 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

Linux下STM32开发环境的搭建

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查看已经安装的插件:

Linux下STM32开发环境的搭建

测试二:此插件安装成功后,在新建C工程的时候,界面也发生了变化

Linux下STM32开发环境的搭建

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> 更改需要的文件

① 启动文件

Linux下STM32开发环境的搭建

  另外,注意将TureSTUDIO/startup_stm32f10x_hd.s 的后缀"s"改成大写的"S",原因是由于编译器对应S的文件会先进行预处理操作然后是汇编操作,而s的只进行汇编操作,详细原因参考gcc编译 .s文件和.S文件有什么区别

② 连接脚本

Linux下STM32开发环境的搭建

③ 其他文件与在MDK上的需要文件类似,把需要的文件保留,不需要的文件从工程中移除

5> 开始配置工程

  在工程浏览器中选中工程,右键单击选择Properties,再选择C/C++ Build-->Settings,跳出如下界面

Linux下STM32开发环境的搭建

6> 配置汇编器Cross ARM GNU Assembler

  主要是添加预处理宏

Linux下STM32开发环境的搭建

7> 配置编译器Cross ARM C Compiler

① 添加预处理宏

Linux下STM32开发环境的搭建

② 添加头文件搜索目录

  • /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

Linux下STM32开发环境的搭建

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

Linux下STM32开发环境的搭建

9> 配置生成的镜像文件 Cross ARM GNU Creat Flash Image

  选择生成二进制的镜像文件

Linux下STM32开发环境的搭建

10> 编译

  Project-> Build Project

Linux下STM32开发环境的搭建

  在/root/workspace/LED_Test/Debug目录中就可以看到生成的目标文件

Linux下STM32开发环境的搭建

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

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

1> 安装

  此种方法是Eclipse自动在用户提供的网络地址上进行搜索,然后下载安装,所以确保虚拟机能上网。

Linux下STM32开发环境的搭建

2> 验证  

  成功以后,就可以在Run-->Debug Configurations中看到如下界面

Linux下STM32开发环境的搭建

  需要说明的是倘若Run菜单下没有找到“Debug Configurations”选项,那是由于之前工程处于编译环境,还没有切换到调试环境,只有切换到调试环境才能在Run菜单下找到该选项。切换方法是:

Linux下STM32开发环境的搭建

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

1> 配置Eclipse调试选项

① Debugger

  Run-->Debug Configurations-->GDB Hardware Debugging -->Debugger

Linux下STM32开发环境的搭建

② 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

Linux下STM32开发环境的搭建

  再在Run Commands中输入命令

monitor reg r13 = (0x00000000)
monitor reg pc = (0x00000004)
break ResetHandler
break main
continue

Linux下STM32开发环境的搭建

2> 配置Eclipse调试选项

  Run-->External Toos-->External Toos Configurations-->New _configuration

Linux下STM32开发环境的搭建

3> 调试

  Run -->Debug

Linux下STM32开发环境的搭建

3、 另一种调试的方法

1>  配置

  配置还是步骤7中的1>和2>

2> 启动JLinkGDBServer

  在终端上启动JLinkGDBServer

Linux下STM32开发环境的搭建

3> GDB调试

  Run -->Debug

  如果连接成功,此时在终端上打印出如下界面

Linux下STM32开发环境的搭建

五、使用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 

  调试界面如下

Linux下STM32开发环境的搭建

本章参考资料: 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