下载portmap以及nfs-utils源码包,用交叉编译器进行编译:
configure portmap :./configure CC=交叉编译器的路径 –host=arm-linux
configure nfs-utils :./configure CC=XXXX –host=arm-linux –disable-gss
中间会遇到很多问题,缺少各种lib文件,解决方法是下载这些lib的源码包,同样用交叉编译器编译得到.a或者.so库文件,放到工作目录或者交叉编译器的lib中。configure文件中的一些变量也需要修改,比如libwrap = -lwrap就应该改为libwrap=libwrap.a,最重要的是放对目录。注意查看config.log文件的错误信息,比如libwrap缺少某个头文件就应该将这个头文件加入include文件夹中。
configure portmap之后,将portmap拷入嵌入式文件系统的/usr/local/bin/下即可使用portmap start启动portmap服务。用rpcinfo -p 也可以看到portmap使用了111端口。
configure nfs之后,就开始:$make
$make DESTDIR=/home/jellyjar/arm-nfs install(注意不可以使用install strip,交叉编译器无法删除debug信息)
这之后在目标文件夹arm-nfs下生成如下结构的文件:
root@www.linuxidc.com:~/桌面/dragon_arm_nfs$ ls
sbin usr var
root@www.linuxidc.com:~/桌面/dragon_arm_nfs$ ls sbin
mount.nfs mount.nfs4 umount.nfs umount.nfs4
root@www.linuxidc.com:~/桌面/dragon_arm_nfs$ ls usr/sbin
exportfs rpcdebug rpc.mountd rpc.statd sm-notify nfsstat rpc.idmapd rpc.nfsd showmount start-statd
编译的nfs源码包与apt-get install下载的不一样,aptget下载的dev包都是已经编译好的,无法再次使用交叉编译器编译,。在嵌入式下,nfs的启动很特殊。讲dragon-arm-nfs文件拷贝入嵌入式linux文件系统后,执行如下一连串命令即可启动nfs:
portmap start
切换到dragon_arm_nfs/usr/sbin下执行: ./rpc.statd
./rpc.nfsd(这2步可能不成功,按照错误提示添加/var/lib/nfs文件夹即可)
./rpc.mountd
与pc机上的nfs不同,可能是由于编译器的关系,嵌入式nfs基于mount,但是mount 192.168.1.153:/nfs/nfsServer /home/nfsclient时mount无法自己调用nfs,必须到dragon_arm_nfs/sbin中使用mount.nfs来远程挂载: ./mount.nfs 192.168.1.153:/nfs/nfsServer /home/nfsClient -w。此时到服务器端showmount -a,即可发现挂在成功啦!大功告成!