上一星期整整弄了一个星期RPC中用到的portmap程序,结果还是没弄出来,
最后怀疑是内核问题
今天周一,决定给ARM 大换血,
原来的系统如下:
vivi + linux2.4.x + cramfs根文件系统
换成了:
vivi + linux2.6.14 + NFS根文件系统
其中NFS根文件系统是由busybox-1.16.0制作而成,在做这个根文件系统过程中,在busybox中的make menuconfig 中有一个RPC server的选项,看到这个,心中已经有一种预感,这次成了!!!!
换血完成后,把原来的portmap 程序拿出来,重新编译,还是有一堆问题,小心地一个个解决了,把编译的选项一个个试试,去掉其中一个,看编译能否通过,不行,再试下一个选项,不同的编译器,不同的portmap版本,编译过程出现的错误是不一样的,所以不好说,最好是先去掉pc上的portmap , 方法是sudo apt-get remove portmap ,,,,,, 用gcc,而不是arm-linux-gcc , 先在PC上编译成功了,在PC 上运行自己的portmap程序,当一切都通过了,再将编译器改变成arm-linux-gcc,编译ARM上运行的portmap,
编译成功的标志并不仅仅是编译通过,是能运行RPC服务程序,或者说,运行pmap_dump 或者rpcinfo -p 会有相应的提示,
如:
# ./pmap_dump
100000 2 tcp 111
100000 2 udp 111
805898569 1 udp 916
805898569 1 tcp 918
如果有以上的提示,那就说明移植成功了!!
只有当portmap正确运行了,运行RPC的服务程序才不会有以下的显示:
Cannot register service: RPC: Unable to receive; errno = Connection refused
unable to register (TESTPROG, TESTVERS, udp).
以下是几个有用参考资料:
请认真看以下这个资料,这个是非常详细的一个资料:
http://bbs.chinaunix.net/viewthread.php?tid=1119713
在这个资料中,按上面的做,绝对能将portmap编译成功,要注意,运行BUILD 脚本时,要这样运行 bash BUILD 否则BUILD时会出错的!!!
但我最终用的不是这个版本的,我用的是portmap_6.0
以下这个是英文版的:
http://www.tomsguide.com/us/how-to-nslu2-hack-pt2,review-297-3.html
一些错误的总结:
有时候会说
#include <tcpd.h> 找不到
解决办法是:
去下载一个包含tcpd.h的包,复制过来,最好是把tcp*.*的都复制过来,
如:tcp_wrappers_7.6.tar.gz 就有
然后错误的文件改成:
#include ”tcpd.h“
如果有以下这个错误:
: undefined reference to `__fini_array_start'
collect2: ld returned 1 exit status
这是Makefile 的编译选项 LDFLAGS += -pie 导致的,去掉这个选项就好了!!