一、概述 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 为了能进行交叉编译,我们需要安装交叉编译链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 2> 解压安装 tar 3> 修改/etc/profile 4> 使/etc/profile的修改生效 5> 测试 #arm-none-eabi-gcc -v
成功的界面如下 3、安装JLink驱动 Jlink驱动包含四个工具:JLinkExe、JLinkGDBServer、JLinkRemoteServer、JLinkSWOViewer。 注意选择安装包:“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个插件;如果采用自动下载安装则可以完整的安装所有的插件。 方法一:手动下载安装 插件名: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中输入检测参数 [url=][/url]
monitor flash device = STM32F103ZE monitor flash download = 1 monitor flash breakpoints = 1 monitor clrbp monitor endian little monitor speed 5 monitor reset monitor sleep 100 monitor speed auto monitor writeu32 0xE000ED08 = 0x00000000[url=][/url]
再在Run Commands中输入命令 monitor reg r13 = (0x00000000)monitor reg pc = (0x00000004)break ResetHandlerbreak maincontinue
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文件,内容为: [url=][/url]
target remote :2331set mem inaccessible-by-default offmonitor speed automonitor endian littlemonitor resetmonitor flash device = STM32F103ZEmonitor flash breakpoints = 1monitor flash download = 1loadmonitor reg sp = (0x08000000)monitor reg pc = (0x08000004)break ResetHandlerbreak maincontinue[url=][/url]
需要说明的是:由于当前版本的Jlink驱动不支持STM32F103VET6,所以选择STM32F103ZE来代替。 6、启动JLinkGDBServer 打开一个终端输入命令 root@daneiqi:~# JLinkGDBServer
7、启动调试 再打开一个终端,在工程的Debug目录下输入命令: root@daneiqi:~/workspace/LED_Test/Debug# arm-none-eabi-gdb LED_Test.elf
调试界面如下 |