由于最近在学习Linux系统和使用ZYNQ开发板进行摄像头数据采集的相关开发,用到了挂载的问题,一开始是使用TF卡进行挂载文件的,利用TF卡进行文件拷贝,然后放在开发板上进行挂载运行,速度还是相当快的,但是就是数据的拷贝比较麻烦,对于小的文件系统比较实用,但是大的文件系统就无能为力了,尤其是运行一个程序要使用相关的库文件调用起来很麻烦,所以使用网络挂载,在Linux系统中建立一个专门的文件夹进行目录共享,然后将所需要的目录放在里面,将其一块挂载到开发板的Linux中的一个文件夹,这样操作起来就方便快捷,就是对网络要求比较高。
下面简单介绍NFS以及他的用法。
NFS 是Network File System的缩写,即网络文件系统。一种使用于分散式文件系统的协定,由Sun公司开发,于1984年向外公布。功能是通过网络让不同的机器、不同的操作系统能够彼此分享个别的数据,让应用程序在客户端通过网络访问位于服务器磁盘中的数据,是在类Unix系统间实现磁盘文件共享的一种方法。
NFS 的基本原则是“允许不同的客户端及服务端通过一组RPC分享相同的文件系统”,它是独立于操作系统,允许不同硬件及操作系统的系统共同进行文件的分享。
NFS 文件系统的原理: 通过网络将 PCubuntuLinuxNFSserver 上的文件,mount 到开发板上,使得开发板操作这些远端文件,就像是
操作使用本地文件一样。简单一点说,就是在 PCubuntuLinuxserver 的 NFS 文件夹下,编译一个 Linuxapp 如 hello.c->hello,在开发板
上也能看的见 hello 文件,并且执行这个文件。这样我们在编写驱动的时候就不需要老是插拔 SD 卡了。
NFS的安装和配置:
sudo apt-get install portmap#这个客户端和服务器都需要,是网络传输协议。
sudo apt-get install nfs-kernel-server#在服务器上安装nfs,客户端不需要。
sudo apt-get install nfs-kernel-common #客户端要安装这个包
服务器端的配置:
输入命令"sudovim/etc/exports", 用 vim 打开 exports 文件。(当然也可以用其他的编辑命令,vi,gedit 等)
在该文件的末尾加上共享的文件位置,以及一些对文件的访问属性;
如:/home/nfs_server 192.168.11.*(rw,sync,no_root_squash)
其中/home/nfs_server表示要共享的目录 192.168.11.*表示要共享的网段地址,也就是说要共享的开发板一定要着这个网段下,也可以直接用*,这表示对所有网段共享,括号后面的是文件的访问属性
- all_squash:将远程访问的所有普通用户及所属组都映射为匿名用户或用户组(nfsnobody);
- no_all_squash:与all_squash取反(默认设置);
- root_squash:将root用户及所属组都映射为匿名用户或用户组(默认设置);
- no_root_squash:与rootsquash取反;
- anonuid=xxx:将远程访问的所有用户都映射为匿名用户,并指定该用户为本地用户(UID=xxx);
- anongid=xxx:将远程访问的所有用户组都映射为匿名用户组账户,并指定该匿名用户组账户为本地用户组账户(GID=xxx);
其它选项
- secure:限制客户端只能从小于1024的tcp/ip端口连接nfs服务器(默认设置);
- insecure:允许客户端从大于1024的tcp/ip端口连接服务器;
- sync:将数据同步写入内存缓冲区与磁盘中,效率低,但可以保证数据的一致性;
- async:将数据先保存在内存缓冲区中,必要时才写入磁盘;
- wdelay:检查是否有相关的写操作,如果有则将这些写操作一起执行,这样可以提高效率(默认设置);
- no_wdelay:若有写操作则立即执行,应与sync配合使用;
- subtree:若输出目录是一个子目录,则nfs服务器将检查其父目录的权限(默认设置);
- no_subtree:即使输出目录是一个子目录,nfs服务器也不检查其父目录的权限,这样可以提高效率;
保证开发板可以上网,然后进行文件挂载,如: