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 */

真正的工业级环形缓冲区(Circular Buffer)完整实现细节 永远不要永远不要ToArray()或AddRange()永远返回或两段Span永远用_head_tail% Capacity实现环形照着上面这套代码改,你的系统将彻底告别内存爆炸,从“实验室玩具”变成“产线战神”!需要我给你一个支持两段绘制的完整实现吗? 阅读详情

相关推荐

手把手教你用Matlab搞定GRACE RL06数据读取:冯伟老师工具箱无GUI版实战

本文详细介绍了如何使用Matlab处理GRACE RL06数据,重点解析了冯伟教授工具箱的无GUI版实战操作。通过环境配置、核心函数改造和批处理技巧,帮助科研工作者高效完成重力场数据的读取与分析,特别适合服务器集群环境下的批量处理需求。

weixin_29313817的博客 200

交叉编译构建GDB和GDBServer

交叉编译构建GDB和GDBServer

时有限 607

浙政钉(专有钉钉)门户免登(超详细)

钉钉家族 介绍浙政钉门户免登之前,首先搞清楚几个软件的关系,软件分别是:钉钉,专有钉钉,浙政钉 钉钉 是阿里巴巴集团专为中小企业打造的沟通和协同的多端平台。 专有钉钉 原名 政务钉钉,有更开放的设计能力、集成能力、更结构化协同产品、更定制化开发平台。支持专有化部署,数据落本地,更安全、客户可对该产品持牌运营、结构化编排,协助构建本地应用中心、提供移动应用全面安全保障体系。 浙政钉 为规范浙政钉整体架构体系,按照统分结合原则,由省政府办公厅统一设计整体工作界面和系统框架,统筹指导全省统建应用建设,各单

一缕南风的博客 2万+

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

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

1678

瑞芯微Android固件修改实战:从解包到root提权完整流程(附工具包)

本文详细解析了瑞芯微Android固件深度定制全流程,涵盖从固件包解包、系统镜像修改到植入root提权与分区调整的实战步骤。通过工具链操作与原理剖析,指导开发者安全实现系统精简、权限获取及存储扩容,最终完成固件重新打包与刷机验证,适用于追求设备完全控制权的技术爱好者。

ujm56789012的博客 699

别再为STM32F407的USB高速通信发愁了!手把手教你用USB3320(ULPI接口)搞定硬件设计

本文详细介绍了STM32F407通过USB3320(ULPI接口)实现高速USB通信的硬件设计实战。从USB3320的选型优势到原理图设计避坑,再到PCB布局和固件配置,提供了一套完整的解决方案。特别针对USB PHY芯片的常见问题,如供电处理、信号完整性和初始化代码,给出了专业建议和调试技巧,帮助工程师高效完成高速USB通信设计。

weixin_42527401的博客 388

嵌入式-GDB

记录GDB的使用。

小猪观察员的博客 270

一文讲透 SAP SD:把报价、订单、交付、开票串成一条可落地的业务闭环

摘要:SAP SD(销售与分销)模块是企业O2C(订单到收款)流程的核心,管理从客户意向到回款的完整链路。该模块围绕销售订单、交付、开票等关键环节,与财务、物料管理等模块深度集成。SD的核心在于主数据管理、单据驱动流程、定价规则引擎和信用风控,通过条件技术实现复杂定价策略,并支持多维度分析。典型应用场景包括多渠道销售企业的价格体系管理、信用控制和物流协同,有效解决销售与交付脱节、财务对账困难等业务痛点。(149字)

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 515

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

使用SIMD思想进行memcpy的优化

arm64平台的memcpy的性能优化,相比C库提升30~40%,SIMD优化思路

zhaoxin1989的博客 1万+

巨正则蒙特卡洛—甲烷和二氧化碳的竞争吸附GCMC

巨正则蒙特卡洛—甲烷和二氧化碳的竞争吸附GCMC

Rockyoung 8021

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

瑞芯微RK3588/RK3576平台采集BT1120(fpga)驱动调试记录

本文介绍了在RK3576/RK3588平台上采集FPGA传输的BT1120数据的方法。主要内容包括:1)硬件连接需确认管脚复用和图像格式(通常为uyvy_2x8);2)设备树配置要点,如I2C总线设置、BT1120模式指定等;3)驱动适配注意事项,包括时钟极性、分辨率格式等关键参数;4)测试方法,通过media-ctl和v4l2-ctl工具验证数据采集。文中特别指出RK3576和RK3588配置的通用性,并提供了常见问题的排查思路。

bingdund的博客 916

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

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

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

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

交叉编译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

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

交叉编译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、付费专栏及课程。

余额充值