zoukankan      html  css  js  c++  java
  • 【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

  • 相关阅读:
    gain 基尼系数
    luogu P5826 【模板】子序列自动机 主席树 vector 二分
    牛客挑战赛39 树与异或 离线 树上莫队 树状数组 约数
    4.22 省选模拟赛 三元组 manacher 回文自动机
    4.22 省选模拟赛 最优价值 网络流 最大权闭合子图
    4.18 省选模拟赛 消息传递 树剖 倍增 线段树维护等比数列
    luogu P4008 [NOI2003]文本编辑器 splay 块状链表
    牛客挑战赛39 密码系统 后缀数组
    luogu P1526 [NOI2003]智破连环阵 搜索+最大匹配+剪枝
    luogu P4095 [HEOI2013]Eden 的新背包问题 多重背包 背包的合并
  • 原文地址:https://www.cnblogs.com/huty/p/8518189.html
Copyright © 2011-2022 走看看