在嵌入式linux开发中,nfs还是比较常用的,通过nfs可以讲开发板程序挂载到宿主机上,更加方便开发。
我们来看看如何安装和使用nfs,一般在ubuntu中默认没有安装nfs,需要手动安装一下
$ sudoapt-get install nfs-kernel-server
上述命令默认也会安装nfs客户端,所以我们可以直接在宿主机上既做服务器,又做客户端来测试一下nfs功能。安装之后,我们需要设置一下nfs,都有什么需要设置呢?首先那个文件夹作为共享文件夹的,然后谁可以访问这个共享文件夹呢?共享文件夹有什么权限呢?
我们进入/etc/exports文件
添加
/nfs/rootfs *(rw,sync,no_subtree_check,no_root_squash)
/nfs/rootfs 共享的目录
* 表示任何客户端都可以连接我(可以设置为特定的 比如192.168.1.100)
rw 共享目录可读可写
sync: 将数据同步写入内存缓冲区与磁盘中,效率低,但可以保证数据的一致性;
no_subtree_check :即使输出目录是一个子目录,nfs服务器也不检查其父目录的权限,这样可以提高效率;
no_root_squash:来访的root用户保持root帐号权限;
基本的设置就是这些了。我们重启一下nfs服务器
$ sudoservice nfs-kernel-server restart
或
$sudo /etc/init.d/nfs-kernel-serverrestart
我们来简单测试一些nfs服务器
mount [-t vfstype] [-o options] device dir
mount 的用法,-t表示挂载文件系统 nfs表示挂载nfs文件系统
我的IP是192.168.43.143 将这台主机的/home/yuming/nfs/rootfs 挂载到/mnt下,在/mnt下创建文件并输入“hello world”,然后再cat一下挂载目录下的hello文件。
开发板与宿主机通过NFS连接,有时候会会出现下列问题:connection refused
nfs mount 默认选项包括文件锁,依赖于portmap提供的动态端口分配功能。
解决方法:kill 文件锁(lockd)或者mount -o nolock
于是尝试mount -o nolock -t nfs 192.168.43.143:/home/yuming/nfs/rootfs /mnt,正常工作。