【转载】eclipse调试arm裸机程序

一、集成开发环境

软件部分:eclipse , GDB Server , Jlink软件

硬件部分:Jlink硬件

准备工作1:从SD/NOR Flash启动,格式化nand flash

准备工作2:硬件连接

1. Jlink连接

2. 串口连接

3. nand启动

二、安装GDB Server

解压:tar xvzf arm-linux-gdb-7.5.tar.gz

进入目录:cd arm-linux-gdb-7.5

编译安装:./build-all

上面执行好后,gdb工具就安装好了,安装在/opt/arm-linux-gdb

为了方便使用,需要添加环境变量:vim /root/.bashrc

在交叉编译链的前面添加gdb的环境变量:

export PATH=$PATH:/opt/arm-linux-gdb/bin/

export PATH=$PATH:/usr/local/arm/4.3.2/bin/

之后保存,退出。这就可以直接运行arm-linux-gdb,如果不行的话则可能是添加错误,或者需要注销。

问:为什么一定要添加到交叉编译链之前呢?

答:因为在交叉编译链中也包含了arm-linux-gdb,linux系统会根据path环境变量的先后顺序来寻找,我们需要找的是我们上面安装的,而不是这里的(因为版本可能不对),所以在添加环境变量的时候,一定要添加在交叉编译链的前面。

三、安装Jlink软件

解压:tar xvzf JLink_Linux_V434a.tgz

进入目录:cd JLink_Linux_V434a

复制库:cp -d libjlinkarm.so* /usr/lib -f

复制:cp 45-jlink.rules /etc/udev/rules.d/

上面四个命令执行完之后,检测是否能够检测到Jlink的连接:

在虚拟机的下面,点击显示为Jlink相关的usb图标,连接。

执行命令:./JLinkGDBServer

如果也切顺利的话,会显示连接上的ARM核心为ARM11:

四、安装Eclipse软件

红帽企业版6.3中默认安装了eclipse

执行:which eclipse 可以查看在哪个目录下

这个版本不适合,我们不能用,所以首先我们得卸载这个,其实我们把查询到的eclipse修改一个名字就好了,在查询到的目录执行:mv eclipse eclipse-back即可。

安装自己的eclipse:

解压:tar zxvf eclipse-cpp-helios-SR2-linux-gtk.tar.gz

进入目录:cd eclipse-cpp-helios-SR2-linux-gtk

运行程序:./eclipse

这就启动eclipse了。

然后选择自己的工程目录:

配置eclipse:

首先得安装一个插件,这个插件是要通过网络安装的,所以linux必须能够上网。

安装插件:点击菜单栏的help -> install new software

在Work with输入插件位置:http://opensource.zylin.com/zylincdt ,点击add

经过一段时间,在下面的方框中显示出找到的插件,点击选中:

点击next;

之后按照提示来。

然后重启:

使用eclipse进行开发

新建工程,选择新建一个已存在源文件的工程:

注意:这里的源文件目录必须是在工作目录下的另外一个目录,比如工作目录是"/home/S3-ARM/Part1/lesson1",那么【Existing Code Location】的目录为不能和工作目录相同,必须是别的目录,或者是工作目录下的一个子目录,比如"/home/S3-ARM/Part1/lesson1/led/"或者是"/opt/led/"

点击finish。

编译项目:【Project】 -> 【Build All】

注意:取消掉【Project】里面的自动编译【Build Automatically】

配置调试器:【甲虫图标】 -> 【Debug Configurations】

双击【Zylin Embedded debug】,出现如下界面:

选中选项卡【main】

在【C/C++ Application】中选择要调试的项目,注意是选中 "xxx.elf" 文件:

选中选项卡【Debugger】

去掉【Stop on startup at:】选项

将【GDB debugger:】修改成" arm-linux-gdb "

选中选项卡【Commands】

在【‘Initialize‘ commands】中填入如下初始化指令:

下面是初始化S3C6410处理器的初始化脚本

1 # tiny6410_config 2 # connect to the J-Link gdb server 3 target remote localhost:2331 4 # Set JTAG speed to 30 kHz 5 monitor endian little 6 monitor speed 30 7 # Reset the target 8 monitor reset 9 monitor sleep 10 10 # 11 # CPU core initialization (to be done by user) 12 # 13 # Set the processor mode 14 monitor reg cpsr = 0xd3 15 #config MMU 16 #flush v3/v4 cache 17 monitor cp15 7, 7, 0, 0 = 0x0 18 #/* flush v4 TLB */ 19 monitor cp15 8, 7, 0, 0 = 0x0 20 #disable MMU stuff and caches 21 monitor cp15 1, 0, 0, 0 =0x1002 22 #Peri port setup 23 monitor cp15 15, 2, 0, 4 = 0x70000013 24 #disable watchdog 25 monitor MemU32 0x7e004000 = 0x00000000 26 monitor sleep 10 27 #disable interrupt 28 monitor MemU32 0x71200014 = 0x00000000 29 monitor MemU32 0x71300014 = 0x00000000 30 monitor MemU32 0x7120000C = 0x00000000 31 monitor MemU32 0x7130000C = 0x00000000 32 monitor MemU32 0x71200F00 = 0x00000000 33 monitor MemU32 0x71300F00 = 0x00000000 34 #set clock 35 monitor MemU32 0x7e00f900 = 0x0000801e 36 monitor MemU32 0x7e00f000 = 0x0000ffff 37 monitor MemU32 0x7e00f004 = 0x0000ffff 38 monitor MemU32 0x7e00f020 = 0x01043310 39 monitor MemU32 0x7e00f00C = 0xc2150601 40 monitor MemU32 0x7e00f010 = 0xc2150601 41 monitor MemU32 0x7e00f024 = 0x00000003 42 monitor MemU32 0x7e00f014 = 0x00200102 43 monitor MemU32 0x7e00f018 = 0x00000000 44 monitor MemU32 0x7e00f01C = 0x14000007 45 #config sdram 46 monitor MemU32 0x7e00f120 = 0x00000008 47 monitor MemU32 0x7e001004 = 0x00000004 48 monitor MemU32 0x7e001010 = 0x0000040f 49 monitor MemU32 0x7e001014 = 0x00000006 50 monitor MemU32 0x7e001018 = 0x00000001 51 monitor MemU32 0x7e00101c = 0x00000002 52 monitor MemU32 0x7e001020 = 0x00000006 53 monitor MemU32 0x7e001024 = 0x0000000a 54 monitor MemU32 0x7e001028 = 0x0000000c 55 monitor MemU32 0x7e00102c = 0x0000018f 56 monitor MemU32 0x7e001030 = 0x0000000c 57 monitor MemU32 0x7e001034 = 0x00000002 58 monitor MemU32 0x7e001038 = 0x00000002 59 monitor MemU32 0x7e00103c = 0x00000002 60 monitor MemU32 0x7e001040 = 0x00000002 61 monitor MemU32 0x7e001044 = 0x00000013 62 monitor MemU32 0x7e001048 = 0x00000013 63 monitor MemU32 0x7e00100C = 0x00010012 64 monitor MemU32 0x7e00104C = 0x00000b45 65 monitor MemU32 0x7e001200 = 0x000150f8 66 monitor MemU32 0x7e001304 = 0x00000000 67 monitor MemU32 0x7e001008 = 0x000c0000 68 monitor MemU32 0x7e001008 = 0x00000000 69 monitor MemU32 0x7e001008 = 0x00040000 70 monitor MemU32 0x7e001008 = 0x00040000 71 monitor MemU32 0x7e001008 = 0x000a0000 72 monitor MemU32 0x7e001008 = 0x00080032 73 monitor MemU32 0x7e001004 = 0x00000000 74 # Setup GDB for faster downloads 75 #set remote memory-write-packet-size 1024 76 set remote memory-write-packet-size 4096 77 set remote memory-write-packet-size fixed 78 monitor speed 12000 79 break _start 80 load

初始化2440的脚本内容如下:

1 # connect to the J-Link gdb server 2 target remote localhost:2331 3 # Set JTAG speed to 30 kHz 4 monitor endian little 5 monitor speed 30 6 # Reset the target 7 monitor reset 8 monitor sleep 10 9 # 10 # CPU core initialization (to be done by user) 11 # 12 # Set the processor mode 13 monitor reg cpsr = 0xd3 14 #config MMU 配置MMU 15 #flush v3/v4 cache 16 monitor cp15 7, 7, 0, 0 = 0x0 17 #/* flush v4 TLB 协处理器*/ 18 monitor cp15 8, 7, 0, 0 = 0x0 19 #disable MMU stuff and caches 20 monitor cp15 1, 0, 0, 0 =0x1002 21 #Peri port setup 22 monitor cp15 15, 2, 0, 4 = 0x70000013 23 #disable watchdog kangear 关闭看门狗 24 monitor MemU32 0x53000000 = 0x00000000 25 monitor sleep 10 26 #disable interrupt kangear 关闭中断 27 monitor MemU32 0x4A000008 = 0xffffffff 28 monitor MemU32 0x4A00001C = 0x7fff 29 #set clock 30 #initialize system clocks --- locktime register 31 monitor MemU32 0x4C000000 = 0xFF000000 32 #initialize system clocks --- clock-divn register 33 monitor MemU32 0x4C000014 = 0x5 #CLKDVIN_400_148 34 #initialize system clocks --- mpll register 35 monitor MemU32 0x4C000004 = 0x7f021 #default clock 36 #config sdram 37 monitor MemU32 0x53000000 0x00000000 38 monitor MemU32 0x4A000008 0xFFFFFFFF 39 monitor MemU32 0x4A00001C 0x000007FF 40 monitor MemU32 0x53000000 0x00000000 41 monitor MemU32 0x56000050 0x000055AA 42 monitor MemU32 0x4C000014 0x00000007 43 monitor MemU32 0x4C000000 0x00FFFFFF 44 monitor MemU32 0x4C000004 0x00061012 45 monitor MemU32 0x4C000008 0x00040042 46 monitor MemU32 0x48000000 0x22111120 47 monitor MemU32 0x48000004 0x00002F50 48 monitor MemU32 0x48000008 0x00000700 49 monitor MemU32 0x4800000C 0x00000700 50 monitor MemU32 0x48000010 0x00000700 51 monitor MemU32 0x48000014 0x00000700 52 monitor MemU32 0x48000018 0x0007FFFC 53 monitor MemU32 0x4800001C 0x00018005 54 monitor MemU32 0x48000020 0x00018005 55 monitor MemU32 0x48000024 0x008E0459 56 monitor MemU32 0x48000028 0x00000032 57 monitor MemU32 0x4800002C 0x00000030 58 monitor MemU32 0x48000030 0x00000030 59 # Setup GDB for faster downloads 60 #set remote memory-write-packet-size 1024 61 monitor speed auto 62 break _start 63 load

初始化210的脚本内容如下:

1 # connect to the J-Link gdb server 2 target remote localhost:2331 3 # Set JTAG speed to 30 kHz 4 monitor endian little 5 monitor speed 30 6 # Reset the target 7 monitor reset 8 monitor sleep 10 9 # Setup GDB for faster downloads 10 #set remote memory-write-packet-size 1024 11 monitor speed auto 12 break main 13 load

经过上面的设置之后,就可以开始调试了

五、开始调试

注意:用eclipse进行调试的时候必须保证JLinkGDBServer同时在运行

否则会出现类似下面的错误:

保证JLinkGDBServer运行起来了,然后点击【小甲壳虫】 -> 项目名

准备进入调试界面

选择【yes】

调试界面如下:

点击【F5】是"Step Into"

【F6】是"Step Over"

等等,这里可以查看寄存器的值,没存的值等等。

一步一步下去可以看到开发板上的led点亮了。

转自:http://my.oschina.net/u/914989/blog/153333

时间: 2024-10-11 20:42:05

【转载】eclipse调试arm裸机程序的相关文章

eclipse调试arm裸机程序

一.集成开发环境 系统:centos 6.5 软件部分:eclipse , GDB Server , Jlink软件 硬件部分:Jlink硬件 准备工作1:从SD/NOR Flash启动,格式化nand flash 准备工作2:硬件连接 1. Jlink连接 2. 串口连接 3. nand启动 二.安装GDB Server 下载 GDB   ftp://sourceware.org/pub/gdb/releases/ 解压:#tar xvzf gdb-7.5.tar.gz 进入目录:#cd gd

Eclipse开发调试ARM裸机程序

Makefile稍微动一下,就是原来的开头的“led_on.bin”改为“all”,eclipse默认编译的目标为“all”,就可以顺利编译通过了,编译完后会产生led_on.bin,led_on_elf.前者是下载到NandFlash中运行的,后者是调试用的. 能编译后就要开始配置调试了,和调试u-boot唯一不同的是指定应用程序的名字,如下图所示.其它的 Debugger Commands和调试u-boot中的配置一样的. 还有根据Makefile中的链接地址得出这个不是在SDRAM中运行的

ARM裸机程序之LED灯

从3月份开始看arm的裸机程序,到现在一个半月了,做到后来,发现自己越做到综合的程序,越吃力,还是得回头看看,为了最终写一个bootloader打下点基础吧,所以以这篇文章为开始,总结一下之前做过的裸机程序,希望会有所收获,我用的开发板是友善之臂的mini2440. 首先声明一点我都是在linux环境下写裸机程序的,因为这样能知道更多底层的东西,不过在这里面写就是有点不方便的是调试的时候,所以你程序要是调试不出来,你得把程序移植到一些编译器里调试(请注意移植的时候格式有点不同),所以偶尔在kei

linux(ubuntu12.04)下手机真机调试eclipse上的android程序

模拟器太慢了,而且在模拟器上运行程序的效果毕竟还是跟在真机上有点区别的,所以建议大家尽量使用真机调试.把android手机通过usb线连接至电脑,之后步骤如下: 1. 在/etc/udev/rules.d/目录下新建一个51-android.rules文件,文件内容为: SUBSYSTEM == "usb",ENV{DEVTYPE} == "usb_device",MODE = "0666" 2.$ sudo chmod a+rx /etc/ud

ok6410[002] ubuntu1604系统下搭配ckermit和dnw基于RAM的裸机程序调试环境

ubuntu1604系统下搭配ckermit和dnw基于RAM的裸机程序调试环境 系统:  ubuntu16.04 裸板: 飞凌公司OK6410开发板 目标:搭建基于ubuntu1604系统和基于RAM的裸机程序开发环境 1.安装配置ckermit 在ubuntu1604下一般做裸板开发时都是使用ckermit作为远程通讯终端,下面我们就开始讲解下其安装与配置. 1.1.安装ckermit 在ubuntu系统下安装ckermit,使用 sudo  apt-get  install  ckermi

使用 Eclipse 调试 Java 程序的技巧【9】

若有不正之处,请多多谅解并欢迎批评指正,不甚感激.请尊重作者劳动成果: 本文原创作者:pipi-changing本文原创出处:http://www.cnblogs.com/pipi-changing/ 本文版权归作者和博客园共有,未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接 ,否则保留追究法律责任的权利. 使用 Eclipse 调试 Java 程序的技巧 不要调试太多 只调试你觉得有问题的代码或者一部分一部分功能的调试: [ 断点视图 : 条件断点] 如果你只对应用中的某部分感

Eclipse替代ndk-gdb断点调试Android NDK程序

一 概述: Eclipse调试NDK程序的操作并不难,难的是环境的搭建.光是安装Eclipse就有不少问题,真是"大错不犯,小过不断"不胜期烦.在网上,已经有先行者记录下了Eclipse断点调试Android NDK程序的方法: <Eclipse + ADT(包括NDK Plugin) + CDT 搭建Android NDK开发环境>网址:http://blog.sina.com.cn/s/blog_48ed03c80101nhei.html 我遇到的情况与上文有些不同,上

【Eclipse】eclipse调试java程序的九个技巧

本文转自[半夜乱弹琴],原文地址:http://www.cnblogs.com/lingiu/p/3802391.html 九个技巧: 逻辑结构 条件debug 异常断点 单步过滤 跳到帧 Inspect expressions display 远程debug 最早开始用eclipse的debug的时候,只会F5 F6 F7 F8,甚至F7都不是很搞的明白是怎么用的,那时候资浅,碰不到需要复杂debug的代码,慢慢工作深入了,场景碰多了,就需要各种debug技巧来提升定位bug效率,以前找人帮忙

使用Eclipse调试Java 程序的10个技巧

你应该看过一些如<关于调试的N件事>这类很流行的帖子 .假设我每天花费1小时在调试我的应用程序上的话,那累积起来的话也是很大量的时间.由于这个原因,用这些时间来重视并了解所有使我们调试更方便的功能. 那能为你省下一些时间,也将会使你的生活更安逸.轻松.同时也表明其它关于此主题的帖子也是很有价值的. 第1条:不要调试太多 一个关于调试的疯狂声明作为开头.但它必须是要说的!尝试切分一下你那复杂的逻辑成多个独立的单元,并编写单元测试来检测你代码的正确性.我想像如下 这样的流程应该是发生得非常频繁的-