注意一点:CCS也是安装在Linux主机上的,不是安装在Windows上的,我在Windows上做出了很多尝试,但最终也不没明白究竟要用怎样的格式去执行在ARM-Linux应用程序,out文件ELF可定不行,然后尝试转成bin,然后仍然说是格式错误!虽然尝试了远程连接ARM-Linux板卡,并实现了window-》show
view-》Remote Systems可以用来编辑远程的系统,当然需要UserID和登陆密码了,还有对应的IP地址,跟利用Qt进行远程调试ARM程序一样,也是通过Ssh、StpFiles等进行的下载程序,可在终端命令中执行类似超级终端的效果,虽然是通过网络连接的。

下面是参考的文章:

最近需要使用CCSV5使用gdbserver远程调试ARM cortex-a8的程序,移植成功gdbserve,使用的版本包是gdb-7.1,主机环境为ubuntu10.04,开发板挂载的nfs文件系统。CCSV5已经自带zylincdt,所以只需构建开发板端gdbserver就可以了。下面是详细过程。

1、gdb下载安装

下载gdb-7.1.tar.bz2至工作目录

gdb源码下载:http://ftp.gnu.org/gnu/gdb/

命令如下:

$tar -jxvf gdb-7.1.tar.bz2

$cd gdb-7.1

$sudo ./configure --target=arm-none-linux-gnueabi --enable-sim --prefix=/home/ss/develop_environment/gdb7.1

--prefix用于指定安装路径

$make

若有错误

linux-arm-low.c:61:21: error: sys/reg.h: No such file or directory

make: *** [linux-arm-low.o] 错误 1

gdb-7.1/gdb/gdbserver/linux-arm-low.c中:

#ifdef HAVE_SYS_REG_H

//#include <sys/reg.h>  (注释这一行)

#endif

然后再重新make

$sudo make install

完成后可以在/home/ss/develop_environment/gdb7.1下找到arm-linux-gdb文件

2、arm-linux-gdbserver的编译安装(gdbserver需要用gdb编译目录下文件所以没有单独发布)

进入./gdb/gdbserver

命令如下:

$cd gdb/gdbserver./configure --target=arm-none-linux-gnueabi --host=arm-none-linux-gnueabi

$make CC=arm-none-linux-gnueabi-gcc

(CC=arm-none-linux-gnueabi-gcc用于指定arm-linux编译器)

编译时若出现PATH_MAX undeclared错误的解决方法:(大部分不出现)

在hostio.c文件中增加

#include <linux/limits.h>

原因是宏PATH_MAX在<limits.h>中没有定义,而是定义在<linux/limits.h>中

(红色表示我在编译时没有碰到这个错误,此错误是网友整理的,留在这里以供以后参考)

编译成功后在当前目录下会生成gdbserver文件,拷贝至开发板上(可放入开发板/usr/bin/目录下,这样在任何目录下均可执行gdbserver命令)

3、这样编译出来的gdbserver会有问题:

Remote ‘g’ packet reply is too long “0000000000000000000000000000000000000000000000000000000000000000000000000000000000”

GDB远程调试错误解决

使用GDB 7.1版本进行远程调试时出现:Remote ‘g’ packet reply is too long错误,需要修改gdb代码解决,办法是:修改gdb/remote.c文件,注释process_g_packet函数中的下列两行:

//if (buf_len > 2 * rsa->sizeof_g_packet)

//error (_(“Remote ‘g’ packet reply is too long: %s”), rs->buf);

在其后添加:

if (buf_len > 2 * rsa->sizeof_g_packet) {

    rsa->sizeof_g_packet = buf_len ;

    for (i = 0; i < gdbarch_num_regs (gdbarch); i++) {

        if (rsa->regs->pnum == -1)

        continue;

        if (rsa->regs->offset >= rsa->sizeof_g_packet)
        rsa->regs->in_g_packet = 0;
        else  
        rsa->regs->in_g_packet = 1;

    }     

}

4、gdbserver的使用

要进行gdb调试,首先要在目标系统上启动gdbserver服务。在gdbserver所在目录下输入命令: 

(minicom下)

#cd /home/root/gcc_test

#gdbserver 10.2.7.22:10000 gcc_test(这里的gcc_test为在宿主机用arm-none-linux-gnueabi-gcc -d gcc_test.c -o gcc_test编译后传过来的)

10.2.7.22为宿主机IP,在目标系统的10000端口(你也可以设其他可用的值,当然必须跟主机的gdb一致)开启了一个调试进程,gcc_test为要调试的程序(必须-g加入调试信息)。 

出现提示: 

Process gcc_test created: pid=2130

Listening on port 10000 

(ubuntu10.04下)

#cd /home/ss/workdir/

#export PATH=$PATH:/home/ss/develop_environment/gdb7.1/bin

#arm-none-linux-gnueabi-gdb gcc_test

最后一行显示:This GDB was configured as “--host=i686-pc-linux-gnu,--target=arm-none-linux-gnueabi”...,如果不一致说明arm-linux-gdb有问题

说明此gdb在X86的Host上运行,但是调试目标是ARM代码。

(gdb) target remote 10.2.7.23:10000

(10.2.7.23为开发板IP)

出现提示: 

Remote debugging using 10.2.7.23:10000

[New thread 3200]

[Switching to thread 3200]

0x40002a90 in ??()

同时在minicom下提示:

Remote debugging from host 10.2.7.22:10000

5、为gdbserver加入多线程支持

默认情况gdbserver是不支持多线程调试的,拷贝linux或开发板文件系统lib目录下的libpthread.so.0/libpthread-2.11.1.so*和libthread_db.so.1/libthread_db-1.0.so(不同机器库的版本可能不一致)到交叉编译环境根目录的lib库目录下。

6、注意:用于CCSV5的arm-none-linux-gnueabi-gdb必须使用第1步编译安装的目录/home/ss/develop_environment/gdb7.1/bin下的,也就是arm-none-linux-gnueabi-gdb出于同一版本包。(调试详细过程见博文:《TI-Davinci开发系列之五CCS5.2使用gdbserver远程调试应用程序》)

移植成功后CCSV5调试界面与开发板端交互图(调试输出在gdbserver端,这里没有使用minicom)

更详细的CCSV5与gdbserver的使用请参阅:http://processors.wiki.ti.com/index.php/Linux_Debug_in_CCSv5

【Linux开发】CCS远程调试ARM,AM4378的更多相关文章

  1. 如何在linux主机上运行/调试 arm/mips架构的binary

    如何在linux主机上运行/调试 arm/mips架构的binary 原文链接M4x@10.0.0.55 本文中用于展示的binary分别来自Jarvis OJ上pwn的add,typo两道题 写这篇 ...

  2. windows8 APP开发的远程调试

    Win8上面的App开发远程调试: 这里先简单介绍一下对于win8的app的远程调试,环境设置:开发机器装有vs2012的win8系统,目标机器为虚拟机,预装win8系统. 1. 在虚拟机上安装vis ...

  3. 【Java】使用IDE开发工具远程调试Java代码

    概述 服务端程序运行在一台远程服务器上,我们可以在本地服务端的代码(前提是本地的代码必须和远程服务器运行的代码一致)中设置断点,每当有请求到远程服务器时时能够在本地知道远程服务端的此时的内部状态 测试 ...

  4. 【Java】使用Eclipse进行远程调试,Linux下开启远程调试

    原博地址:http://blog.csdn.net/dfdsggdgg/article/details/50730311 1.center下,在startup.sh文件首行中添加如下语句 declar ...

  5. 【Linux开发】OpenCV在ARM上的移植

    与X86 Linux类似,请参考:Linux 下编译安装OpenCV 本文在此基础上进行进一步操作. 网络上很多移植编译的方法比较老,多数针对OpenCV 1.0,而且方法很麻烦,不仔细操作很容易出错 ...

  6. NetBeans远程调试Linux c++ 11项目

    NetBeans远程调试Linux c++ 11项目 由于好多原因,好久没有写博客了,随着c++ 11的普及率越来越高,开发c++ 项目的人也越来越多,可以说c++ 11 给了c++ 这门语言第二次生 ...

  7. 在windows通过visual studio远程调试linux mono程序

    本文参考文章 https://github.com/techl/MonoRemoteDebugger 1.通过连接https://github.com/techl/MonoRemoteDebugger ...

  8. SharePoint 2013 本地开发解决方案以及远程调试

    转自:http://www.cnblogs.com/jianyus/p/3523387.html 在SharePoint开发中,我们需要在部署有SharePoint环境的服务器中开发,这是一件让人很苦 ...

  9. MAC使用IDA PRO远程调试LINUX程序

    1 背景 在学习Linux系统上的一些漏洞知识的时候,往往需要进行“实地测试”,但是在Linux系统上进行调试并不太方便,因为LINUX自带的GDB调试工具真的不太人性化,即使有GDBTUI之类的“伪 ...

随机推荐

  1. itchat的使用

    python 微信接口 -- itchat 文档 发表于 2018-03-16 | 分类于 Python | itchat 一. 安装 $ pip install itchat 特殊的字典使用方式通过 ...

  2. 多线程使用@Async注解创建多线程,自定义线程池

    转载自博客https://www.jianshu.com/p/7ac04a501eba

  3. CentOS6.X系统启动流程

    1.硬件启动阶段 BIOS自检  BIOS的功能由两部分组成,分别是POST码和Runtime服务.POST阶段完成后它将从存储器中被清除,而Runtime服务会被一直保留,用于目标操作系统的启动.B ...

  4. ZROI 19.07.30 简单字符串/ll

    写在前面:今天下午药丸--不会字符串,全程掉线/ll 给出字符串\(S\),\(q\)次询问,每次给出\(a,b,c,d\),询问\(S[a,b]\)的所有子串和\(S[c,d]\)最长公共前缀的最大 ...

  5. Windows 2012 R2 DataCenter服务器 重启之后,其他加域电脑无法访问域账户

    需在域控服务器重启,服务Kerberos Key

  6. python基础31[python IDE之Eclipse+PyDev]

    一 入门IDE作为python的初学者,在语法和类库学习阶段,我们可以使用以下简单使用的IDE:1) Python SDK 自带的IDEL(Python GUI)2) Komodo-Edit3) No ...

  7. linux-selinxu---性能 -8

    sed -ri.bk '/^SELINUX=/s/(SELINUX=)(.*)/\1disabled/' /etc/selinuconfig 修改并备份 脚本打开关闭 selinux if [[ &q ...

  8. 状态管理-vuex

    1.使用vuex // 使用vuex // 第一步:装包npm i vuex -S // 第二步: import Vuex from 'vuex' Vue.use(Vuex) // 第三步: cons ...

  9. 莫队算法 ( MO's algorithm )

    莫队算法是由清华大学神牛莫涛发明的一种处理区间问题的离线算法 算法核心是通过先将问询区间总长度平方分块.然后将所有的问询区间按照左端点所在的块编号排序.在同一块内的则按右端点升序 然后设置左右两个下标 ...

  10. pd.read_csv参数解析

    对pd.read_csv参数做如下解释: pandas.read_csv(filepath_or_buffer, sep=', ', delimiter=None, header='infer', n ...