• 【Linux开发】CCS远程调试ARM,AM4378


    注意一点: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

  • 相关阅读:
    异常总结
    反射
    面试题
    继承多态接口
    JAVA面向对象变成学习!
    学生管理系统---三层架构
    Secondary NameNode
    Hadoop之HDFS
    大数据相关概念二
    大数据相关概念
  • 原文地址:https://www.cnblogs.com/huty/p/8518189.html
Copyright © 2020-2023  润新知