NFS在信息传送中依赖RPC协议,NFS服务端需要安装rpcbind和nfs-utils,客户端只需要安装 nfs-utils。
交叉编译比x86上编译复杂一些,主要是交叉编译环境不能使用软件仓库中的程序,需要下载依赖库的源码,在交叉编译环境编译、安装后才能使用。
rpcbind依赖libtirpc;nfs-utils依赖libtirpc、libevent、device-mapper
先编译这些依赖库,./configure指定交叉编译参数,其中arm-hisiv400-linux-gcc是个人使用的Hi3536芯片提供的SDK:
./configure CC=arm-hisiv400-linux-gcc --host=arm-linux prefix=/usr/arm/xxx
其中device-mapper执行./configure 会提示” ../lib/ioctl/libdevmapper.so: undefined reference to `rpl_malloc'”,处理方法:在configure文件注释掉#define malloc rpl_malloc
这些依赖库make&&make install之后,编译rpcbind和nfs-utils时加上他们的lib和include目录
rpcbind:
./configure CC=arm-hisiv400-linux-gcc --host=arm-linux LDFLAGS="-L/usr/arm/tirpc/lib" CPPFLAGS="-I/usr/arm/tirpc/include/tirpc" --with-systemdsystemunitdir=no prefix=/usr/arm/rpcbind
这里禁用了systemd。如果报错”No package 'libtirpc' found”,在PKG_CONFIG_PATH增加tirpc的pkgconfig目录:
export PKG_CONFIG_PATH=/usr/arm/tirpc/lib/pkgconfig:$PKG_CONFIG_PATH
nfs-utils编译:
./configure CC=arm-hisiv400-linux-gcc --host=arm-linux LDFLAGS="-L/usr/arm/tirpc/lib -L/usr/arm/event/lib -L/usr/arm/devmapper/lib" CPPFLAGS="-I/usr/arm/tirpc/include/tirpc/rpc -I/usr/arm/event/include -I/usr/arm/devmapper/include" --enable-gss=no --disable-uuid --without-tcp-wrappers --prefix=/usr/arm/nfs
configure通过之后执行make
程序移植到嵌入式对应目录后,启动rpcbind和rpc.nfsd,如果启动失败查看错误提示或系统日志/var/log/messages,根据错误提示处理