热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

交叉编译适配mips架构的GDB

交叉编译GDB交叉编译GDB1.下载GDB源码2.解压并创建安装目录3.编译安装4.可能遇到的错误解决方法(1).下载termcap(2).将上面的编译安装gdb的脚本改一下(3)

交叉编译GDB


    • 交叉编译GDB
      • 1.下载GDB源码
      • 2.解压并创建安装目录
      • 3.编译安装
      • 4.可能遇到的错误解决方法
        • (1).下载termcap
        • (2).将上面的编译安装gdb的脚本改一下
        • (3).对于最后的权限不够无法删除PC机上termcap.h文件时
      • 5. 可能需要交叉编译GDBSERVER,将其安装在开发板上


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 ZYmkdir gdb7.8_mipselecho "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" ]; thenecho "=============================="echo "configure ok,begin to make..."echo "=============================="sleep 1makeelseecho "=============================="echo "configure failed"echo "=============================="sleep 1fiif [ -e "./gdb/gdb" ]; thenecho "=============================="echo "make ok,begin to make install..."echo "=============================="sleep 1make installelseecho "=============================="echo "make install failed"echo "=============================="sleep 1fi

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 ZYmkdir termcap_mipselecho "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" ]; thenecho "=============================="echo "configure ok,begin to make..."echo "=============================="sleep 1makeelseecho "=============================="echo "configure failed"echo "=============================="sleep 1fiif [ -e "termcap.o" ]; thenecho "=============================="echo "make ok,begin to make install..."echo "=============================="sleep 1make installelseecho "=============================="echo "make install failed"echo "=============================="sleep 1fi

(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太大则需要精简,关于如何精简,这里不再多说,我们本次总结的重点不在这里。


推荐阅读
  • 本文介绍了Oracle数据库中tnsnames.ora文件的作用和配置方法。tnsnames.ora文件在数据库启动过程中会被读取,用于解析LOCAL_LISTENER,并且与侦听无关。文章还提供了配置LOCAL_LISTENER和1522端口的示例,并展示了listener.ora文件的内容。 ... [详细]
  • 本文介绍了Linux Shell中括号和整数扩展的使用方法,包括命令组、命令替换、初始化数组以及算术表达式和逻辑判断的相关内容。括号中的命令将会在新开的子shell中顺序执行,括号中的变量不能被脚本余下的部分使用。命令替换可以用于将命令的标准输出作为另一个命令的输入。括号中的运算符和表达式符合C语言运算规则,可以用在整数扩展中进行算术计算和逻辑判断。 ... [详细]
  • 本文介绍了在CentOS上安装Python2.7.2的详细步骤,包括下载、解压、编译和安装等操作。同时提供了一些注意事项,以及测试安装是否成功的方法。 ... [详细]
  • 海马s5近光灯能否直接更换为H7?
    本文主要介绍了海马s5车型的近光灯是否可以直接更换为H7灯泡,并提供了完整的教程下载地址。此外,还详细讲解了DSP功能函数中的数据拷贝、数据填充和浮点数转换为定点数的相关内容。 ... [详细]
  • 本文总结了Linux下多线程执行shell脚本的4种方法,包括切换到工作目录执行、使用绝对路径执行、直接使用bash或sh执行。同时介绍了为什么需要加上"./"来执行脚本的原因。 ... [详细]
  • STM32与FPGA的对比及学习建议
    本文对比了野火STM32F103指南针板和Xilinx的PYNQ-Z2板(ZYNQ-7020),介绍了野火STM32F103指南针板的学习资料和讲解视频的详细程度,建议初学者学习野火的资料。同时,介绍了STM32开发所用的Keil程序和C指针的重要性。对于ZYNQ-7020的开发,提到了其自带的Linux、Ubuntu18.4系统以及使用SD卡烧入镜像的方法。 ... [详细]
  • 腾讯安全平台部招聘安全工程师和数据分析工程师
    腾讯安全平台部正在招聘安全工程师和数据分析工程师。安全工程师负责安全问题和安全事件的跟踪和分析,提供安全测试技术支持;数据分析工程师负责安全产品相关系统数据统计和分析挖掘,通过用户行为数据建模为业务决策提供参考。招聘要求包括熟悉渗透测试和常见安全工具原理,精通Web漏洞,熟练使用多门编程语言等。有相关工作经验和在安全站点发表作品的候选人优先考虑。 ... [详细]
  • Tomcat安装与配置教程及常见问题解决方法
    本文介绍了Tomcat的安装与配置教程,包括jdk版本的选择、域名解析、war文件的部署和访问、常见问题的解决方法等。其中涉及到的问题包括403问题、数据库连接问题、1130错误、2003错误、Java Runtime版本不兼容问题以及502错误等。最后还提到了项目的前后端连接代码的配置。通过本文的指导,读者可以顺利完成Tomcat的安装与配置,并解决常见的问题。 ... [详细]
  • Linux Shell脚步的格式
    Shell脚步等多个命令的组合,可以做成一个shell文件(1.sh)赋权执行执行命令的方式前两张新的进程中执行,对当前进程不产生影响(cdtmp;pwds ... [详细]
  • Linux系统高级网络配置:链路聚合
    链路聚合网卡的链路聚合就是将多块网卡连接起来,当一块网卡损坏,网络依旧可以正常运行,可以有效的防止因为网卡损坏带来的损失,同 ... [详细]
  • Linux一键安装web环境全攻略
    摘自阿里云服务器官网,此处一键安装包下载:点此下载安装须知1、此安装包可在阿里云所有Linux系统上部署安装,此安装包包含的软件及版本为& ... [详细]
  • PHP socket服务端与客户端的简易通信
    今天学习socket通信的同时,顺便整理了下以前初识socket的知识。现在关于php的socket通信,有些框架已经十分成熟了,比如swoole和workerman,这两个大家可以学习学 ... [详细]
  • php在哪里好找工作(php学到什么程度可以找到工作)
    导读:本篇文章编程笔记来给大家介绍有关php在哪里好找工作的相关内容,希望对大家有所帮助,一起来看看吧。本文目录一览:1、php去哪个城 ... [详细]
  • 使用版本:1.8.0及以上使用条件:1.开启async-redisphp--riswoole(如果没有开启,重新编译安 ... [详细]
  • 如何解决swoole导出报的如下错误? ... [详细]
author-avatar
翟厉害
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有