分类: 嵌入式
2010-04-08 17:49:13
参考http://pannsp.blog.163.com/blog/static/9202320089343724228/
软件准备:gdb-7.1.tar.bz2(目前最新版本)
可到下载
三个主要术语解释:
--target 指定编译后的文件针对的是什么目标板,一般设置为交叉编译器的前缀,比如–target=arm-linux, –target=mips-linux, –target的缺省值为i386-linux, 也就是PC机(ps:意思是配置脚本程序会把检测到的当前使用平台作为默认值)。
--host 指定编译后的文件的运行环境,取值可以是i386-linux或者交叉编译器的前缀,缺省为i386-linux(ps:意思同上)。
--prefix 指定要安装的目录。
把软件下载到当前的工作目录后,比如我下载的软件包放在~/download/目录。
1、解压缩软件包
cd ~/download tar xf gdb-7.1.tar.bz2
2、建立配置文件,编译、安装
1)gdb
cd gdb-7.1 ./configure --target=arm-angstrom-linux-gnueabi --prefix=/opt/toolchains/arm920t-eabi (ps:这里没有指定--host参数表示gdb是在当前使用的平台上运行的) make sudo make install
2)接着安装gdbserver
cd gdb/gdbserver ./configure --target=arm-angstrom-linux-gnueabi --host=arm-linux --prefix=/opt/toolchains/arm920t-eabi/gdbserver (ps:这里指定了gdbserver的运行平台是arm-linux) make sudo make install
问题解决:
我在安装gdbserver时出现了下面这些错误:
hostio.c: In function ‘require_filename’:
hostio.c:67: 错误: ‘PATH_MAX’未声明(在此函数内第一次使用)
hostio.c:67: 错误: (即使在一个函数内多次出现,每个未声明的标识符在其
hostio.c:67: 错误: 所在的函数内也只报告一次。)
hostio.c: In function ‘handle_open’:
hostio.c:266: 错误: ‘PATH_MAX’未声明(在此函数内第一次使用)
hostio.c:266: 警告: 未使用的变量‘filename’
hostio.c: In function ‘handle_unlink’:
hostio.c:431: 错误: ‘PATH_MAX’未声明(在此函数内第一次使用)
hostio.c:431: 警告: 未使用的变量‘filename’
make: *** [hostio.o] 错误 1thread-db.c: In function ‘thread_db_load_search’:
thread-db.c:661: 错误: ‘PATH_MAX’未声明(在此函数内第一次使用)
thread-db.c:661: 错误: (即使在一个函数内多次出现,每个未声明的标识符在其
thread-db.c:661: 错误: 所在的函数内也只报告一次。)
thread-db.c:661: 警告: 未使用的变量‘path’
make: *** [thread-db.o] 错误 1
上网搜索了一下,好像也没有什么好的解决方法,感觉这个问题与使用的交叉编译工具链相关,因为之前使用的另外一个交叉编译工具(也就是友善的那该死的arm-linux-4.3.2的交叉编译工具链)并没有出现这个问题。
就算方法不好,问题还是得解决的,错误提示的意思很明显,就是PATH_MAX常量没有定义,那就给它定义一个值好了。根据常量的名字,这个常量貌似是定义允许文件路径的长度的。
在出现错误的源文件的开头(比如上面的hostio.c、thread-db.c)添加
#define PATH_MAX 4096
保存文件,继续编译,OK。
把gdbserver文件(具体的文件名是/opt/toolchains/arm920t-eabi/gdbserver/bin/arm-linux-gdbserver)拷贝到开发板的系统中的/usr/bin目录就可以了(ps:给它改个短的名字,比如就改成gdbserver好了)。