Windows下通过ARM目标板上的gdbserver进行远程调试的方法

因某种需要,要在Windows平台上进行程序开发,目标板是基于Micrel芯片(ARMv4t)做的,上面运行有Linux最小系统,只有最基本的命令,需要在Windows平台上交叉编译能在ARMv4t上运行的目标代码,并且还要能进行远程调试。基于这些需求,初步计划按以下步骤进行:
1、先在Windows平台上交叉编译一个简单的C语言程序,并上传到开发板上,能正常运行即可;
2、交叉编译gdbserver,并上传到开发板;
3、进行远程调试。
按上述计划,首先要找一个Windows环境下的交叉编译环境,参考了http://www.veryarm.com/arm-none-linux-gnueabi-gcc 下载了arm-2011.03-41-arm-none-linux-gnueabi.exe Windows安装版(个人感觉在Windows下用安装版比较好,解压版需要设定PATH),安装成功后,用C写了一个简单的Hello,World!,使用如下命令进行编译:

arm-none-linux-gnueabi-gcc hello.c -o hello
目标板与Windows主机通过以太网和串口进行连接,以太网用来上传文件,串口用于进行终端访问。目标板与Windows主机使用tfpt进行文件传递。Windows上运行有tftp server,如下图:

通过串口终端在目标板上运行如下命令下载Windows主机上编译的hello程序:
tftp -gr hello 10.32.2.10
使用命令chmod 755 hello添加执行权限后执行时,出现下述错误提示:
Illegal Instruction
这说明程序能运行,但指令不对,这有可能是在Windows上交叉编译时没有指定具体目标架构的原因(在Ubuntu下使用上述命令进行交叉编译的程序可以正常执行)。为了解决这个问题,首先通过串口终端查看了目标板启动时的信息,了解到ARM芯片是armv4t架构,接着使用arm-none-linux-gnueabi-gcc --target-help查看交叉编译器支持的ARM架构类型,发现该命令通过-march=option可以指定目标类型,于是,编译命令改为:
arm-none-linux-gnueabi-gcc -march=armv4t hello.c -o hello -g
编译成的程序在目标机上能够运行!(运气不错)
第一步完成,接下来交叉编译gdbserver。先前安装的arm-2011.03-41-arm-none-linux-gnueabi.exe包含有在Windows下运行的arm-none-linux-gnueabi-gdb.exe命令,要进行远程调试,需要在目标板上运行gdbserver。于是上gdb官网(http://ftp.gnu.org/gnu/gdb)下载gdb7.6的代码。突然一想,既然arm-2011.03-41-arm-none-linux-gnueabi.exe包含有Windows上执行的gdb,那是不是也包含有在Linux上运行行的gdbserver呢?进入安装目录一搜索,Bingo,果然有,在安装目录CodeSourcery\Sourcery_G++_Lite\arm-none-linux-gnueabi\libc\armv4t\usr\bin下,运气不错。把该目录下的gdbserver放到目标版上后,果真能运行。第二步完成(俺有时还是比较懒的,在Windows下就不再自己编译了
第三步就相对容易了,在目标板上运行命令启动gdbserver:
./gdbserver 10.32.2.80:3333 hello
上述命令中的IP是目标板自己的IP地址,端口号自己指定,只要不冲突就行,后面的hello是包含调试信息的被调试程序。然后在Windows下运行arm-none-linux-gnueabi-gdb.exe,进入gdb提示符后后,执行target remote 20.32.2.80:3333就联上目标板的gdbserver了,然后再在gdb提示符下执行file hello,这个是在Windows下加载被调试的程序,之后就按gdb的命令设置端点等就可以调试了。

原文地址:http://blog.51cto.com/petrelight/2085374

时间: 2024-10-29 04:36:44

Windows下通过ARM目标板上的gdbserver进行远程调试的方法的相关文章

如何在目标板上实现blktrace

1. 重新配置目标板上的Linux内核,使能以下两个功能 1) CONFIG_DEBUG_FS=y 2) CONFIG_BLK_DEV_IO_TRACE=y 2. 重新编译内核,将修改后的内核uImage写入目标板,并reboot 对不同的目标板,有不同的uImage写入方法,对于Hisilicon Hi3516a来说,是采用tftp方式烧写入SPI flash或NAND flash中的.对于Xilinx 的 Zedboard,由于其通常采用boot from SD card的方式,所以我们的u

深入学习:Windows下Git入门教程(上)

一,安装Git: 1.1Linux上安装命令: sudo apt-get install git 1.2在Windows上安装Git: 使用Windows版的msysgit,官方下载地址:http://msysgit.github.io/,点击进入官网,如果官网无法正常下载我这里有当前的最新版,已经上传到CSDN上,下载地址为:http://download.csdn.net/detail/huangyabin001/7564005,点击进入下载 1.3安装完成进行配置: $ git confi

解决Windows下安装MySQL 5.5,运行MySQLInstanceConfig.exe没有响应的方法

我在Windows Server 2003虚拟机上安装MySQL5.5(社区版).这个虚拟机之前被别人安装过MySQL5.5和MySQL5.0,但是忘了root密码,所以重装.不出意外的遇到了配置MySQL Instance时MySQLInstanceConfig.exe没有响应的问题.(我记得以前遇到这个问题,就果断换了MySQL5.0,绕开却并未解决) 试了很多方法,有说需要以Administrator身份运行(据说WIN7上安装会是这个问题,而我用的是Windows Server 2003

在Windows下安装64位压缩包版mysql 5.7.11版本的方法

为了学习数据库,自己去网上下载了最新版本的Windows64位的mysql 5.7.11,但是花了很长的时间在安装的问题上,同时也借鉴了几位前辈的博文来帮助自己解决在安装过程中遇到的问题,安装成功之后,我来总结一下Windows下安装这个版本的步骤,同时也借鉴了几位前辈的博文来帮助解决自己在安装过程中遇到的问题. http://my.oschina.net/happymzw/blog/645198?fromerr=dqUoSnO6 http://www.cnblogs.com/endv/p/52

Ubuntu14.04 交叉编译busybox给 Android系统ARM目标板

拿到一个RK3288的开发板,但是不得不说adb shell不太好用,像下面这样太锉了. 于是想着把busybox编译进去. 1. 准备编译环境 其实现在Ubuntu上交叉编译相比之前要简单那很多. 1.1 安装 JDK 6: sudo add-apt-repository ppa:webupd8team/java sudo apt-get update sudo apt-get install oracle-java6-installer 1.2 依赖包: Ubuntu 12.04 软件包安装

Windows下fabric sdk连接Linux上fabric网络的调试过程

上个月刚入职一家公司从事区块链研发工作,选型采用Hyperledger Fabric作为开发平台.团队的小组成员全部采用的是在VirtualBox上面安装桌面版的Ubuntu 16.04虚拟机,开发工具JetBrains GoLand也就直接在桌面版的虚拟机里面安装.而我因为之前比较习惯使用Vagrant + VirtualBox的方式快速加载我定制版的Ubuntu镜像从而创建Linux开发环境,这样一来的弊端就是我只能通过命令行来进行一切操作而没有桌面可操作,所以我的整个开发IDE就在本机的w

[Python]处理windows下多级目录文件,上传到Linux服务器

#-*- coding: utf-8 -*- __author__ = 'tsbc' import sys reload(sys) sys.setdefaultencoding('utf-8') import paramiko import os import time class Upload(): """ 上传每天生成的测试报告到Linux的web服务器. paramiko 包需要安装 /result/ 下存放html文件 /result/image 截图文件 "

Windows下的Eclipse连接不上虚拟机上的hdfs,一直显示Listing folder content的解决方案

Eclipse连接不上虚拟机上的hdfs,一直显示Listing folder content,如下图所示: 要做到以下三点: 1. 本身就还没创建输入和输出目录,此时要在hdfs上建个文件夹 . #bin/hdfs dfs -mkdir –p /user/hadoop/input #bin/hdfs dfs -mkdir -p  /user/hadoop/output 2. core-site.xml这个配置文件中要写虚拟机的ip地址,不能写localhost 3. 一定要关闭防火墙 syst

windows下PHP中Fatal error Call to undefined function curl_init()的解决方法

参考官方解决方法:http://nz.php.net/manual/en/curl.installation.php 1.php安装目录下的ext文件夹下面是否有php_curl.dll文件,然后右键->属性->详细信息,查看版本号是否和PHP版本一致:2.php.ini文件;extension=php_curl.dll前面的";"去掉如果以上方法还不行的话,请继续往下:3.(如果是windows32位系统)复制 php_curl.dll, ssleay32.dll, li