必赢手机app下载 / Blog / 必赢手机app下载 / 【必赢手机app下载】Gdbserver远程调试的具体实现,tf卡传输可执行程序至linux开发板

【必赢手机app下载】Gdbserver远程调试的具体实现,tf卡传输可执行程序至linux开发板

本人小白,使用的是MYB-Y335X开发板,基于TI推出的Cortex
A8内核的AM3352b处理器芯片。

 

开发板自带的开发手册写的异常简单,对于初学者来说上手比较困难,但是也间接的提高了自己解决问题的能力。

采用的是nfs目标板挂载本机目录的方法,当然首先,你得开通本机的nfs共享服务,具体步骤如下:

1、首先需要在linux主机中编译想要运行的程序,这里以led.c程序为例,进入led程序目录下输入make,如果程序已经编译过会出现

1、进入/etc目录,vim exports这个文件,在里面添加/home
192.168.0.*(rw,sync)保存后退出

make: Nothing to be done for `all'.

注:/home
为要共享的文件夹的名称,192.168.0.*为本NFS服务器允许访问的客户端ip,若nfs不成功,后面参数rw
ro
等标志对文件夹操作权限,sync:数据同步写入内存和硬盘,也可以使用async,此时数据会先暂存于内存中,而不立即写入硬盘。可以将括号里面的sync去掉。

编译器默认程序没有改动,就不会再进行任何操作,如果想要重新编译需要make
clean

2、重新启动nfs服务,命令为:/sbin/service nfs restart

root@ubuntu:/home/rsn/AM3352/Examples/led# make clean
rm -f *.o led_test

3、输入命令route del default来关闭网关(加快mount速度)

这样编译器就会删除编译生成的可执行代码,之后再编译

4、mount 192.168.0.47(为本机的ip):/home
/mnt用以测试本机是否开通nfs服务。

root@ubuntu:/home/rsn/AM3352/Examples/led# make
arm-linux-gnueabihf-gcc -o led_test led.c main.c

cd
/mnt目录下,看mnt下的内容是否与home的内容一致,若一致,表明已经开通nfs服务。

就会生成可执行代码。

当本机的nfs服务开通后,你还需要配置开发板的ip地址,由于各个开发板ip地址配置方法不一样,所以,假设开发板的ip地址为192.168.2.100.

2、将生成的可执行文件(led_test.o)拷至tf卡的根目录中。

搭建交叉编译环境的步骤:

3、将tf卡插入开发板中,启动开发板。在win7系统下需要下载使用HyperTerminal超级终端来调试开发板

1、一般在安装linux时候,自动安装c编译环境,因此不需要再重新安装gcc编译器。

4、启动成功后首先进入root权限,之后需要首先进入开发板的根文件系统

2、安装交叉编译器

# cd /
# ls
bin      etc      lib32    mnt      root     sys      var
boot     init     linuxrc  opt      run      tmp
dev      lib      media    proc     sbin     usr

从ftp://ftp.arm.linux.org.uk/pub/armlinux/toolchain/下载交叉编译器cross-3.2.tar.bz2,
存放在/usr/local目录下。

5、
之后需要挂载tf卡至mnt目录,mnt目录下首先需要新建一个文件夹,这里我给他起名叫做tfcard

切换致该目录:

# mount /dev/mmcblk0p1 /mnt/tfcard 

# cd /usr/local

至于为什么需要挂载,如何挂载参考的这篇文章,写的很好

# mkdir arm

6、 挂载之后就可以通过/mnt/tfcard访问tf卡中的资源和内容。

然后解压cross-3.2.tar.bz2:

在这里本人遇到了一个非常严重的问题,就是在断电之前没有对挂载的tf卡进行反挂载,导致了出现了如下问题

# tar jxvf cross-3.2.tar.bz2 –C /usr/local/arm

Volume was not properly unmounted. Some data may be corrupt. Please run fsck. 

解压后把/usr/local/arm/usr/local/arm中最后一个arm拷贝到/usr/local,也就是用命令cd
/usr/local/arm/usr/local中,用cp -a arm
/usr/local把arm拷贝到/usr/local中去。

意思就是说tf卡有某些数据已经损坏,请运行fsck,所以这里先说明一下,挂载tf卡使用完成之后一定要运行反挂载语句,相当于Windows系统下的“弹出u盘”

3、把交叉编译器的路径加入到PATH。(两种方法a,b)

# umount /mnt/tfcard

a、# export PATH=$PATH:/usr/local/arm/bin

一旦出现上述问题,解决方法是使用读卡器插入另一个linux主机,使用fsck进行修复。具体步骤如下

注:(这只能在当前的终端下才是有效的,)

1. 安装dosfstools(apt-get install dosfstools)
2. 使用fdisk -l命令来确定是哪个分区,也就是确定tf卡的路径。
3. 执行修复命令fsck.vfat -v /刚刚查到的路径
4. 执行修复命令fsck.vfat -a /刚刚查到的路径

b、修改/etc/profile 文件:

7、
最后就可以使用cp命令将编译好的可执行文件复制到根目录的/usr/bin下运行了。

# vim /etc/profile

 

增加路径设置,在末尾添加如下:

export PATH=$PATH:/usr/local/arm/bin

4、使新的环境变量生效。

# source /etc/profile

5、检查是否将路径加入PATH的方法。

# echo $PATH

如果显示的内容中有/usr/local/arm/bin,说明已经将交叉编译器的路径加入PATH。自此,交叉编译环境安装完成。

6、测试。

下面我们就来测试一个简单的例子。

/*Hello.c*/

#include

int main()

{

printf(“hello word! ”);

return 0;

}

程序输好以后确认无误,保存。进入程序文件所在目录

# arm-linux-gcc hello.c –o hello

(-o
可以理解为“目标为生成”)arm-linux-gcc是第一次出现,有人可能会问这个哪里来的,不妨打开刚才安装的交叉编译工具目录/usr/local/arm-linux/arm-linux/bin/可以发现里面有一个arm-linux-gcc文件,这个就是针对arm的CPU的gcc编译器了。以后用其它编译工具链式也可以通过这种方法看看其编译器是什么了。编译好了以后就可以下载到目标机进行测试了。当然也可以先在PC机上测试正误。用gcc
hello.c –o hello就可以生成PC机上程序了,在运行./hello
就可以发现终端显示hello!字样。用arm-linux-gcc编译的程序在PC机上是不能运行的,运行后给出错误报告:无法执行二进制文件。说明经过交叉编译环境编译出的文件是硬件可执行的二进制代码文件.

7、交叉编译环境搭建成功。

要经行gdbserver远程调试,还必须安装gdb远程调试工具:

gdb的源代码包可以从http:
//ftp.cs.pu.edu.tw/Linux/sourceware/gdb/releases/下载,最新版本为gdb-6.4。下载到某个目录,笔者下载到自己的用户目录:/home/vicky。

下载完后,进入/home/vicky目录,配置编译步骤如下:

#tar jxvf gdb-6.4-tar-bz2

#cd gdb-6.4

#./configure –target=arm-linux –prefix=/usr/local/arm-gdb -v

#make

(这一步的时候可能会有问题,提示一个函数中(具体函数名不记得了)parse
error,就是unsigned前边多了一个”}”,你用vi进入那一行把它删掉就行了。一般都不会出错的。)

#make install

#export PATH=$PATH:/usr/local/arm-gdb

进入gdbserver目录:

#./configure –target=arm-linux –host=arm-linux

#make CC=/usr/local/arm/bin/arm-linux-gcc

(这一步要指定arm-linux-gcc的位置,可能跟你的不一样)

没有错误的话就在gdbserver目录下生成gdbserver可执行文件,把它烧写到flash的根文件系统分区,或通过nfs
mount的方式都可以。只要保证gdbserver能在开发板上运行就行。

下面就可以用gdb+gdbserver调试我们开发板上的程序了。在目标板上运行gdbserver,其实就是在宿主机的minicom下,我的red
hat linux装在vmware下的。我是在minicom下#mount 192.168.2.100:/
/tmp后做的(这里参数-o
nolock可以不加,不加这一步执行得反而更快些),hello和gdbserver都是位于linux根目录下,把主机根目录挂在到开发板的/tmp
目录下。

要进行gdb调试,首先要在目标系统上启动gdbserver服务。在gdbserver所在目录下输入命令:

(minicom下)

#cd /tmp

#./gdbserver 192.168.2.100:2345 hello

192.168.2.100为宿主机IP,在目标系统的2345端口开启了一个调试进程,hello为要调试的程序。

出现提示:

Process /tmp/hello created: pid=”80″

Listening on port 2345

(另一个终端下)

#cd /

#export PATH=$PATH:/usr/local/arm-gdb/bin

#arm-linux-gdb hello

(gdb) target remote 192.168.2.223:2345

(192.168.2.223为开发板IP)

出现提示:

Remote debugging using 192.168.2.223:2345

[New thread 80]

[Switching to thread 80]

0x40002a90 in ??()

同时在minicom下提示:

Remot

1、进入/etc目录,vim exports这个文件,在…

发表评论

电子邮件地址不会被公开。 必填项已用*标注

相关文章

网站地图xml地图