建立交叉调试环境

  大家都知道,开发的嵌入式应用程序怎么最终能在嵌入式设备中运行起来,前期需要不断的调试,但是,嵌入式程序与PC下的程序调试存在很大的差别。这不像PC机下的程序直接在PC机下边运行边调试(GDB调试),而嵌入式的程序需要在嵌入式设备下运行,在上位机(PC)中调试,这就产生了交叉调试。

  本文的环境:

   虚拟机:vmware7.0

   Linux系统:Fedora9.0

   开发板:mini2440

   交叉编译工具链:arm-linux-gcc(友善之臂提供,可去其官网下载)

  好了,万事俱备,只欠开始行动了。

一、设置NFS共享

  交叉调试的前提需要设置NFS共享,在上位机下配置NFS服务,建立NFS共享目录。

1、PC机下开启NFS服务

[root@localhost home]# service nfs restart

2、设置共享目录

[root@localhost home]# vim /etc/exports

打开exports文件后,添加如下内容:

/home/NFS       *(rw,sync,no_root_squash)

保存退出。

说明一下,上面的含义为:/home/NFS 表示我的共享目录,* 表示任意的开发板的ip地址,rw表示可读写,sync表示同步,no_root_squash表示有root权限。

接下来使用如下命令使共享目录生效:

[root@localhost home]# exportfs -ra

不信看看:

[root@localhost home]# exportfs -v

是不是出现了:/home/NFS       <world>(rw,wdelay,no_root_squash,no_subtree_check),这样就设置成功了共享目录。

3、交叉编译gdb(前提你的系统已经安装了交叉编译工具链)

下载一个gdb源码包(我的为:gdb-7.0a.tar.bz2),在虚拟机下解压并编译:

[root@localhost toolchain]# tar jxvf gdb-7.0a.tar.bz2

解压后进入其目录,然后

[root@localhost gdb-7.0]# ./configure --target=arm-linux -prefix=/opt/toolchain/gdb7.0_arm

-prefix=/opt/toolchain表示安装在/opt/toolchain/gdb7.0_arm这个目录下。

[root@localhost gdb-7.0]# make

[root@localhost gdb-7.0]# make install

这样就安装成功了,瞧瞧/opt/toolchain/gdb7.0_arm中有bin、share、lib目录,进入bin目录可以发现发现:

修改配置:

[root@localhost /]# vim /etc/profile

在最后面将PATH环境变量写成如下(大家不要跟我一样啊,因为我做了好多的配置,你们只要将/opt/toolchain/gdb7.0_arm/bin加入这个PATH中就行了,格式跟下面的一样):

export PATH=/opt/Qt4.6.4_forArm/bin:/opt/cmake/bin:/opt/toolchain/4.4.3/bin:/opt/toolchain/gdb7.0_arm/bin:$PATH

保存退出,并设置生效:

[root@localhost /]# source /etc/profile

4、交叉编译gdb-server

进入解压的源码包gdb7.0中,可以看到其中有个gdb目录,gdb目录下有个gdbserver目录,进入这个目录:

[root@localhost gdb-7.0]# cd gdb/gdbserver

交叉编译安装:

[root@localhost gdbserver]# ./configure --target=arm-linux --host=arm-linux

[root@localhost gdbserver]# make

这样交叉编译gdbserver成功了,可以发现在当前目录下有个:gdbserver(可执行文件),将其拷贝之共享目录(我的为:/home/NFS)。

5、拷贝libthread库至共享目录(网上这么说的,我没有做这一步,大家可以参考下,不碍事的)

在交叉编译工具链中有libthread_db-1.0.so这个动态链接文件、将其拷贝至/home/NFS/lib中(为了方便管理,我在NFS目录下建立一个lib目录,所有外来库文件都放在这个lib目录下),建立符号链接:

[root@localhost lib]# ln -s libthread_db-1.0.so libthread_db.so

[root@localhost lib]# ln -s libthread_db-1.0.so libthread_db.so.1

当你在开发板mount的时候,先设置一下库文件搜索路径:LD_LIBRARAY_PATH

三、开发板下mount共享目录

1、连接开发板,设置好网络(开发板的ip地址,我的开发板ip地址为:172.16.28.100,大家根据自己实际情况设定,我的Linux系统的ip为:172.16.28.22)

2、开发板下执行:

[root@FriendlyARM /]# mount -t nfs -o intr,nolock,rsize=1024,wsize=1024 172.16.28.22:/home/NFS /mnt

mount上后,你可以在开发板的/mnt 目录下发现其中的内容和PC机下共享目录/home/NFS 中内容是一样的。

3、测试

在PC的共享目录下编写一个print.c文件,如:

保存后并交叉编译:

[root@localhost NFS]# arm-linux-gcc -Wall -g print.c -o print

得到了一个可执行的print文件。

进入开发板挂载的目录中(我的/mnt),执行如下:

[root@FriendlyARM /mnt]# ./gdbserver 172.16.28.22:6666 print

172.16.28.22为我的Linux系统的ip地址,6666为端口号(可以自行设定,最好大于1024,使得不和系统的端口冲突),print为要交叉调试的可执行文件。如果执行成功出现:

Process print created; pid = 752
Listening on port 6666

呵呵,pid可能各不相同(不必担心)。

在Linux的共享目录下执行:

[root@localhost NFS]# arm-linux-gdb print

出现:

GNU gdb (GDB) 7.0
Copyright (C) 2009 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.  Type "show copying"
and "show warranty" for details.
This GDB was configured as "--host=i686-pc-linux-gnu --target=arm-linux".
For bug reporting instructions, please see:
<http://www.gnu.org/software/gdb/bugs/>...
Reading symbols from /home/NFS/print...done.
(gdb) target remote 172.16.28.100:6666

(红色表示敲入的命令),172.16.28.100(我的开发板的ip),回车后:

Remote debugging using 172.16.28.100:6666
warning: Unable to find dynamic linker breakpoint function.
GDB will be unable to debug shared library initializers
and track explicitly loaded dynamic code.
0x400007b0 in ?? ()
(gdb) list 

(红色为命令),回车后:

1       #include <stdio.h>
2
3       int main(void)
4       {
5               int i;
6
7               for (i = 0; i < 10; i++)
8               {
9                       printf("i=%d ", i);
10                      printf("\n");
(gdb)
显示了源码,哈哈哈,交叉调试基本上成功了,现在可以用基本的GDB命令可以调试了(现在程序在开发板中运行,而我们在上位机下调试)。


注意:交叉调试不能用run命令来执行,因为remote后,程序就开始了,只要设置断点,然后c命令就会跑到断点处。


在写此文时参考了:http://www.linuxidc.com/Linux/2011-02/32733.htm,在此表示感谢,欢迎大家转载,转载请注明出处CSDN。email:forstudy@yahoo.cn




  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 在网络工程与设计H3C实验中的实验2,网络设备基本连接与调试的实验环境通常是由多个H3C网络设备组成的一个小型网络环境,其中可能包括交换机、路由器、防火墙等设备。这些设备通常会使用不同的网络协议和配置,而实验的目的就是要学习如何正确地连接和调试这些设备,以实现网络的正常运行。同时,在实验过程中也会学习如何使用H3C设备的命令行接口和图形化界面来进行基本的配置和管理。 ### 回答2: 网络工程与设计 H3C 实验中实验 2 的实验环境是指进行网络设备基本连接与调试的实验时所需的硬件和软件环境。 硬件环境包括以下部分: 1. 网络设备:如交换机、路由器等。其中,H3C 设备是本实验的主要设备工具。 2. 计算机:用于管理和控制网络设备,通常使用终端设备(如个人电脑、笔记本电脑)通过串口与网络设备进行连接。 3. 串口线:用于连接计算机和网络设备,通过串口线进行数据传输和通信。 软件环境包括以下部分: 1. 操作系统:计算机需要安装相应的操作系统(如Windows、Linux等)。 2. 网络管理软件:用于管理和配置网络设备的软件,例如 H3C 的 iMC。 3. 终端模拟软件:计算机需要安装终端模拟软件,例如 SecureCRT、TeraTerm 等,用于与网络设备进行终端连接和管理。 在实验中,首先需要通过串口线将计算机与网络设备进行连接,打开终端模拟软件并配置相应的串口参数(如波特率、停止位等),以建立计算机与网络设备之间的通信连接。然后,通过终端模拟软件登录到网络设备的控制台,并使用相应的命令进行网络设备的基本配置和调试。 总之,网络工程与设计 H3C 实验中实验 2 的实验环境是基于各种硬件设备和软件工具,通过串口线和终端模拟软件等搭建起来的,用于进行网络设备基本连接与调试的实验环境。 ### 回答3: 网络工程与设计H3C实验中实验2的实验环境是包括一台PC机、一台网络设备以及相应的网络线缆的实验环境。 首先,实验中需要准备一台PC机,该PC机需要安装有Windows或者Linux操作系统,并且具备网络连接的功能。这台PC机作为实验中的管理主机,用于配置和管理网络设备。 其次,实验中需要准备一台H3C网络设备,例如交换机或路由器。这台网络设备作为实验中的被管理设备,用于提供网络连接和数据转发的功能。H3C是一家知名的网络设备制造商,其设备具有稳定、可靠的性能。 最后,实验中还需要准备相应的网络线缆,用于连接PC机与网络设备。常用的网络线缆包括以太网网线,根据实验需求可以选择不同的网线类型,如直连线或交叉线等。 总结来说,网络工程与设计H3C实验中实验2的实验环境主要包括一台PC机、一台H3C网络设备以及相应的网络线缆。通过连接这些设备,并进行相应的配置与管理,可以完成网络设备的基本连接与调试实验。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值