nfs在嵌入式开发中的使用场景:
1、使用nfs挂载ubuntu服务端目录方便文件传输和程序调试
2、uboot启动后,使用nfs读取kernel和挂载rootfs,方便kernel和rootfs调试
3、提取eMMC镜像时保存到nfs目录中,供产线离线烧录eMMC
ubuntu安装nfs服务端安装方法:
sudo apt-get install nfs-kernel-server nfs-common
修改文件/etc/exports,在最后添加一行:
/home/tangyc *(rw,sync,no_root_squash,no_subtree_check)
注意:上面/home/tangyc是我的$HOME目录,换成你自己的目录
重启服务:
sudo /etc/init.d/nfs-kernel-server restart
本地测试,运行:
showmount -e
Export list for tangyc-VirtualBox:
/home/tangyc *
上面已经可以看出nfs共享文件夹/home/tangyc生效
开发板端nfs
编译nfs工具
yocto下编译nfs-utils使用:
bitbake nfs-utils
编译目录在
tmp/work/aarch64-poky-linux/nfs-utils/2.1.1-r0/image
板子下要用到如下的文件:
/sbin/mount.nfs、/sbin/mount.nfs4、/usr/lib/libtirpc.so.*
文件系统要有以上文件
否则出现错误:
mount: /mnt: bad option; for several filesystems (e.g. nfs, cifs) you might need a /sbin/mount.<type> helper program.
也可以使用buildroot编译nfs-utils:
Target packages --->
Filesystem and flash utilities --->
[*] nfs-utils
将上面移植好的工具放到对应的目录下就可以挂载server端nfs目录了
开发板挂载NFS测试
开发板网线连接到主机ubuntu。ubuntu设置固定的IP地址192.168.2.2。开发板IP地址192.168.2.6,设置成同一网段并且可以相互ping通.
注意:开发板和pc机能相互ping通,说明物理连接没问题;如果ping不通虚拟机说明虚拟机有问题
在开发板端输入:
# mount -t nfs -o nolock 192.168.2.2:/home/tangyc/nfs /mnt
将主机端(192.168.2.2)共享目录/home/tangyc/nfs挂载到开发板的/mnt目录下,可以看到/mnt下已经能看到服务端文件了
卸载命令:
umount /mnt
如果mount出错:
mount.nfs: an incorrect mount option was specified
mount.nfs: Protocol not supported
说明协议不支持,查看下板子端nfs协议,如果是v4的
应该用(这里我们板子是v4的,所以有这个也能挂载上):
mount -t nfs -o nolock,nfsvers=4,vers=4 192.168.2.2:/home/tangyc/nfs /mnt
如果是v3要用:
mount -t nfs -o nolock,nfsvers=3,vers=3 192.168.2.2:/home/tangyc/nfs /mnt