移植Vim到Cavium

为了练手(也为了在Cavium下修改文件方便点),将vim交叉编译,移植到Cavium上。参考了网上两篇文件,再此记录下

下载两个源码包,一个是vim的,一个是它依赖的库

vim和ncurses:
百度云盘地址:https://pan.baidu.com/s/1aUvv1pyjC_tYhFFa8yJ-xw
密码:t27m

先对vim依赖的ncurses进行交叉编译

tar -xvf ncurses-5.8  
cd ncurses-5.8/  

然后在解压目录下建一个build.sh脚本,方便执行./configure配置命令

#! /bin/sh

./configure --prefix=/home/lizhong/MoveVIM/ncurses-5.8/output --host=mips64-octeon-linux-gnu CC=mips64-octeon-linux-gnu-gcc  --without-cxx --without-cxx-binding --without-ada --without-manpages --without-progs --without-tests --with-shared  

注意:–prefix是需要编译生成的文件的存放路径,–host是指定主机的系统,CC就是指定交叉编译器了,剩下的参数比较有针对性,可以通过./configure –help来查看相关说明

保存此文件,再提升下权限

chmod 777 build.sh  

执行

make      
make install    

可以看到在output目录下,生成了相关文件(动态链接库等):

[lizhong@localhost ncurses-5.8]$ cd output/
[lizhong@localhost output]$ ls
bin  include  lib  share  
[lizhong@localhost lib]$ ls -l
total 7244
-rw-r--r--. 1 lizhong lizhong  207140 Apr 17 17:58 libform.a
-rw-r--r--. 1 lizhong lizhong 1079288 Apr 17 17:58 libform_g.a
lrwxrwxrwx. 1 lizhong lizhong      12 Apr 17 17:58 libform.so -> libform.so.5
lrwxrwxrwx. 1 lizhong lizhong      14 Apr 17 17:58 libform.so.5 -> libform.so.5.8
-rwxrwxr-x. 1 lizhong lizhong  108435 Apr 17 17:58 libform.so.5.8
-rw-r--r--. 1 lizhong lizhong  101532 Apr 17 17:58 libmenu.a
-rw-r--r--. 1 lizhong lizhong  548440 Apr 17 17:58 libmenu_g.a
lrwxrwxrwx. 1 lizhong lizhong      12 Apr 17 17:58 libmenu.so -> libmenu.so.5
lrwxrwxrwx. 1 lizhong lizhong      14 Apr 17 17:58 libmenu.so.5 -> libmenu.so.5.8
-rwxrwxr-x. 1 lizhong lizhong   45387 Apr 17 17:58 libmenu.so.5.8
-rw-r--r--. 1 lizhong lizhong  766984 Apr 17 17:58 libncurses.a
-rw-r--r--. 1 lizhong lizhong 3846990 Apr 17 17:58 libncurses_g.a
lrwxrwxrwx. 1 lizhong lizhong      15 Apr 17 17:58 libncurses.so -> libncurses.so.5
lrwxrwxrwx. 1 lizhong lizhong      17 Apr 17 17:58 libncurses.so.5 -> libncurses.so.5.8
-rwxrwxr-x. 1 lizhong lizhong  424626 Apr 17 17:58 libncurses.so.5.8
-rw-r--r--. 1 lizhong lizhong   41714 Apr 17 17:58 libpanel.a
-rw-r--r--. 1 lizhong lizhong  213232 Apr 17 17:58 libpanel_g.a
lrwxrwxrwx. 1 lizhong lizhong      13 Apr 17 17:58 libpanel.so -> libpanel.so.5
lrwxrwxrwx. 1 lizhong lizhong      15 Apr 17 17:58 libpanel.so.5 -> libpanel.so.5.8
-rwxrwxr-x. 1 lizhong lizhong   18125 Apr 17 17:58 libpanel.so.5.8
lrwxrwxrwx. 1 lizhong lizhong      13 Apr 17 19:22 libtinfo.so -> libtinfo.so.5
lrwxrwxrwx. 1 lizhong lizhong      15 Apr 17 19:22 libtinfo.so.5 -> libncurses.so.5
lrwxrwxrwx. 1 lizhong lizhong      17 Apr 17 17:58 terminfo -> ../share/terminfo  

注意:这里需要做两个软连接文件(软连接,其实就是win下的快捷方式),在lib文件夹下,执行

ln -s libncurses.so.5 libtinfo.so.5  
ln -s libtinfo.so.5 libtinfo.so  

就放在lib文件夹下就好,后面编译vim的时候会找这两个文件

编译vim

下面就可以开始编译vim了,这个还是挺折腾的,进入vim解压出的目录

[lizhong@localhost MoveVIM]$ cd vim74/  

执行下面语句:

./configure --with-features=huge --disable-gui --without-x --disable-selinux --disable-acl --disable-gpm --enable-cscope --enable-sniff --enable-multibyte CC=mips64-octeon-linux-gnu-gcc CPPFLAGS=-I/home/lizhong/MoveVIM/ncurses-5.8/output/include/ncurses LDFLAGS=-L/home/lizhong/MoveVIM/ncurses-5.8/output/lib --host=mips64-octeon-linux-gnu vim_cv_toupper_broken=no vim_cv_tty_group=root vim_cv_tty_mode=0620 vim_cv_terminfo=yes vim_cv_tgetent=zero vim_cv_stat_ignores_slash=yes vim_cv_memmove_handles_overlap=yes vim_cv_getcwd_broken=no vim_cv_terminfo=yes --with-tlib=ncurses  

之前也写了这个的build.sh,但是一直报错,最后一点点排查问题,最后这个语句可以成功配置。简单说下这些配置参数(同样在./configure –hlep下也可以看到这些参数说明)
–with-features=huge#保留大部分特性编译
–disable-selinux#这个一定要加,因为在这个vim源码中没有selinux相关的代码,不加的话会编译出错
CC#指定交叉编译工具
–with-tlib=ncurses#指定库
PPFLAGS#指定库路径
LDFLAGS#指定库路径
–host#指定主机系统

配置完成后会生成config.mk等文件,不过ls是看不到的,如果需要清空配置,需要执行make distclean该条命令

编译:

make  

注意

按以上步骤进行交叉编译时,有一步会出现找不到某个头文件的错误(具体忘了是编译哪一个出问题了),原因在于那个头文件就在当前目录,而不在它指定的目录下,所以将那个出错的.c文件引用的头文件进行修改(改成#include “xxxx.h”)就可以正常编译了。

迁移

vim编译完成后,在该路径的src/文件夹下,可以看到vim。
下面,将编译好的vim以及一些依赖的文件移入Cavium开发机中,具体如下
1、将ncurses编译完成的output文件夹下,lib文件夹中的内容,全部拷贝到开发机的/usr/lib/目录下(需要注意的是拷贝至开发机下的文件权限会被改变,需要对比编译机下的文件进行权限修改。先提权限为775,再做软链接)

2、将ncurses编译完成的output文件夹下,share文件夹中的内容,全部拷贝到开发机的/usr/share目录下(这里可以不用改变权限)

3、再将vim编译完成后的,src中的vim可执行程序,拷贝到开发机的/usr/sbin目录下,并将其权限提升为777

4、注意,vim的运行需要一些动态链接库,所以需要配置环境变量,在/etc/profile中加入/usr/lib这个动态链接库的路径

5、最后将vim的配置文件拷贝到开发机的~/路径下,注意需要将名字改为.vimrc(最好找个“干净”的vimrc)

至此完成了vim的移植操作