0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

gdb本地调试版本移植至ARM-Linux系统

武汉万象奥科 2023-12-12 14:42 次阅读
QQ截图20231212142320.jpg

移植ncurses库

本文使用的ncurses版本为ncurses-5.9.tar.gz

1. 将ncurses压缩包拷贝至Linux主机或使用wget命令下载并解压

tar-zxvfncurses-5.9.tar.gz

2. 解压后进入到ncurses-5.9目录下

cdncurses-5.9

3. 在ncurses-5.9目录下创建编译完成后生成文件位置

mkdiroutput

cdoutput

mkdirarm-linux

4. 生成Makefile文件

./configure--target=arm-none-linux-gnueabi--prefix=$PWD/output/arm-linux--enable-termcap--with-shared--without-ada

  • --target表示编译器的前缀,需要根据编译的不同需求进行修改
  • --prefix表示编译完成后生成文件的位置
  • --nable-termcap表示关键代码使用termcap(terminalcapabilities)数据库[自动检测]
  • --with-shared表示动态编译

5. 编译

make

当遇到如下报错时

Makefile:794:recipefortarget'../obj_s/lib_gen.o'failed

make[1]:***[../obj_s/lib_gen.o]Error1

make[1]:Leavingdirectory'.../ncurses-5.9/ncurses'

Makefile:109:recipefortarget'all'failed

make:***[all]Error2

需要进入ncurses-5.9/include文件夹,修改curses.tail文件下的如下内容,将注释/*generated*/去掉

externNCURSES_EXPORT(bool)mouse_trafo(int*,int*,bool);/*generated*/

6. 安装

Makeinstall

7. 安装完成后会在/output/arm-linux目录下生成库文件,我们只需将lib目录下的libncurses.so.5库拷贝至开发板

移植gdb

本文使用的gdb版本为gdb-7.12.tar.gz

1. 将gdb压缩包拷贝至Linux主机或使用wget命令下载并解压

tar-zxvfgdb-7.12.tar.gz

2. 解压后进入到ncurses-5.9目录下

cdgdb-7.12

3. 生成Makefile文件

./configure-host=arm-none-linux-gnueabiCC=/home/vanxoak/CodeSourcery/Sourcery_G++_Lite/bin/arm-none-linux-gnueabi-gcc--enable-shared--prefix=$PWD/output/arm-linux--disable-werror--without-x--disable-gdbtk--disable-tui--without-included-regex--without-included-gettextLDFLAGS="-L$PWD/../output/arm-linux/lib"CPPFLASS="-I$PWD/../output/arm-linux/include"

  • --host=arm-none-linux-gnueabi用arm-none-linux-gnueabi编译
  • CC为交叉编译器绝对路径
  • --enable-shared动态编译
  • prefix=“$PWD/output/arm-linux”安装目录
  • --disable-werror屏蔽werror报警
  • --without-x取消xwindows支持
  • --disable-gdbtk取消gdbtk
  • --disable-tui取消tui界面
  • --without-included-gettext去掉用于多语言处理的gettext库
  • "LDFLAGS=XXX"指交叉编译完成的ncurse的lib目录路径
  • "CPPFLAGS=XXX"指是交叉编译完成的ncurse的include目录路径

4. 编译

make

5. 安装

makeinstall

安装完成后会在.../gdb-7.12/output/arm-linux/bin/目录下生成gdb可执行程序。

移植至HDT3-EVM开发板

1. 将libncurses.so.5库文件拷贝至/usr/lib目录下,若/usr目录下无lib目录可手动创建mkdirlib

2. 将gdb程序拷贝至/bin目录下

T3.JPG

测试调试

1. 编写可执行测试程序,示例hello.c代码如下,该代码执行后会打印HelloWorld。

#include

intmain(intargc,char*argv[])

{

printf("HelloWorld\n");

return0;

}

2. 使用交叉编译器进行编译,需要注意的是,要使用gdb调试程序,需要在使用交叉编译器编译源代码时加上"-g"参数保留调试信息,否则不能使用GDB进行调试且报如下最后一行所示错误:

/home#gdbhello

GNUgdb(GDB)7.12

Copyright(C)2016FreeSoftwareFoundation,Inc.

LicenseGPLv3+:GNUGPLversion3orlater

Thisisfreesoftware:youarefreetochangeandredistributeit.

ThereisNOWARRANTY,totheextentpermittedbylaw.Type"showcopying"

and"showwarranty"fordetails.

ThisGDBwasconfiguredas"arm-none-linux-gnueabi".

Type"showconfiguration"forconfigurationdetails.

Forbugreportinginstructions,pleasesee:

.

FindtheGDBmanualandotherdocumentationresourcesonlineat:

.

Forhelp,type"help".

Type"aproposword"tosearchforcommandsrelatedto"word"...

Readingsymbolsfromhello...(nodebuggingsymbolsfound)...done.

3. 使用交叉编译器编译测试程序

arm-none-linux-gnueabi-gcc-g-ohellohello.c

4. 将生成的hello文件拷贝至HDT3-EVM开发板上并使用sync命令保存

5. 输入gbd命令启动gdb程序

/home#gdb

GNUgdb(GDB)7.12

Copyright(C)2016FreeSoftwareFoundation,Inc.

LicenseGPLv3+:GNUGPLversion3orlater

Thisisfreesoftware:youarefreetochangeandredistributeit.

ThereisNOWARRANTY,totheextentpermittedbylaw.Type"showcopying"

and"showwarranty"fordetails.

ThisGDBwasconfiguredas"arm-none-linux-gnueabi".

Type"showconfiguration"forconfigurationdetails.

Forbugreportinginstructions,pleasesee:

.

FindtheGDBmanualandotherdocumentationresourcesonlineat:

.

Forhelp,type"help".

Type"aproposword"tosearchforcommandsrelatedto"word".

(gdb)

上述代码(gdb)为GBD内部命令引导符,表示等待用户输入gbd命令

6. 使用"filehello"命令载入被调试的测试程序

(gdb)filehello

Readingsymbolsfromhello...done.

显示Readingsymbolsfromhello...done.表示被测程序加载成功

7. 使用"r"命令执行调试测试程序

(gdb)r

Startingprogram:/home/hello

HelloWorld

[Inferior1(process849)exitednormally]

如上述代码显示"HelloWorld"即表示hello程序执行完成

(gdb)help

Listofclassesofcommands:

aliases--Aliasesofothercommands

breakpoints--Makingprogramstopatcertainpoints

data--Examiningdata

files--Specifyingandexaminingfiles

internals--Maintenancecommands

obscure--Obscurefeatures

running--Runningtheprogram

stack--Examiningthestack

status--Statusinquiries

support--Supportfacilities

tracepoints--Tracingofprogramexecutionwithoutstoppingtheprogram

user-defined--User-definedcommands

Type"help"followedbyaclassnameforalistofcommandsinthatclass.

Type"helpall"forthelistofallcommands.

Type"help"followedbycommandnameforfulldocumentation.

Type"aproposword"tosearchforcommandsrelatedto"word".

Commandnameabbreviationsareallowedifunambiguous.


声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • Linux
    +关注

    关注

    87

    文章

    11219

    浏览量

    208872
  • 编译器
    +关注

    关注

    1

    文章

    1618

    浏览量

    49043
  • 全志
    +关注

    关注

    24

    文章

    240

    浏览量

    53068
收藏 人收藏

    评论

    相关推荐

    使用GDB调试Linux应用程序

    本篇讲解使用GDB调试Linux应用程序,以下以 `hellowld.c` 为例介绍 GDB调试入门。
    发表于 06-27 15:48 447次阅读

    ARM-Linux开发与MCU开发有何不同?上篇

    ARM-Linux开发与MCU开发有何不同?针对ARM-Linux程序的开发,主要分为三类:应用程序开发、驱动程序开发、系统内核开发,针对不同种类的软件开发,有其不同的特点。今天我们来看
    发表于 04-02 15:12

    ARM-Linux与MCU开发的不同之处

    ,应用开发则是基于操作系统的,这种方式的嵌入式应用开发与单片机开发差异较大。ARM-Linux 应用开发和单片机的开发主要有以下几点不同:(1)应用开发环境的硬件设备不同单片机:开发板,仿真器(调试
    发表于 08-08 10:47

    怎样将openssl移植arm-linux下呢

    怎样将openssl移植arm-linux下呢?有哪些操作流程?
    发表于 10-22 06:55

    什么是ARM-Linux嵌入式操作系统移植呢?

    什么是ARM-Linux嵌入式操作系统移植呢?
    发表于 05-16 10:22

    基于ARM-Linux的MiniGUI的仿真与移植

    基于ARM-Linux的MiniGUI的仿真与移植 近几年,随着嵌入式系统的日益发展和32位嵌入式处理器以及图形显示设备的广泛应用,目标产品对GUI(图形用户界面)的需求越来越
    发表于 12-16 17:46 1508次阅读

    基于ARM-Linux的1553B仿真测试前端系统

    基于ARM-Linux的1553B仿真测试前端系统
    发表于 01-04 15:31 11次下载

    ARM-Linux指纹识别系统的设计

    ARM-Linux指纹识别系统的设计
    发表于 10-31 14:34 13次下载
    <b class='flag-5'>ARM-Linux</b>指纹识别<b class='flag-5'>系统</b>的设计

    嵌入式LinuxGDB调试环境建立

    was configured as “--host=i686-pc-linux-gnu,--target=arm-linux”... 说明此gdb在X86的Host上运行,但是调试
    发表于 04-02 14:33 508次阅读

    嵌入式Linux系统GDB远程调试的实现

    stub是嵌入式系统中的一段代码,作为宿主机GDB和目标机调试程序间的一个媒介而存在。 就 目前而言,嵌入式Linux系统中,主要有三种远程
    发表于 04-02 14:38 401次阅读

    ARM-Linux开发与MCU开发有何不同?上篇

    ARM-Linux开发与MCU开发有何不同?上篇针对ARM-Linux程序的开发,主要分为三类:应用程序开发、驱动程序开发、系统内核开发,针对不同种类的软件开发,有其不同的特点。今天我们来看
    发表于 10-28 19:36 6次下载
    <b class='flag-5'>ARM-Linux</b>开发与MCU开发有何不同?上篇

    ARM-Linux开发与MCU开发比较

    对于ARM-Linux开发,通常是没有硬件的调试器的,尤其是在应用开发的过程中,很少使用硬件的调试器,程序的调试主要是通过串口进行调试的。
    发表于 02-08 16:41 1次下载
    <b class='flag-5'>ARM-Linux</b>开发与MCU开发比较

    ARM-Linux开发与MCU开发的各自优势?

    针对ARM-Linux程序的开发,主要分为三类:应用程序开发、驱动程序开发、系统内核开发,针对不同种类的软件开发,有其不同的特点。今天我们来看看ARM-Linux开发和MCU开发的不同点,以及
    发表于 02-10 09:36 0次下载
    <b class='flag-5'>ARM-Linux</b>开发与MCU开发的各自优势?

    基于ARM-Linux指纹识别系统的设计

    电子发烧友网站提供《基于ARM-Linux指纹识别系统的设计.pdf》资料免费下载
    发表于 10-23 10:12 0次下载
    基于<b class='flag-5'>ARM-Linux</b>指纹识别<b class='flag-5'>系统</b>的设计

    如何使用linuxgdb调试python程序

    如何使用linuxgdb调试python程序  在Linux下,可以使用GDB(GNU调试
    的头像 发表于 01-31 10:41 2415次阅读