1、五、交叉编译以及远程调试 一、实验目的 1. 掌握交叉编译的概念 2. 学会使用远程调试工具调试实验平台上的程序 二、实验内容 比较交叉编译和以往本机编译的不同,通过使用 gdbserver 和 arm-linux-gdb 来远程调试实验平台上的应用程序 三、预备知识 1. 有 C 语言基础 2. 掌握在 Linux 下常用编辑器的使用 3. 掌握 Makefile 的编写和使用 4. 掌握 Linux 下的程序编译过程 四、实验设备及工具 硬件: UP-TECHPXA270 实验平台、 PC 机 Pentium500 以上 , 硬盘 10G 以上 软件: PC 机操作系统 REDHAT LI
2、NUX 9.0 MINICOM ARM-LINUX 开发环境 五、实验原理 1交叉编译 很多从事 Windows 下程序设计的工程师转到嵌入式的时候,都会对交叉编译这个概念比较糊涂。在写这个实验的时候就是为了让各位读者能够体会出交叉编译和本机上的编译有什么区别,对这个概念明确以后很多编译上的困惑可能都会迎刃而解。 交叉编译这个概念很早就已经存在了,它指的是在一种体系结构的系统下编译出能够在另外一种体系结构的系统下运行的程序。对于 UP-TECHPXA270 实验平台而言,我们的开发环境是在基于 X86 结构的 Linux 系统下,而我们平台的运行环境是基于 ARM 的 Linux 系统。 在我
3、们 X86 的机器上编译出能在 arm 平台上跑的应用程序就需要一整套交叉编译工具,这套工具运行在 X86 的平台上,但它编译出的程序却不能运行在 X86 的平台上,而只能运行在基于 ARM 的板子上。我们可以通过 Linux 下的 file 命令来查看一个文件究竟是运行在X86 下的还是运行在 arm 上的。 X86 结构: zxtBC 01_hello$ file hello hello: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), for GNU/Linux 2.2.5, dynamically linked (us
4、es shared libs), not stripped ARM 结构: zxtBC 01_hello$ file mystar mystar: ELF 32-bit LSB executable, ARM, version 1 (ARM), for GNU/Linux 2.4.3, dynamically linked (uses shared libs), not stripped 常用的交叉编译工具一般都是以某一种体系结构为头进行表示的,下面列出一些常用的交叉编译工具名称的头: 表 4-1 交叉编译工具头 实际的目标板 交叉编译工具头 PowerPC powerpc-linux- AR
5、M arm-linux- MIPS (big endian) mips-linux- MIPS (little endian) mipsel-linux- 以这些名称为头的交叉编译工具其实和我们常用的在 PC机上的编译工具所做的工作都是一样的,只要我们能够明白这其实也是一种编译工具即可。这些交叉编译工具的用法和PC 上的编译工具的用法是一样的。 2远程调试 要使用 gdb 的远程调试功能,我们需要对 gdb 源 码进行编译,生成相应的调试工具,arm-linux-gdb 和 gdbserver。首先需要下载 gdb 的源码,目前 gdb 的最新版本是 6.4 版,可以在 gnu 的网站上下载,
6、 http:/ftp.gnu.org/gun/gdb/ 下载最新的源码 gdb-6.4.tar.gz 后,需要建立一个编译该源码的目录结构,分别用来存放不同情况下生成的代码。创建一个 gdb 目录用来存放所有工程相关的代码,将下载下来的gdb 压缩包也放在 gdb 目 录下,解压缩后会生成一个 gdb-6.4 的文件夹。 zxtBC gdb$tree . |- build-gdb |- build-gdbserver |- gdb-6.4 |- gdb-install - gdbserver-install 在上面的各个文件夹中, build-gdb 用来保存配置 gdb-6.4 的配置信息以
7、及编译生成的文件; build-gdbserver 用来保存配置 gdbserver 的配置信息以及编译生成文件; gdb-6.4 为下载下来的源代码; gdb-install 为生成的 arm-linux-gdb 等工具和库的安装路径; gdbserver-install为生成 gdbserver 的安装路径。下面介绍如何来编译生成 arm-linux-gdb 和 gdbserver 1)建立 arm-linux-gdb zxtBC gdb$ tar xzf gdb-6.4.tar.gz zxtBC gdb$ cd build-gdb zxtBC gdb$ ./gdb-6.4/configu
8、re -target=arm-linux -prefix=/home/zxt/up-netpxa270/gdb/gdb-install zxtBC gdb$make 6 for ( i =0; i 2 3 int main () 4 5 int i; 6 for ( i =0; i 10; i+ ) 7 8 printf (“helloworld.NOM %dn“, i ); 9 10 return 0; (gdb) c Continuing. Breakpoint 1, main () at helloworld.c: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 进行远程调试