1.可以使用crosstool,在*.sh文件中加入--gdb选项将其编译出来
2.可以单独编译,网上也有很多资料:
引用http://blog.chinaunix.net/u1/34474/showart_361451.html 内容
今后我们编译程序的时候,就用arm-softfloat-linux-gnu-gcc来编译我们的程序。 当然,应用程序的调试是开发过程中必不可少的环节之一。Linux下的GNU的调试器即是GDB。所以我们有了这个交叉编译工具链之后,可以用它来编译gdb和gdbserver。如果你暂时不需要GDB的话,也可以先略过这一步。 GDB的编译安装 目前比较新的是版本是GDB6.6。其官方网站是http://www.gnu.org/software/gdb/。 下载gdb-6.6.tar.gz源代码包到/usr/src下。 [root@localhost]tar –zxvf gdb-6.6.tar.gz [root@localhost]cd gdb-6.6 配置很简单,只需要指定目标板体系结构和安装路径即可。 [root@localhost]mkdir /opt/crosstool/gcc-3.4.1-glibc-2.3.3/arm-softfloat-linux-gnu/gdb6.6 [root@localhost]./configure --target=arm-softfloat-linux-gnu --prefix=/opt/crosstool/gcc-3.4.1-glibc-2.3.3/arm-softfloat-linux-gnu/gdb6.6 -v [root@localhost]make [root@localhost]make install 不要加上--host=arm-softfloat-linux-gnu, target表示将制作for arm-linux平台的,prefix是安装的路径,默认比如到/usr/bin,执行make install以后,在/opt/crosstool/gcc-3.4.1-glibc-2.3.3/arm-softfloat-linux-gnu/gdb6.6/其中会生成一些新的文件和文件夹。其中也会包含arm...-linux-gdb等。
顺利的话,则在gdb6.6下生成新的目录,其中gdb工具就在bin目录下。 [root@localhost]ls –l /opt/crosstool/gcc-3.4.1-glibc-2.3.3/arm-softfloat-linux-gnu/gdb6.6 /bin 总用量 30476 -rwxr-xr-x 1 root root 14335251 12月 29 15:53 arm-softfloat-linux-gnu-gdb -rwxr-xr-x 1 root root 14335296 12月 29 15:53 arm-softfloat-linux-gnu-gdbtui -rwxr-xr-x 1 root root 2489663 12月 29 15:52 arm-softfloat-linux-gnu-run 同样在环境变量中添加gdb的路径 [root@localhost]export PATH=$PATH :/opt/crosstool/gcc-3.4.1-glibc-2.3.3/arm-softfloat-linux-gnu/gdb6.6/bin 今后调试程序的时候,用arm-softfloat-linux-gnu-gdb来调试。 gdbserver的编译 [root@localhost]cd gdb-6.6 [root@localhost]cd gdb/gdbserver [root@localhost] ./configure --target=arm-softfloat-linux-gnu–-host=arm-softfloat-linux-gnu [root@localhost] make CC=/opt/crosstool/gcc-3.4.1-glibc-2.3.3/arm-softfloat-linux-gnu/bin/arm-softfloat-linux-gnu-gcc 如果不出错的话,将在当前目录下生成两个可执行文件:gdbserver和gdbreplay。以后就可以用gdb+gdbserver调试我们开发板上的程序了。至此,我们的交叉编译工具链已经基本建立。可以用来作为我们bootloader的编译环境了。 /******************************************************* 说说我遇到的问题: 1../configure --target=arm-softfloat-linux-gnu–-host=arm-softfloat-linux-gnu 我改为:./configure --target=arm-linux --prefix=/usr/local/arm/3.4.1/gdb6.6 我要求安装在/usr/local/arm/3.4.1/gdb6.6目录下,host表示是arm-linux主机
2. 在编译时遇到错误:/usr/local/arm/3.4.1/bin/arm-linux-gcc -c -Wall -g -O2 -I. -I. -I./../regformats -I./../../include -I../../bfd -I./../../bfd linux-arm-low.c linux-arm-low.c:35:21: sys/reg.h: No such file or directory 因为sys/reg.h在Redhat /usr/include/sys/reg.h目录中,所以可以加上 -I/usr/include 然后单独运行:/usr/local/arm/3.4.1/bin/arm-linux-gcc -c -Wall -g -O2 -I. -I. -I./../regformats -I./../../include -I../../bfd -I./../../bfd -I/usr/include linux-arm-low.c OK!!!!!
3.然后运行 make CC=/usr/........(arm-linux-gcc的绝对位置)
4.然后运行make install 在我定义的prefix (/usr/local/arm/3.4.1/gdb6.6)下,在bin/下有一个arm-linux-gdbserver 哈哈,爽!!!!
后来在gdb7.4上操作: arm-linux-gcc -c -g -O2 -I. -I. -I./../common -I./../regformats -I./../../include -Wall -Wdeclaration-after-statement -Wpointer-arith -Wformat-nonliteral -Wno-char-subscripts -Werror linux-arm-low.c 由于打开了-Werror开关,把这个去掉,重新编 linux-arm-low.c,然后再继续。
GDB+GDBServer的使用 在目标系统上启动gdbserver,其实就是在超级终端下或者minicom下启动gdbserver。这里将gdbserver放在宿主机的NFS设置的共享目录下/home/zzl,该目录挂载在目标板/work下。宿主机的ip为192.168.1.1,目标板的ip为192.168.1.33 超级终端或者minicom下 [root@localhost]cd /work [root@localhost]./gdbserver 192.168.1.1:1234 hello 出现提示: 这时切换到宿主机的控制台,运行 [root@localhost] arm-softfloat-linux-gnu-gdb hello (gdb) target remote 192.168.2.33:1234 出现提示: /******************************************************* 1. 将gdbserver或者arm-linux-gdbserver ftp到开发板上,使之可以运行。 2. 开发板上的hello文件可能是运行arm-linux-strip命令后的文件,size很小,在Linux主机上不能用strip命令生成的hello文件,使用原始的hello文件。
对于GDBServer出现的问题 1. GDBServer调试时出现packet error问题。 主要是虚拟机与目标机的网络连接要经过windows,数据包容易丢失。换到Linux系统下则恢复正常。 |
|
感谢原创作者 | |