五、交叉编译和远程调试
一、实验目的
1.把握交叉编译的概念
2.学会利用远程调试工具调试实验平台上的程序
二、实验内容
比较交叉编译和以往本机编译的不同,通过利用gdbserver和arm-linux-gdb来远程调试实验平台上的应用程序
三、预备知识
1.有C语言基础
2.把握在Linux下经常使用编辑器的利用
3.把握Makefile 的编写和利用
4.把握Linux下的程序编译进程
四、实验设备及工具
硬件:UP-TECHPXA270实验平台、PC机Pentium500以上, 硬盘10G以上
软件:PC机操作系统REDHAT LINUX +MINICOM +ARM-LINUX开发环境
五、实验原理
1.交叉编译
很多从事Windows下程序设计的工程师转到嵌入式的时候,都会对交叉编译那个概念比较糊涂。在写那个实验的时候确实是为了让列位读者能够体会出交叉编译和本机上的编译有什么区别,对那个概念明确以后很多编译上的困惑可能都会迎刃而解。
交叉编译那个概念很早就已经存在了,它指的是在一种体系结构的系统下编译出能够在另外一种体系结构的系统下运行的程序。关于UP-TECHPXA270实验平台而言,咱们的开发环境是在基于X86结构的Linux系统下,而咱们平台的运行环境是基于ARM的Linux系统。
在咱们X86的机械上编译出能在arm平台上跑的应用程序就需要一整套交叉编译工具,这套工具运行在X86的平台上,但它编译出的程序却不能运行在X86的平台上,而只能运行在基于ARM的板子上。咱们能够通过Linux下的file命令来查看一个文件究竟是运行在X86下的仍是运行在arm上的。
X86结构:
ARM结构:
[zxt@BC 01_hello]$ file mystar
经常使用的交叉编译工具一样都是以某一种体系结构为头进行表示的,下面列出一些经常使用的交叉编译工具名称的头:
表4-1交叉编译工具头
PowerPC powerpc-linux-
ARM arm-linux-
MIPS (big endian) mips-linux-
MIPS (little endian) mipsel-linux-
以这些名称为头的交叉编译工具其实和咱们经常使用的在PC机上的编译工具所做的工作都是一样的,只要咱们能够明白这其实也是一种编译工具即可。这些交叉编译工具的用法和PC上的编译工具的用法是一样的。
2.远程调试
要利用gdb的远程调试功能,咱们需要对gdb源码进行编译,生成相应的调试工具,arm-linux-gdb和gdbserver。第一需要下载gdb的源码,目前gdb的最新版本是版,能够在gnu的网站上下载,
下载最新的源码后,需要成立一个编译该源码的目录结构,别离用来寄存不同情形下生成的代码。创建一个gdb目录用来寄存所有工程相关的代码,将下载下来的gdb紧缩包也放在gdb目录下,解紧缩后会生成一个的文件夹。
[zxt@BC gdb]$tree
.
|-- build-gdb
|-- build-gdbserver
|--
|-- gdb-install
`-- gdbserver-install
在上面的各个文件夹中,build-gdb用来保留配置的配置信息和编译生成的文件;build-gdbserver用来保留配置gdbserver的配置信息和编译生成文件;为下载下来的源代码;gdb-install为生成的arm-linux-gdb等工具和库的安装路径;gdbserver-install为生成gdbserver的安装路径。下面介绍如何来编译生成arm-linux-gdb和gdbserver
1)成立arm-linux-gdb
[zxt@BC gdb]$ tar xzf [zxt@BC gdb]$ cd build-gdb
[zxt@BC gdb]$ ../configure --target=arm-linux \
> --prefix=/home/zxt/up-netpxa270/gdb/gdb-install
[zxt@BC gdb]$make && make install
上面的prefix路径指定的是笔者PC上的安装路径,列位读者能够依照自己PC的配置情形选择不同的路径,在完成了上面的配置和编译安装后,会在gdb-install目录下生成相应的工具、库和man手册等等。
[zxt@BC gdb-install]$ tree
.
|-- bin
| |-- arm-linux-gdb
| |-- arm-linux-gdbtui
| `-- arm-linux-run
|-- info
|-- lib
| |--
| `--
|-- man
| `-- man1
`-- share
`-- locale
在bin目录下寄存的确实是咱们需要的调试工具,为了以后利用的方即能够将gdb-install目录下的所有内容复制到读者交叉编译器所在的目录,如此以后咱们就能够够像利用arm-linux-gcc一样方便的利用arm-linux-gdb。
2)成立gdbserver
上面讲述的进程中并无成立gdbserver,因为必需要利用适当的交叉编译工具来对它进行编译,下面的那个交叉编译进程确实是来成立一个gdbserver。
[zxt@BC gdb]$ cd build-gdbserver/
[zxt@BC build-gdbserver]$ chmod +x ../gdb/gdbserver/configure
[zxt@BC build-gdbserver]$ CC=arm-linux-gcc ../gdb/gdbserver/configure\
> --host=arm-linux --prefix=/home/zxt/up-netpxa270/gdb/gdbserver-install
[zxt@BC build-gdbserver]$ make && make install
编译完成后再gdbserver-install目录下就生成了相应的gdbserver工具。
[zxt@BC gdbserver-install]$ tree
.
|-- bin
| `-- gdbserver
`-- man
`-- man1
`--
有了这arm-linux-gdb和gdbserver这两个工具以后,咱们就能够够通过一个程序来对这两个工具进行测试。
六、实验步骤
1.编写测试程序
读者能够自己编写一个测试程序,也能够利用下面提供的一个测试程序,测试代码如下:
.......NOM %d\n", i );
9 }
10 return 0;
2.下载调试
在宿主PC运算机上启动NFS服务,并设置好共享的目录,以后在开发板上运行:
mount –t nfs –o nolock /mnt/nfs
其中为宿主机的ip地址,读者可依照自己情形进行修改。将编译好的应该用程序hello和gdbserver复制到开发板上。
1. 启动gdbserver
在开发板上启动gdbserver。有两种方式可供启动,别离是通过网口和串口。
网络方式:
[/mnt/yaffs/zxt]./gdbserver hello
Process hello created; pid = 105
Listening on port 1234
上述ip地址和端口,读者能够依照自己情形指定ip地址和端口号,注意该ip地址为宿主机的ip地址。
串口方式:
[/mnt/yaffs/zxt]./gdbserver /dev/tts/0 hello
Process hello created; pid = 112
上述/dev/tts/0为实验平台上的串口设备。
2. 启动arm-linux-gdb
在开发板上启动gdbserver以后咱们就能够够启动arm-linux-gdb来调试程序,若是读者已经将arm-linux-gdb 放入了交叉编译器的目录,那么咱们就能够够在终端中直接利用该工具。
[zxt@BC hello]$ arm-linux-gdb hello
GNU gdb
Copyright 2005 Free Software Foundation, Inc.
GDB is free software, covered by the GNU General Public License, and you are
welcome to change it and/or distribute copies of it under certain conditions.
Type "show copying" to see the conditions.
There is absolutely no warranty for GDB. Type "show warranty" for details.
This GDB was configured as "--host=i686-pc-linux-gnu --target=arm-linux"...
(gdb)
启动gdb以后需要利用target remote命令来打开远程调试命,该命令指定的ip地址为实验平台的ip地址。
(gdb) target remote Remote debugging using 0x40000c80 in ?? ()
(gdb)
若是利用串口一的话需要输入:
(gdb) target remote /dev/ttyS0
在利用了target remote后,在开发板上的gdbserver中会有下面的提示,证明已经有了正确的连接。
Remote debugging from host 再上面对步骤都已经完成以后,就能够够依照gdb的命令来对程序进行调试[zxt@BC hello]$ arm-linux-gdb helloworld
GNU gdb
Copyright 2005 Free Software Foundation, Inc.
GDB is free software, covered by the GNU General Public License, and you are
welcome to change it and/or distribute copies of it under certain conditions.
Type "show copying" to see the conditions.
There is absolutely no warranty for GDB. Type "show warranty" for details.
This GDB was configured as "--host=i686-pc-linux-gnu --target=arm-linux"...
(gdb) target remote Remote debugging using 0x40000c80 in ?? ()
(gdb) break main
Breakpoint 1 at 0x83e0: file , line 6.
(gdb) l
1 #include <>
2
3 int main () {
4
5 int i;x86架构和arm架构区别
6 for ( i =0; i < 10; i++ )
7 {
8 printf (".NOM %d\n", i );
9 }
10 return 0;
(gdb)c
Continuing.
Breakpoint 1, main () at :6
6 for ( i =0; i < 10; i++ )
gdb)
除在终端下利用arm-linux-gdb之外,还以通过ddd工具挪用arm-linux-gdb来启动DDD的图形化调试界面。启动DDD图形调试界面只需要输入下面的命令:
# ddd -debugger arm-linux-gdb helloworld
启动以后需要在命令栏中打开远程调试功能,如下图所示:
图4-1 DDD远程调试界面
七、实验要求
1.把握交叉编译的概念,会利用交叉编译工具对源代码进行编译
2.会利用gdb源码编译出arm-linux-gdb和gdbserver
3.学会gdb的远程调试方式
4.会利用ddd进行远程调试
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论