基于hisilicon的arm平台搭建gdb+gdbserver调试环境

      这段时间搭建了一个基于hisiliconarm平台搭建gdb+gdbserver调试环境,网上对hisilicon平台的搭建资料不多,基本上是arm-linux-gdb的,而没有arm-uclibc-linux-gdb的,我把我的搭建过程记录下来,也跟大家分享一下,哪有有不对的地方,还请指正。

    由于我的宿主机上自带了交叉编译器,所以只需要编译gdbserver即可。如果需要编译gdb的,可以在网上搜集到相关资料。这里不加叙述。

     1,首先是gdbserver的编译:     

 指令如下:

 下载gdb-6.6.tar.gz 

  解压:tar xvzf gdb-6.6.tar.gz

若下载的为gdb-6.6.jar.bz2

Mkdir gdb-6.6

解压格式为 tar jxvf gdb-6.6.jar.bz2 –c /gdb-6.6

 

  进入文件夹:cd gdb-6.6/gdb/gdbserver

  编译:cc=/opt/hisilicon/toolchains/arm-uclibc-linux-soft/bin/arm-uclibc-linux-gcc ./configure  --host=arm-uclibc-linux

  Make clean

  Make all

   生成 arm格式的gdbserver

 

2,程序的编译:

程序在进行编译的时候一定要加上-g进行编译,不然不能调试。

 

3,将编译好的程序目标码hellogdbserver放到同一个文件夹gdbtest下。

 

4,到宿主机上登录管理员帐号,键入命令:/sbin/service nfs restart

启动nfs服务。

 

5,开发板的设置,可以在超级终端下进行:

连接好开发板和宿主机后:

首先在hisilicon#下设置开发板的IP setenv ipaddr 192.168.1.123

setenv serverip 192.168.1.124(宿主机IP)

setenv bootargs 'mem=32M console=ttyAMA0,57600 root=/dev/mtdblock/1 rootfstype=jffs2 boardip=192.168.1.123 mmz=sdram,1,0x620M,32M'

saveenv

 

可以使用Printenv查看是否设置成功,Ping 192.168.1.124查看网络是否连通。

 

重新启动开发板,进入开发板的系统界面。

再次设置IPifconfig eth1 192.168.1.123 up

设置成功后,ping 192.168.1.124查看网络是否连通。

 

 

网络连通后,则键入mount 192.168.1.124:/home/a/gdbtest /mnt/

192.168.1.124上目录为/home/a/gdbtest/下的文件挂载到开发板的mnt/目录下。

 

cd mnt

Ls查看mnt目录下是否有程序目标码hellogdbserver,如果有,说明挂载成功,如果无,挂载未成功,寻找原因,重新挂载。

挂载成功后:./gdbserver 192.168.1.124:1234 hello

启动开发板上的gdbserver服务,其中192.168.1.124为宿主机的IP1234为端口,可以是任意四位数。hello为要跟踪的应用程序目标码。

开发板上出现Process ./ hellocreated; pid = 618

Listening on port 1234

 

此时,开发板开始监听宿主机的gdb调试

 

6,宿主机:进入gdbtest目录下 cd gdbtest

键入:arm-uclibc-linux-gdb hello

进入gdb调试界面后

键入:target remote 192.168.1.123:1234

 

在开发板出现:Remote debugging from host 192.168.1.124

 

C继续运行

 

需要注意的地方:

1,  编译gdbserver时,一定要注意你的交叉编译器的绝对地址和你的开发板是什么类型的。如果交叉编译器是arm-linux-gcc,在配置的时候,则应该键入 cc=交叉编译器的绝对地址/arm-linux-gcc ./configure --host=arm-linux;这个是比较关键的地方,因为在开发板上运行的gdbserver必须要编译成ARM ELF格式,否则无法运行。我所用的交叉编译器是arm-uclibc-linux-gcc,所以配置必须是

cc=/opt/hisilicon/toolchains/arm-uclibc-linux-soft/bin/arm-uclibc-linux-gcc ./configure  --host=arm-uclibc-linux ,由于网上有人写经验说arm-uclibc-linux-gcc的交叉编译器在配置host的时候也是用arm-linux的,但是这样编译出来的gdbserver由于跟交叉编译器不匹配,所以格式会是intel 80383 elf的,而这种格式在开发板上是不能运行的。查看文件格式可以用命令file查看。正确的格式应该是这样:

键入file gdbserver

gdbserver: ELF 32-bit LSB executable, ARM, version 1, dynamically linked (uses shared libs), not stripped

当查看到的gdbserver格式如上所示时,该gdbserver就是可以在开发板上运行的。

2,  编译应用程序的目标码时,一定要加上-g 编译,由于目标码也是在开发板上运行的,所以格式也必须是 arm elf的,查看方式同上。

编译格式为:arm-uclibc-linux-gcc –g –o 程序 目标码

键入file hello

hello: ELF 32-bit LSB executable, ARM, version 1, statically linked, not stripped

3,  利用nfs挂载目录的时候,如果挂载失败,原因可能有二个:1nfs未启动;2,网络未连通;可以使用mount 192.168.1.124(为本机的ip):/home /mnt 测试是否开通nfs服务。网络是否连通用ping 测试。

4,  网络无法ping通时,可以通过ifconfig –a查看网卡状态,利用ifconfig对网络IP重新配置,也可以通过route add 修改路由。

在搭建环境过程中,如果出现指令不能执行,则必定是权限问题。在宿主机可以改变身份登录,修改权限,执行命令。对要运行的gdbserverhello可以用chmod命令改变他们的权限。Chmod 777 gdbserver ;chmod 777 hello,使所有人都可以对他们进行读写执行操作。

 

写得比较凌乱,还请见谅。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值