Cross compile gdbserver and use it in ARM linux (在ARM uClinux下编译和使用gdbserver)

交叉编译GDB工具链 1. 交叉编译 交叉编译是指在一种平台上编译出运行于另一种平台的程序。这里的平台,涉及硬件和软件两个部分,硬件平台指 CPU 架构,软件平台指操作系统。交叉编译主要针对嵌入式领域,因为嵌入式系统资源受限,没有办法在嵌入式平台上运行一套编译环境,因此需要在其他性能更强劲的平台上借助交叉编译工具链来制作可在嵌入式平台上运行的程序。 交叉编译与普通编译基本步骤一样: [1] configure 在... 阅读详情

1. get and unzip src
 
  # mkdir /usr/src/debug
  # cd /usr/src/debug
  # wget ftp://ftp.gnu.org/pub/gnu/gdb/gdb-6.3.tar.bz2
  # tar -jxvf gdb-6.3.tar.bz2

2. apply gdb patch for ARM
 
  # cp [PATCH_PATH]/gdb-6.3-tango-20050204.patch /usr/src/debug/gdb-6.3
  # patch -p1 < gdb-6.3-tango-20050204.patch

  replace [PATCH_PATH] to your patch path.
  use patch-gdb-5.2.1-arm7tdmi-20020920 in the reference document is another choice, it's more complexity which need modify some code before compile.

3. build gdb

  # mkdir /usr/src/debug/build_gdb
  # cd /usr/src/debug/build_gdb
  # ../gdb-6.3/configure --target=arm-linux --host=i386-pc-linux --prefix=/opt/gdebug
  # make
  # make install

4. build gdbserver

  # mkdir /usr/src/debug/build_gdbserver
  # cd /usr/src/debug/build_gdbserver
  # export PATH=[TOOLCHAIN_PATH]:$PATH
  # CC=arm-elf-gcc LDFLAGS='-Wl,-elf2flt' ../gdb-6.3/gdb/gdbserver/configure --target=arm-elf-linux --host=arm-elf-linux --prefix=/opt/gdebug/arm-linux
  # make
  # make install

  set [TOOLCHAIN_PATH] to your toolchain patch.
  after build, deploy the gdbserver binary to your target filesystem.

5.use gdb and gdbserve(command line or eclipse):

  examples:

  host pc ip:192.168.1.45
  board   ip:192.168.1.180  
  copy program and gdbserver to host/tftpboot/

  and then in Target borad:

  # mount 192.168.1.108:/tftpboot /mnt/nfs
  # cd /mnt/nfs
  # ./gdbserver 192.168.1.45:1234 gdbtest

  In host pc:
  # cd /usr/local/arm-gdb/bin/
  # copy gdbtest /usr/local/arm-gdb/bin/ 

  # ./arm-linux-gdb gdbtest
  (gdb)target remote 192.168.1.180:1234           
  (gdb)list   or l
  (gdb)break func
  (gdb)break 22
  (gdb)info br  
  (gdb)continue   or c  

  (gdb)next   or n
  (gdb)print or p    result
  (gdb) finish      

  (gdb) next
  (gdb) quit


Appendix:

1). reference: http://www.uclinux.org/pub/uClinux/archive/10734.html

2). gdb-6.3-tango-20050204.patch:

/* start of gdb-6.3-tango-20050204.patch */

diff -Nur gdb-6.3/gdb/arm-tdep.c gdb-6.3.patched/gdb/arm-tdep.c
--- gdb-6.3/gdb/arm-tdep.c 2004-08-02 19:02:20.000000000 -0700
+++ gdb-6.3.patched/gdb/arm-tdep.c 2005-02-04 10:14:11.000000000 -0800
@@ -1925,10 +1925,12 @@
 /* NOTE rearnsha 2002-02-18: for now we allow a non-multi-arch gdb to
    override these definitions.  */
 #ifndef ARM_LE_BREAKPOINT
-#define ARM_LE_BREAKPOINT {0xFE,0xDE,0xFF,0xE7}
+//#define ARM_LE_BREAKPOINT {0xFE,0xDE,0xFF,0xE7}
+#define ARM_LE_BREAKPOINT {0x01,0x00,0x9f,0xEF}
 #endif
 #ifndef ARM_BE_BREAKPOINT
-#define ARM_BE_BREAKPOINT {0xE7,0xFF,0xDE,0xFE}
+//#define ARM_BE_BREAKPOINT {0xE7,0xFF,0xDE,0xFE}
+#define ARM_BE_BREAKPOINT {0xEF,0x9f,0x00,0x01}
 #endif
 #ifndef THUMB_LE_BREAKPOINT
 #define THUMB_LE_BREAKPOINT {0xfe,0xdf}
diff -Nur gdb-6.3/gdb/config/arm/tm-embed.h gdb-6.3.patched/gdb/config/arm/tm-embed.h
--- gdb-6.3/gdb/config/arm/tm-embed.h 2004-04-30 13:52:16.000000000 -0700
+++ gdb-6.3.patched/gdb/config/arm/tm-embed.h 2005-02-04 10:14:11.000000000 -0800
@@ -27,7 +27,7 @@
 
 /* The remote stub should be able to single-step. */
 #undef SOFTWARE_SINGLE_STEP_P
-#define SOFTWARE_SINGLE_STEP_P() 0
+#define SOFTWARE_SINGLE_STEP_P() 1
 
 /* The first 0x20 bytes are the trap vectors.  */
 #undef LOWEST_PC
diff -Nur gdb-6.3/gdb/gdbserver/linux-arm-low.c gdb-6.3.patched/gdb/gdbserver/linux-arm-low.c
--- gdb-6.3/gdb/gdbserver/linux-arm-low.c 2004-02-29 08:43:49.000000000 -0800
+++ gdb-6.3.patched/gdb/gdbserver/linux-arm-low.c 2005-02-04 10:14:11.000000000 -0800
@@ -23,7 +23,7 @@
 #include "linux-low.h"
 
 #ifdef HAVE_SYS_REG_H
-#include <sys/reg.h>
+//#include <sys/reg.h>
 #endif
 
 #define arm_num_regs 26
diff -Nur gdb-6.3/gdb/gdbserver/linux-low.c gdb-6.3.patched/gdb/gdbserver/linux-low.c
--- gdb-6.3/gdb/gdbserver/linux-low.c 2004-10-16 10:42:00.000000000 -0700
+++ gdb-6.3.patched/gdb/gdbserver/linux-low.c 2005-02-04 10:14:11.000000000 -0800
@@ -78,6 +78,24 @@
 /* FIXME: Delete eventually.  */
 #define inferior_pid (pid_of (get_thread_process (current_inferior)))
 
+void send_area(char* buf) {
+
+  unsigned int x;
+  unsigned int code_start = ptrace (PTRACE_PEEKUSER, inferior_pid,
+                                    (PTRACE_ARG3_TYPE) 49*4, 0);
+  unsigned int data_start = ptrace (PTRACE_PEEKUSER, inferior_pid,
+                                    (PTRACE_ARG3_TYPE) 50*4, 0);
+  unsigned int bss_start = data_start;
+  unsigned int code_end = ptrace(PTRACE_PEEKUSER, inferior_pid,
+                                 (PTRACE_ARG3_TYPE) 51*4, 0);
+
+  printf("code at %p - %p, data at %p/n", code_start, code_end, data_start);
+
+  x = data_start - (code_end - code_start);
+  sprintf(buf,"Text=%x;Data=%x;Bss=%x;", code_start, x, x);
+};
+
+
 /* This function should only be called if the process got a SIGTRAP.
    The SIGTRAP could mean several things.
 
@@ -139,7 +157,7 @@
   void *new_process;
   int pid;
 
-  pid = fork ();
+  pid = vfork ();
   if (pid < 0)
     perror_with_name ("fork");
 
diff -Nur gdb-6.3/gdb/gdbserver/server.c gdb-6.3.patched/gdb/gdbserver/server.c
--- gdb-6.3/gdb/gdbserver/server.c 2004-03-04 19:44:27.000000000 -0800
+++ gdb-6.3.patched/gdb/gdbserver/server.c 2005-02-04 10:14:11.000000000 -0800
@@ -89,6 +89,12 @@
 handle_query (char *own_buf)
 {
   static struct inferior_list_entry *thread_ptr;
+ 
+  if (strcmp ("qOffsets", own_buf) == 0)
+    {
+        send_area(own_buf);
+        return;
+    }
 
   if (strcmp ("qSymbol::", own_buf) == 0)
     {

/* end of gdb-6.3-tango-20050204.patch */

电脑技巧:Hyper-V安装UOS操作系统图文教程 今天给大家分享微软官方Hyper-v虚拟机管理软件安装UOS操作系统图文教程,感兴趣的朋友也可以下载试一试,当然有啥问题也可以互相沟通交流! 阅读详情

相关推荐

spark3.x 写入hudi报错

【代码】spark3.x 写入hudi报错。

W2484980893的博客 1578

交叉编译构建GDB和GDBServer

交叉编译构建GDB和GDBServer

时有限 607

离合器KP点自学习:从原理到工程实践的全景解析

本文全面解析了离合器KP点自学习的原理与工程实践,详细介绍了KP点的物理本质、控制价值及自学习方法。通过扭矩增量式和转速变化式学习法,结合不同变速箱构型的适配策略,提升离合器控制的精度与效率。文章还探讨了液压系统迟滞补偿和摩擦材料老化应对方案,为工程实践提供可靠保障。

weixin_33717117的博客 287

交叉编译嵌入式linux平台的gdb工具

pc机系统:ubuntu系统目标板的编译工具链:arm-openwrt-linux-gcc嵌入式Linux目标板:R328。

1678

线性回归做糖尿病分析(diabetes数据集),并分析单个特征值与病情的关系

1.diabetes数据集 共442个样本,每个样本有十个特征,分别是 [‘age’, ‘sex’, ‘bmi’, ‘bp’, ‘s1’, ‘s2’, ‘s3’, ‘s4’, ‘s5’, ‘s6’],对应年龄、性别、体质指数、平均血压、S1~S6一年后疾病级数指标。 Targets为一年后患疾病的定量指标,值在25到346之间。 ...

t18438605018的博客 1万+

吃透工业通信:C#工控机实现Modbus、OPC UA、Profinet、EtherCAT协议全适配

本文介绍了基于C#的工业通信协议全适配方案,采用分层架构设计实现Modbus、OPC UA、Profinet和EtherCAT四种主流协议的统一管理。核心包括:1)三层架构(应用层、抽象层、协议层)降低耦合;2)定义统一通信接口IIndustrialCommunication;3)工厂模式创建不同协议实例;4)以Modbus TCP为例展示具体实现。该方案经过实际项目验证,可简化多协议设备管理,提升工业自动化系统的开发效率。

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 725

嵌入式-GDB

记录GDB的使用。

小猪观察员的博客 270

2026 蓝牙技术趋势展望:信道探测、Auracast、高吞吐 HID 与 AI 融合引领行业变革

蓝牙技术2026年展望:信道探测、Auracast广播音频和AI融合将引领创新。蓝牙信道探测技术将实现亚米级精确定位,在工业资产追踪和汽车数字钥匙领域大显身手。Auracast广播音频将持续拓展公共场所应用,提升音频包容性体验。高数据吞吐量和超低延迟功能将支持AR/VR等新兴场景。AI与蓝牙的深度融合将推动可穿戴设备智能化发展,实现实时健康监测和个性化音频服务。蓝牙技术凭借其多功能性和创新力,正成为连接万物的关键技术,持续推动行业变革和生活品质提升。

专业开发者的博客,一个从事Android WiFi和蓝牙的工程师 113

gdb & gdbserver 在arm上移植,及调试配置

1. 下载gdb http://ftp.gnu.org/gnu/gdb/ http://ftp.gnu.org/gnu/gdb/gdb-8.2.tar.xz 解压到: tar -Jxvf gdb-8.2.tar.xz /home/semilog/working/gdb/gdb-8.2/ 2. 编译 (1) 先编译在 pc 上运行的 gdb (arm-linux-gnueabihf-gdb) ...

boyemachao的专栏 2102

SpringBoot中使用FastJson解析Json数据

场景 1.SpringBoot默认配置的是Jackson。 2.项目搭建专栏: https://blog.youkuaiyun.com/BADAO_LIUMANG_QIZHI/column/info/35688 实现 引入fastJson的依赖 <!-- fastjson的依赖 --> <dependency> <groupId>com.alibab...

BADAO_LIUMANG_QIZHI的博客 4140

nvidia系列教程-AGX-Orin linux源码下载编译

NVIDIA AGX Orin 是一款高性能的嵌入式计算平台,广泛应用于人工智能、自动驾驶、机器人等领域。为 AGX Orin 编译定制的 Linux 内核,可以更好地适应特定应用需求,增强系统的灵活性。本文将详细介绍如何下载、配置和编译适用于 AGX Orin 的 Linux 内核源码。本文介绍了如何为 NVIDIA AGX Orin 平台下载、配置和编译定制的 Linux 内核源码。通过编译和部署定制内核,您可以更好地控制系统的行为,并根据特定应用需求进行优化。

flypig has a dream! 1283

gdb linux arm low.c,Cross compile gdbserver and use it in ARM linux (在ARM uClinux下编译和使用gdbserver)...

1. get and unzip src# mkdir /usr/src/debug# cd /usr/src/debug# wget ftp://ftp.gnu.org/pub/gnu/gdb/gdb-6.3.tar.bz2# tar -jxvf gdb-6.3.tar.bz22. apply gdb patchfor ARM# cp [PATCH_PATH]/gdb-6.3-tango-20...

weixin_28925169的博客 142

IEC 61400-1:2019 中的 Vref ——从分类基准到极端风模型的应用

IEC 61400-1:2019 中的 Vref ——从分类基准到极端风模型的应用

weixin_46713695的博客 1288

gdb linux arm low.c,cross compile gdbserver详解

1. 下载gdb源码,7.12版本,下载地址:ftp://ftp.gnu.org/gnu/gdb。2. 编译gdb:0> cd gdb-7.121> mkdir __install2> ./configure --target=arm-linux --enable-shared --prefix=\$(pwd)/__install --without-x --disable-gd...

weixin_29251567的博客 312

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

cross compile gdbserver

1. 下载gdb源码,7.12版本,下载地址:ftp://ftp.gnu.org/gnu/gdb。2. 编译gdb:0> cd gdb-7.121> mkdir __install2> ./configure --target=arm-linux --enable-shared --prefix=\$(pwd)/__install --without-x --disable-gd...

weixin_30376453的博客 178

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

交叉编译GDB工具, 使GDB运行在嵌入式板子上

交叉编译GDB工具, 使GDB运行在嵌入式板子上 1:下载gdb-7.3a.tar.gz (本示例使用gdb-7.3.a)          地址http://ftp.gnu.org/gnu/gdb/ 2: 解压上文件          tar –zxvf gdb-7.3a.tar.gz 3: 开始配置编译   (1):进入目录, 上述解压生成默认的目录是gdb-7.3    (2)...

天下对手教会少林武僧 1801

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

交叉编译gdb调试

编译环境:Ubuntu16.04 64位 交叉编译工具:arm-hisiv500-linux-gcc 在开发过程中总会遇到段错误之类的问题,交叉编译gdb方便在开发板上调试,这里记录一下编译流程。 1. 交叉编译gdb 下载合适版本的gdb源码包,我这里使用的是gdb-7.8.tar.gz,点击下载地址。 交叉编译gdb过程中发现这个版本需要termcap的支持,这里先表之,下载termcap-1...

LiaoJunXiong的博客 3511

交叉编译(cross compile)的一些介绍

1、交叉编译的含义 在学习嵌入式开发中,必然会遇到:交叉编译(cross compile),那么交叉编译是什么呢?即:在一种平台上进行程序的编译,而这个编译出来的程序放到另一个平台上运行。因此,编译的环境运行的环境是不一样的,交叉的,即所谓的cross。比如,我有一个ARM9的开发板,在进行开发时,需要在我的x86的PC上使用交叉编译器来编译我写好的程序代码,而编译所程序是放到ARM的CPU上运

C_Aya的博客 9411

gdb时发出SIGTRAP信号的处理

在大多数系统,gdb对使用fork创建的进程没有进行特别的支持。当父进程使用fork创建子进程,gdb仍然只会调试父进程,而子进程没有得到控制和调试。这个时候,如果你在子进程执行到的代码中设置了断点,那么当子进程执行到这个断点的时候,会产生一个SIGTRAP的信号,如果没有对此信号进行捕捉处理,就会按默认的处理方式处理——终止进程。 当然,你可以使用时间延迟的方法,在子进程fork出来之后

Rynax 2万+

gdb交叉编译方法及注意项

gdb 交叉编译方法: 主机环境: 1.ubuntu14.04 2交叉编译工具:arm-oe-linux-gnueabi 3.gdb版本:gdb-8.0.1 地址:http://www.gnu.org/software/gdb/download/ubuntu安装工具: sudo apt-get install texinfogdb源码修改:vim ./gdb/common/gdb_ass

vertor11的博客 6850

用Eclipse和GDB构建ARM交叉编译和在线调试环境

我们在 Linux 主机中搭建我们的开发环境,使用 Ubuntu 10.04 LTS 为例。 搭建应用开发环境 安装 JRE Eclipse 依赖于Java 环境,所以必须先安装 JRE 或 JDK。 安装 Eclipse 和 CDT 去 Eclipse官网下载最新的Eclipse IDE。 我们一般选择 C/C++ 版本(Eclip

bugouyonggan的专栏 2万+

uClinux 修改系统时区

uClinux系统时区设置文件是/etc/TZ,更改此文件可设定想要的系统时区,比如中国东八区应该设成CST-8。 附录:1. TZ时区格式TZ所使用的时区格式XXX-n里面,XXX是date出来的时区名称,而-n是指超前n小时,所以CST-8就是“时区名称叫CST,而时间比UTC标准时间早8个小时”,也就是中国所在的东八区。MDT+6则是新墨西哥时间,比UTC时间晚6个小时。

Monsoon的专栏 4601
上一篇: Installation instructions for gdb & gdbserver on ARM7TDMI
下一篇: uClinux2.6入门(转贴)
gstreamer
博客等级 码龄20年 4粉丝 3原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值