移植GDB到Cavium

开发机上已经有gdb了,不过同事说不能用tui(文本用户界面)功能,不太方便,所以最好再移植个。其实关键还是使能tui,以及使能tui后需要ncurses库支持。中途遇到几个错误,其实都是引用的头文件路径问题而已(交叉编译过程的makefile一般是不会错的,所以最大的问题也就是依赖和路径问题,耐心看错误,结合搜索引擎,一般都能解决)。既然做了,就简单记录下

编译ncurses

跟vim一样,gdb也需要ncurses这个依赖库,在移vim的时候已经编译过了,所以这里就不再编译了,直接拿来用

cp -rf ~/MoveVim/ncurses-5.8/* ~/MoveGDB/ncurses-5.8/  

下载相应版本的gdb

gdb的下载可以到这里:
http://ftp.gnu.org/gnu/gdb/
因为板子上已经有7.6的了,所以我也就下了7.6的

wget http://ftp.gnu.org/gnu/gdb/gdb-7.6.tar.gz  

然后解压

tar -zxvf gdb-7.6.tar.gz  

进入解压目录,编写build脚本进行配置,生成Makefile

cd  
vim build.sh  
#build.sh中填入如下内容,通用部分CC、CPPFLAGS、LDFLAGS  
#! /bin/sh

./configure --with-features=huge --enable-shared --prefix=/home/lizhong/MoveGDB/gdb-7.6/output --enable-tui CC=mips64-octeon-linux-gnu-gcc CPPFLAGS=-I/home/lizhong/MoveGDB/ncurses-5.8/output/include/ncurses LDFLAGS=-L/home/lizhong/MoveGDB/ncurses-5.8/output/lib --host=mips64-octeon-linux-gnu --with-tlib=ncurses  

需要注意的是–enable-tui,因为我们主要是需要使用这个功能,所以要将它使能。之后执行该build脚本

chmod 777 ./build.sh
./build.sh  
#可以看见,已成功生成了Makefile,然后make  
make  

这里应该会遇到问题,说找不到xxx头文件,我的解决方案就是用find找到那个文件(不是在ncurses里,就是在gdb这边,两边都找下),后来发现是在ncurses里,那就把它们cp过来

cp /home/lizhong/MoveGDB/ncurses-5.8/output/include/ncurses/* /home/lizhong/MoveGDB/gdb-7.6/gdb/  

然后还需要做一些修改,因为之前这些头文件的引用不同,可能是绝对路径,也可能是相对路径,也可能因为没有宏定义而没有引用,反正就是该下报错的文件就可以了(不要惧怕源文件),这种东西出错(有坑)是正常的,大胆改就行,修改完后再次make

#先把之前生成的文件全删了。要先clean再distclean,否则就会先把Makefile删了,就没法make clean了  
make clean
make distclean
#再make  
make
make install  

最后搞定了,在./output/bin目录下可以看到gdb和gdbserver,之后将这两个文件拷贝到开发板的/usr/bin目录下,覆盖原文件,就OK了

注意:gdb是依赖一些动态库的,所以可能移植后还需要一些动态库,不过都在ncurses里面了,需要啥就移啥,然后再加入环境变量就可以了,这里就不细说了,如果按上一篇文章说的,已经移植过vim,那就已经有了那些动态库