[转]gdb移植到arm开发板
2015-11-17 15:25
323 查看
一、源程序下载
环境:
硬件:TI davinci
开发板上内核:linux-2.6.32.2
交叉编译工具:arm-none-linux-gnueabi-gcc-4.3.3
PC 机器 Linux 系统:Ubuntu
PC 机编译环境:gcc 4.4.3
gdb 版本:gdb-7.6
下载地址:http://ftp.gnu.org/gnu/gdb/
ncurse 的支持:ncurse 5.6
下载地址:http://ftp.gnu.org/gnu/ncurses/
二、gdb的移植
1.ARM本地版需要 ncurse 的支持。
1.1 ncurse 库的移植
(1)tar
-zxvf ncurses-5.6.tar.gz
//解压到当前目录下
(2)cd
ncurses-5.6
//进入解压后目录
(3)./configure
--host=arm-none-linux-gnueabi
--prefix=/usr/local/ncurse
--without-ada
--enable-termcap
--with-shared
//生成 makefile
//其中--enable-termcap
比较关键 gdb 需要这个库
//安装在/usr/local/ncurse目录下,我的编译环境是:arm-none-linux-gnueabi
(4)make
//进行make编译
(5)make
install //安装,libncurses.so库应该在/usr/local/ncurse目录下
1.2 gdb 的编译
(1)tar
-zxvf gdb-7.6.tar.gz
//解压到当前目录下
(2)cd
gdb-7.6
//进入解压后目录
(3)./configure
--host=
arm-none-linux-gnueabi
--enable-shared
--prefix=/usr/local/gdb
--without-x
--disable-gdbtk
--disable-tui
--without-included-regex
--without-included-gettext
LDFLAGS=/usr/local/ncurse/lib
CPPFLAGS=/usr/local/ncurse/include
//生成 Makefile
//--enable-shared:动态编译
//--host=arm-linux:用
arm-linux-gcc
编译
//--prefix=/usr/local/gdb
安装目录
//--without-x
取消 x windows 支持
//--disable-gdbtk
取消 gdbtk,应该也是图形界面相关的
//--disable-tui
取消 tui 界面
//--without-included-regex
关闭正则表达式库
//--without-included-gettext
去掉用于多语言处理的 gettext库,正则表达式/gettext,暂时不需要,先去掉
//CPPFLAGS/LDFLAGS
是确保能找到 ARM 版的 ncurses 库
1)Error:但是在这里一直会出现错误,生成不了makefile,出现的错误是:“checking
for C compiler default output...
configure:
error: C compiler cannot create executables”
按照网上的很多做法:sudo apt-get
install libc6-dev,还是不行。后来我修改了“./configure
--host=
arm-none-linux-gnueabi
--enable-shared
--prefix=/usr/local/gdb
--without-x
--disable-gdbtk
--disable-tui
--without-included-regex
--without-included-gettext”,去掉了后边的ncurses库路径,就编译通过了生成了makefile。只是后边make的时候要手动添加ncurses
库。
(4)make
1) 如果 gdb 7.6有一个警告会当成bug
处理 symtab.c:
In
function'find_line_symtab':
symtab.c:2252:
error:
'exact'
may be used uninitialized in this
function
2) 只要简单把
int exact;变成
int exact
=0 ; 即可编译通过
3) Make 过程中提示
error
,少 “/gdb-6.8/dfb/bfd.h”,我用
find命令查找了下,发现系统中(“/usr/include/bfd.h”)和另一个交叉编译工具中(“/usr/local/arm/2.95.3/include/bfd.h”)都有这个文件,我拷贝了另一个交叉编译工具中的”bfd.h”。(“cp
/usr/local/arm/2.95.3/include/bfd.h
/gdb-6.8/bfd/“)
4)由于前边没有设置ncurses 库路径,下边出现的错误:"no
termcap library found"
解决方法:首先安装以下软件:sudo apt-get
install texinfo; sudo apt-get
install libncurses5-dev;
sudo apt-get install m4;
sudo apt-get install flex;
sudo apt-get install bison.
如果问题还存在的话,就手动将刚才生成的libncurses.a库添加到交叉编译环境的路径查找目录下,对于我的机器我将libncurses.a库拷贝到/root/tools/arm-2009q1/lib/gcc/arm-none-linux-gnueabi/4.3.3/include下就能make通过了。如果我们不交叉编译gdb,而是编译在本机上试用的gdb时nake不会碰到这个错误,那是因为本机gcc默认库搜索目录/usr/lib下有这个库libtermcap.a,但是这是一个链接文件,链接到了libncurses.a上,那是因为termcap库是一个比较老的终端数据库,现在都试用ncurses库代替,但是有些程序还是试用termcap库,所以系统中安装ncurses库时默认做一个链接文件,防止gdb的这种编译错误。
(5)make
install
1)最终的arm的程序gdb和gdbserver应该在/usr/local/gdb下面,将其拷贝和libncurses.so
拷贝到开发板上即可运行,象x86的GDB一样运行即可
2)注意这个样编译能同时把 ARM版 gdbserver 也同时编译出来并在安装目录看到.而且一般eabi的
gcc编译器都自带了arm-none-linux-gnueabi-gdb.所以交叉版本的
gdb 移植很多时候可以省略.
3)刚刚编译出来的 gdb 尺寸相当大,10M
多,因此必须要用 arm-none-linux-gnueabi-strip
gdb 来把尺寸减少.strip 后大约 2M 多(个人认为用不到,我主要用
gdbserver,至于arm-none-linux-gnueabi-gdb
我的交叉编译工具中有现成的)
三、gdb调试
1.环境搭建
(1)主机IP:192.168.1.197
(2)arm板IP:192.168.1.220
(3)将应用程序编译成可以gdb的可执行文件,注意makefile中是在生成.o文件的依赖关系中添加-g选项,例如:arm-none-linux-gnueabi-gcc
-o hello
-g hello.c
main.o:
main.cpp Main.h
Global.h
$(CXX)
-g
-rdynamic
-c $<
(4)要确保arm板与主机能ping通
2.arm板设置
(1)将刚才编译生成的gdbserver和可执行文件拷贝到arm板目录下。
(2)命令行下输入:gdbserver
192.168.1.197:2345
main //gdbserver将在2345端口等待远端连接
3.主机设置
(1)通过刚才编译出来的gdb或者是交叉编译环境自带的arm-none-linux-gnueabi-gdb启动命令行调试器,即输入:gdb
main 或者arm-none-linux-gnueabi-gdb
main,会进入gdb命令行调试器。
(2)在gdb提示符下输入:target
remote 192.168.1.220:2345连接到开发板的gdbserver,就可以进行gdb调试了。
(3)
(gdb)target
remote 192.168.1.220:1234
// 连接到开发板 成功后就可以进行调试
(gdb)list
or l
(gdb)break
func
(gdb)break
22
(gdb)info
br
(gdb)continue
or c
// 这里不能用 run
(gdb)next
or n
(gdb)print
or p result
(gdb)
finish // 跳出func函数
(gdb)
next
(gdb)
quit
原文链接:http://blog.chinaunix.net/uid-27717694-id-3839881.html
环境:
硬件:TI davinci
开发板上内核:linux-2.6.32.2
交叉编译工具:arm-none-linux-gnueabi-gcc-4.3.3
PC 机器 Linux 系统:Ubuntu
PC 机编译环境:gcc 4.4.3
gdb 版本:gdb-7.6
下载地址:http://ftp.gnu.org/gnu/gdb/
ncurse 的支持:ncurse 5.6
下载地址:http://ftp.gnu.org/gnu/ncurses/
二、gdb的移植
1.ARM本地版需要 ncurse 的支持。
1.1 ncurse 库的移植
(1)tar
-zxvf ncurses-5.6.tar.gz
//解压到当前目录下
(2)cd
ncurses-5.6
//进入解压后目录
(3)./configure
--host=arm-none-linux-gnueabi
--prefix=/usr/local/ncurse
--without-ada
--enable-termcap
--with-shared
//生成 makefile
//其中--enable-termcap
比较关键 gdb 需要这个库
//安装在/usr/local/ncurse目录下,我的编译环境是:arm-none-linux-gnueabi
(4)make
//进行make编译
(5)make
install //安装,libncurses.so库应该在/usr/local/ncurse目录下
1.2 gdb 的编译
(1)tar
-zxvf gdb-7.6.tar.gz
//解压到当前目录下
(2)cd
gdb-7.6
//进入解压后目录
(3)./configure
--host=
arm-none-linux-gnueabi
--enable-shared
--prefix=/usr/local/gdb
--without-x
--disable-gdbtk
--disable-tui
--without-included-regex
--without-included-gettext
LDFLAGS=/usr/local/ncurse/lib
CPPFLAGS=/usr/local/ncurse/include
//生成 Makefile
//--enable-shared:动态编译
//--host=arm-linux:用
arm-linux-gcc
编译
//--prefix=/usr/local/gdb
安装目录
//--without-x
取消 x windows 支持
//--disable-gdbtk
取消 gdbtk,应该也是图形界面相关的
//--disable-tui
取消 tui 界面
//--without-included-regex
关闭正则表达式库
//--without-included-gettext
去掉用于多语言处理的 gettext库,正则表达式/gettext,暂时不需要,先去掉
//CPPFLAGS/LDFLAGS
是确保能找到 ARM 版的 ncurses 库
1)Error:但是在这里一直会出现错误,生成不了makefile,出现的错误是:“checking
for C compiler default output...
configure:
error: C compiler cannot create executables”
按照网上的很多做法:sudo apt-get
install libc6-dev,还是不行。后来我修改了“./configure
--host=
arm-none-linux-gnueabi
--enable-shared
--prefix=/usr/local/gdb
--without-x
--disable-gdbtk
--disable-tui
--without-included-regex
--without-included-gettext”,去掉了后边的ncurses库路径,就编译通过了生成了makefile。只是后边make的时候要手动添加ncurses
库。
(4)make
1) 如果 gdb 7.6有一个警告会当成bug
处理 symtab.c:
In
function'find_line_symtab':
symtab.c:2252:
error:
'exact'
may be used uninitialized in this
function
2) 只要简单把
int exact;变成
int exact
=0 ; 即可编译通过
3) Make 过程中提示
error
,少 “/gdb-6.8/dfb/bfd.h”,我用
find命令查找了下,发现系统中(“/usr/include/bfd.h”)和另一个交叉编译工具中(“/usr/local/arm/2.95.3/include/bfd.h”)都有这个文件,我拷贝了另一个交叉编译工具中的”bfd.h”。(“cp
/usr/local/arm/2.95.3/include/bfd.h
/gdb-6.8/bfd/“)
4)由于前边没有设置ncurses 库路径,下边出现的错误:"no
termcap library found"
解决方法:首先安装以下软件:sudo apt-get
install texinfo; sudo apt-get
install libncurses5-dev;
sudo apt-get install m4;
sudo apt-get install flex;
sudo apt-get install bison.
如果问题还存在的话,就手动将刚才生成的libncurses.a库添加到交叉编译环境的路径查找目录下,对于我的机器我将libncurses.a库拷贝到/root/tools/arm-2009q1/lib/gcc/arm-none-linux-gnueabi/4.3.3/include下就能make通过了。如果我们不交叉编译gdb,而是编译在本机上试用的gdb时nake不会碰到这个错误,那是因为本机gcc默认库搜索目录/usr/lib下有这个库libtermcap.a,但是这是一个链接文件,链接到了libncurses.a上,那是因为termcap库是一个比较老的终端数据库,现在都试用ncurses库代替,但是有些程序还是试用termcap库,所以系统中安装ncurses库时默认做一个链接文件,防止gdb的这种编译错误。
(5)make
install
1)最终的arm的程序gdb和gdbserver应该在/usr/local/gdb下面,将其拷贝和libncurses.so
拷贝到开发板上即可运行,象x86的GDB一样运行即可
2)注意这个样编译能同时把 ARM版 gdbserver 也同时编译出来并在安装目录看到.而且一般eabi的
gcc编译器都自带了arm-none-linux-gnueabi-gdb.所以交叉版本的
gdb 移植很多时候可以省略.
3)刚刚编译出来的 gdb 尺寸相当大,10M
多,因此必须要用 arm-none-linux-gnueabi-strip
gdb 来把尺寸减少.strip 后大约 2M 多(个人认为用不到,我主要用
gdbserver,至于arm-none-linux-gnueabi-gdb
我的交叉编译工具中有现成的)
三、gdb调试
1.环境搭建
(1)主机IP:192.168.1.197
(2)arm板IP:192.168.1.220
(3)将应用程序编译成可以gdb的可执行文件,注意makefile中是在生成.o文件的依赖关系中添加-g选项,例如:arm-none-linux-gnueabi-gcc
-o hello
-g hello.c
main.o:
main.cpp Main.h
Global.h
$(CXX)
-g
-rdynamic
-c $<
(4)要确保arm板与主机能ping通
2.arm板设置
(1)将刚才编译生成的gdbserver和可执行文件拷贝到arm板目录下。
(2)命令行下输入:gdbserver
192.168.1.197:2345
main //gdbserver将在2345端口等待远端连接
3.主机设置
(1)通过刚才编译出来的gdb或者是交叉编译环境自带的arm-none-linux-gnueabi-gdb启动命令行调试器,即输入:gdb
main 或者arm-none-linux-gnueabi-gdb
main,会进入gdb命令行调试器。
(2)在gdb提示符下输入:target
remote 192.168.1.220:2345连接到开发板的gdbserver,就可以进行gdb调试了。
(3)
(gdb)target
remote 192.168.1.220:1234
// 连接到开发板 成功后就可以进行调试
(gdb)list
or l
(gdb)break
func
(gdb)break
22
(gdb)info
br
(gdb)continue
or c
// 这里不能用 run
(gdb)next
or n
(gdb)print
or p result
(gdb)
finish // 跳出func函数
(gdb)
next
(gdb)
quit
原文链接:http://blog.chinaunix.net/uid-27717694-id-3839881.html
相关文章推荐
- 微信公众号与HTML 5混合模式揭秘2——分享手机相册中照片
- SharePoint 列表的导出导入
- ecmobile,EC_PATH未定義,init.php加載失敗,解決方案
- javascript_DOM 编程艺术学习笔记(三)
- Python内存池管理与缓冲池设计
- PostMessage()给winform窗口发送信息
- ng之自定义指令
- Unity加载prefab时调用脚本函数顺序和内存释放问题
- SAE服务下用java实现微信公众账号图灵机器人
- C#循环练习
- sicily 1107. Simple Puzzle
- test
- mat最新下载地址
- 安卓仿手机QQ消息BadgeView气泡跟随手指移动,并实现进出动画效果。
- apache 请求转发配置
- Qt核心剖析: moc
- hadoop常用命令
- td回撤之绝对回撤
- 深入解析LoadRunner下的参数化取值
- 如何停用AIX中System Director Agents进程