交叉编译适配mips架构的GDB

2023-11-17

交叉编译GDB

1.下载GDB源码

在GDB官网寻找:http://www.gnu.org/software/gdb/download/

版本结合你安装在开发板上的gdbserver来定,我的板子上有openwrt系统,可以直接安装gdbserver,gdbserver –version可以查看其版本,我这里是7.8的。

2.解压并创建安装目录

tar zxvf gdb-7.8.tar.gz

cd gdb-7.8/

mkdir gdb7.8_mipsel

我的板子是mips架构的。

3.编译安装

GDB源码编译安装也属于configure系列的,所以结合之前编译PHP源码、swoole源码的经验,加上最近学习了一部分shell脚本,我们可以将编译安装命令写成一个简单的shell脚本(python也可以,顺便熟悉一下python,~_~),编译安装成功后在gdb7.8_mipsel目录如下所示:

这里写图片描述

以下是编译安装脚本,以供参考:

    #!/bin/bash

    # Copyright (C) 2018-2019 ZY

    mkdir gdb7.8_mipsel

    echo "begin to configure..."

    CC=mipsel-openwrt-linux-uclibc-gcc AR=mipsel-openwrt-linux-uclibc-ar LD=mipsel-openwrt-linux-uclibc-ld RANLIB=mipsel-openwrt-linux-uclibc-ranlib STRIP=mipsel-openwrt-linux-uclibc-strip ./configure --host=mipsel-openwrt-linux-uclibc --prefix=/home/ubuntu/gdb-7.8/gdb7.8_mipsel/

    if [ -e "Makefile" ]; then

        echo "=============================="

        echo "configure ok,begin to make..."

        echo "=============================="

        sleep 1

        make

    else

        echo "=============================="

        echo "configure failed"

        echo "=============================="

        sleep 1

    fi

    if [ -e "./gdb/gdb" ]; then

        echo "=============================="

        echo "make ok,begin to make install..."

        echo "=============================="

        sleep 1

        make install

    else

        echo "=============================="

        echo "make install failed"

        echo "=============================="

        sleep 1

    fi

4.可能遇到的错误解决方法

make编译时遇到:

configure: error: no termcap library found

很明显,缺少termcap库,结合之前交叉编译其它源码的经验,没有该库则交叉编译该库,然后将相应的头文件和库文件拷贝到交叉编译工具链相关的目录下即可。

(1).下载termcap

http://ftp.gnu.org/gnu/termcap/?C=D;O=A

我将其放在gdb的同级目录下,然后:

tar zxvf termcap-1.3.tar.gz

cd termcap-1.3/

(2).将上面的编译安装gdb的脚本改一下

    !/bin/bash

    # Copyright (C) 2018-2019 ZY

    mkdir termcap_mipsel

    echo "begin to configure..."

    CC=mipsel-openwrt-linux-uclibc-gcc AR=mipsel-openwrt-linux-uclibc-ar LD=mipsel-openwrt-linux-uclibc-ld RANLIB=mipsel-openwrt-linux-uclibc-ranlib STRIP=mipsel-openwrt-linux-uclibc-strip ./configure --host=mipsel-openwrt-linux-uclibc --prefix=/home/ubuntu/termcap-1.3/termcap_mipsel/

    if [ -e "Makefile" ]; then

        echo "=============================="

        echo "configure ok,begin to make..."

        echo "=============================="

        sleep 1

        make

    else

        echo "=============================="

        echo "configure failed"

        echo "=============================="

        sleep 1

    fi

    if [ -e "termcap.o" ]; then

        echo "=============================="

        echo "make ok,begin to make install..."

        echo "=============================="

        sleep 1

        make install

    else

        echo "=============================="

        echo "make install failed"

        echo "=============================="

        sleep 1

    fi

(3).对于最后的权限不够无法删除PC机上termcap.h文件时

不需理会,我们不需要将termcap安装到我们的PC机上:

这里写图片描述

然后在网上查到这样一个命令:

mipsel-openwrt-linux-gcc -print-file-name=libc.a找到我们要将头文件和库文件拷贝的位置,比如我这里:

这里写图片描述

然后将相关的头文件和库文件拷贝到对应的位置即可使gdb源码make成功,比如我这里:

cp libtermcap.a /opt/OpenWrt-Toolchain-ramips-mt7628_gcc-4.8-linaro_uClibc-0.9.33.2.Linux-i686/toolchain-mipsel_24kec+dsp_gcc-4.8-linaro_uClibc-0.9.33.2/lib/gcc/mipsel-openwrt-linux-uclibc/4.8.3/

cp termcap.h /opt/OpenWrt-Toolchain-ramips-mt7628_gcc-4.8-linaro_uClibc-0.9.33.2.Linux-i686/toolchain-mipsel_24kec+dsp_gcc-4.8-linaro_uClibc-0.9.33.2/include/

当然,这些命令都可以结合脚本放在脚本文件中执行,我这里就不再展示了。

5. 可能需要交叉编译GDBSERVER,将其安装在开发板上

我的开发板上有openwrt系统,可以直接:

opkg update

opkg install gdbserver

有的板子可能无法直接安装,或者不喜欢、不能用这个版本的gdbserver的,编译gdb源码移植gdbserver即可,如果编译出来的gdbserver太大则需要精简,关于如何精简,这里不再多说,我们本次总结的重点不在这里。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

交叉编译适配mips架构的GDB 的相关文章

  • 【开发工具】【Dropbear】Dropbear编译安装

    简介 dropbear 小型的嵌入式系统专用的SSH服务端和客户端工具 服务器端 dropbear dropbearkey 客户端 dbclient dropbear默认使用nsswitch实现名称解析 账户名称 dropbear会在用户登
  • FTP UPLOAD

    First you should add the following directives Listing 1 Directives using System Net using System IO The following steps
  • Docker客户端连接Docker Daemon的方式

    Docker为C S架构 服务端为docker daemon 客户端为docker service 支持本地unix socket域套接字通信与远程socket通信 默认为本地unix socket通信 要支持远程客户端访问需要做如下设置
  • 导入MDF文件到数据库

    1 导入脚本 EXEC sp attach db dbname yhzm filename1 d jspyhzm mdf filename2 d jspyhzm log ldf 2 Microsoft SQL Server删除数据库提示出错
  • Codeup(云效)手把手教部署SpringCloud项目到私有主机

    博主介绍 小黄鸭技术 擅长领域 Java 实用工具 运维 系列专栏 开发工具 Java之路 八股文之路 如果文章写作时有错误的地方 请各位大佬指正 一起进步 欢迎大家点赞 收藏 评论 支持博主 开通云效 上传代码仓库 配置SSH公钥或者是H
  • 英语学习对程序员得重要性!

    程序世界的主导语言是英文 编写程序时使用的开发文档和开发工具的帮助文件离不开英文 了解业界的最新动向 阅读技术文章离不开英文 同世界各地编程高手往往也离不开英文 提高英文水平 能大大促进一个程序员的发展 让你有更多的资源 在此 个人总结了几
  • 【JEECG技术博文】简单实例讲解JEECG ONLINE表单权限控制(jeecg3.6)

    简单实例讲解JEECGONLINE表单权限控制 jeecg3 6 原文 http blog itpub net 30066956 viewspace 1872409 相关博文 http blog itpub net 30066956 vie
  • Spring-AOP实践 - 统计访问时间

    公司的项目有的页面超级慢 20s以上 不知道用户会不会疯掉 于是老大说这个页面要性能优化 于是 首先就要搞清楚究竟是哪一步耗时太多 我采用spring aop来统计各个阶段的用时 其中计时器工具为StopWatch 文章结构 遇到的问题 创
  • 设计模式三: 代理模式(Proxy) -- JDK的实现方式

    简介 代理模式属于行为型模式的一种 控制对其他对象的访问 起到中介作用 代理模式核心角色 真实角色 代理角色 按实现方式不同分为静态代理和动态代理两种 意图 控制对其它对象的访问 类图 实现 JDK自带了Proxy的实现 下面我们先使用JD
  • Postman使用技巧-环境变量使用

    目录 一 下载安装Postman 二 添加环境与环境变量 三 环境变量使用方法 1 路径中使用变量 2 body中使用变量 3 调用接口前设置变量 4 调用接口后设置变量 一 下载安装Postman 下载安装过程不做赘述 本文章以9 3 1
  • 蚂蚁笔记私有部署

    说明 其实官方的教程中已经写得很清楚了 我写这个主要是为了记录一下我自己当时安装的过程 方便后续查询 官方文档请查阅 https github com leanote leanote wiki 环境要求 CentOS6 5 Nginx Mo
  • python中,获取字符串的长度

    说明 与其他的语言一样 有时候需要查看或者说计算字符串的长度 在此记录下python中通过哪个函数实现 操作过程 1 通过len 函数返回字符串的长度 gt gt gt text python gt gt gt len text 6 gt
  • 使用Idea更新数据库表的数据

    tags IDEA 我们在做案例的时候 经常需要改变数据表中的数据来进行简单测试 那我们在Idea下是如何修改数据表的数据的呢 我们可以看下面的图片 只要选择updata就行了 后面再按自动提交的标志 如果您觉得这篇文章帮助到了您 可以给作
  • visual studio2019(C#/.NET)安装教程

    前言 好久没有跟新版本了 博主还用的2017 看到最新的2019功能还是很强大的 版本可能越高越好 所以博主写了一个详细的博客 希望可以帮助到大家 一 visual studio 2019 下载 1 下载地址 visual studio官方
  • Sublime Text 常用快捷键

    文章目录 通用 General 编辑 Editing 选择 Selecting 查找 替换 Finding Replacing 跳转 Jumping 窗口 Window 屏幕 Screen 工欲善其事 必先利其器 本文收集 Sublime
  • Pipenv:作为 Python 开发人员为什么应该使用它

    Pipenv 是一个旨在将所有打包世界中最好的东西带到 Python 世界的工具 它将 Pipfile pip 和 virtualenv 整合到一个命令中 它会自动为您的项目创建和管理虚拟环境 并在您安装 卸载包时从您的 Pipfile 添
  • Firefox新标签页不停刷新

    解决办法 在地址栏输入 about support 翻新Firefox
  • CISSP一次通过指南(文末附福利)

    2017年12月19日 在上海黄浦区汉口路亚洲大厦17层通过了CISSP认证考试 拖拉了一年 终于成绩还算令人满意 为攒人品将自己一年多的复习心得和大家分享 希望能够帮到需要考证的朋友 本文作者 i春秋签约作家 tinyfisher 欢迎与
  • 【神器】wakatime代码时间追踪工具

    文章目录 wakatime简介 支持的IDE 安装步骤 API文档 插件费用 写在最后 wakatime简介 wakatime就是一个IDE插件 一个代码时间追踪工具 可自动获取码编码时长和度量指标 以产
  • 「Java开发指南」MyEclipse如何支持Spring Scaffolding?(一)

    MyEclipse v2023 1 2离线版下载 1 使用Spring的Scaffolding应用程序 支持Spring的 MyEclipse 目标之一是帮助开发人员从零开始编写更少的代码 并更广泛地使用代码生成 MyEclipse提供了丰

随机推荐

  • CNN进行非接触掌纹识别的改进过程

    1 模型和参数不变 模型 2个卷积层 1个全连接层 参数 BATCH SIZE 32 定义超参数 每次处理32张图片 EPOCHS 20 将数据集训练20轮 LR 0 01 学习率 TRAIN DIVISION 3 训练集划分占比 opti
  • 小程序上线流程

    1 配置服务器域名 小程序接口API 2 业务域名配置 首先配置小程序的业务域名 将下载txt文件放在A 域名根目录下 然后才可以配置业务域名为 A 主要应用场景为 小程序页面跳转其他小程序 3 npm run build weapp 编译
  • 【数据库复习】第二章关系数据库

    目录 一 关系数据结构及形式化定义 1 1关系 1 2关系模式 1 3关系数据库 1 4关系模型的存储结构 二 关系操作 三 关系的完整性 四 关系代数 4 1传统的集合运算 4 2专门的关系运算 4 2 1选择 selection 4 2
  • const int & a = 1;

    int a 1 报错 引用需要一个合法的内存空间 const int a 1 正确 类似于int temp 1 const int a temp
  • String时间类型转换为ZonedDateTime时间类型

    搞了一个早上 不知道怎么弄这个东西 最后发现没有必要将ZonedDateTime写的很全 可以精简的封装 public static ZonedDateTime changeShanghaiToUTC String beijingDateT
  • 【MIUI9】小米平板1MIPAD1欧版ROM历史ROM下载地址-另附挥泪典藏版V9系统

    费劲整理来的 上边是 小米平板1 MIPAD1的 ROM 下边是MI3W小米3联通版的ROM 欧版xiaomi eu系统的好处就是省电 miui MIPAD V9 2 4 0 KXFCNEK 97354839c6 4 4 zip 这个是小米
  • com.mongodb.MongoSocketReadTimeoutException: Timeout while receiving message

    报错 com mongodb MongoSocketReadTimeoutException Timeout while receiving message at com mongodb connection InternalStreamC
  • C++ list容器详解

    C list容器 list容器的基本概念 1 list的构造函数 2 list的赋值和交换 3 list的大小操作 4 list的插入和删除 5 list的数据存取 6 list的反转与排序 7 list的排序案例 list容器的基本概念
  • Vue 源码解读(12)—— patch

    当学习成为了习惯 知识也就变成了常识 感谢各位的 关注 点赞 收藏和评论 新视频和文章会第一时间在微信公众号发送 欢迎关注 李永宁lyn 文章已收录到 github 仓库 liyongning blog 欢迎 Watch 和 Star 前言
  • linux系统提示只读文件系统,无法创建文件

    可能磁盘写保护 第一步 df h 确定文件夹对应的磁盘 第二步 mount ro为只读 rw为可读可写 可以用mount命令看看ro的分区 如果发现有ro 就重新mount 如 umount dev sda1 mount dev sda1
  • 备战2022,Android中高级面试必知必会

    在过去不久的金九银十 有些小伙伴已经找到了理想的工作 当然也有很多小伙伴因为准备不充分 面试挂了 临近年关 最近有很多网友都在求大厂面试题 正好我在9月份和10月份整理和收集了 Android 中高级面试真题解析 于是就发上来分享给大家 这
  • 如何使用matlab读取excel中的表格数据

    如何使用matlab读取excel中的表格数据 设备系统 win10 操作软件 matlab2020b 1 首先打开matlab软件 点击 新建 脚本 2 在脚本中输入代码 A xlsread C Users Administrator D
  • [附源码]java毕业设计订单管理系统

    项目运行 环境配置 Jdk1 8 Tomcat7 0 Mysql HBuilderX Webstorm也行 Eclispe IntelliJ IDEA Eclispe MyEclispe Sts都支持 项目技术 SSM mybatis Ma
  • 【操作系统】虚拟内存的最大容量和实际容量的区别(以一道例题开头)

    实际内存为什么是2GB 512MB 因为实际容量是取CPU寻址 2 32B 与内存与外存之和 2GB 512MB 的最小值 就是相当于 数学里面两个值取最小值一样
  • gdbserver配置、远程调试以及ssh配置

    引言 GDB调试主要有两种方法 1 直接在目标板上通过gdb调试程序 2 在目标板上通过gdbserver运行程序 在宿主机上通过gdb调试程序 本篇文章主要来说明一下gdbserver远程调试的方法 主要以VScode举例说明 步骤 一
  • idea下载Scala插件(详细)

    目录 1 idea下载Scala 2 点击 Restart IDE 重启IDEA即可 3 创建scala目录 4 Mark scala目录为 source root 5 在windows的电脑安装scala jdk并且配置 环境变量 6 在
  • labelImg支持中文标注的文件

    链接 https pan baidu com s 1XCuLTlKRN7gVxJdQkcKnUw 密码 iaws
  • 读者-写者问题 (操作系统-进程)

    读者 写者问题 读进程优先算法 写者优先算法 问题描述 有读者和写者两组并发进程 共享一个文件 当两个或两个以上的读进程同时访问共享数据时不会产生副作用 但若某个写进程和其他进程 读进程或写进程 同时访问共享数据时则可能导致数据不一致的错误
  • 用vue3+elementplus做的一个滚动菜单栏的组件

    目录 起因 概览 设计及解决思路 1 滚动条竖起来 2 绑定菜单 3 吸附 优化 组件全部代码 起因 在elementplus中看到了滚动条绑定了slider 但是这个感觉很不实用 在底部 而且横向滚动 最常见的应该是那种固定在左上角的带着
  • 交叉编译适配mips架构的GDB

    交叉编译GDB 交叉编译GDB 1 下载GDB源码 2 解压并创建安装目录 3 编译安装 4 可能遇到的错误解决方法 1 下载termcap 2 将上面的编译安装gdb的脚本改一下 3 对于最后的权限不够无法删除PC机上termcap h文