背景
在嵌入式开发中,通常需要在宿主机中进行交叉编译,得到可以在目标设备中运行的执行文件,最终将运行文件放置进目标设备中,完成部署。
一般的拓扑关系如上图,三者都连接在一个网络中:
- Server,用于编译,一般运行Linux系统;
- PC,使用串口连接嵌入式设备,方便调试,一般运行Windows系统;
- Embedded Device,目标设备;
如果在Server上编译生成了文件,要通过PC再部署到嵌入式设备上,那就会显得很麻烦了,那么有没有更好的方式呢?NFS的出现,便提供了一方便捷的方法,让嵌入式设备能访问服务器中的文件。
NFS介绍
NFS
是Network File System
的缩写,即网络文件系统,一种使用于分散式文件协定,功能是通过网络让不同的机器、不同的操作系统能够共享个人数据。
NFS
在文件传输过程中依赖于RPC
协议(Remote Procedure Call
,远程过程调用,是使客户端能够执行其他系统中程序的一种机制),NFS
本身没有提供信息传输的协议和功能,可以认为它是使用RPC
协议的一个程序。
NFS
服务器、RPC
、客户端三者交互的关系如下图:
NFS配置
- 安装
nfs-utils
、rpcbind
:
sudo yum y install nfsutils rpcbind
- 编辑
/etc/exports
配置文件,该文件默认是空的:
-
sudo vim /etc/exports
添加以下内容:/home/share *(rw,sync,no_root_squash)
第一部分:/home/share
代表共享目录
第二部分:允许访问的主机,可以是IP或者IP段,*表示通配符
第三部分:括号中的部分,rw
:可读可写;sync
:内存中数据写入磁盘;no_root_squash
:NFS客户端连接服务器时如果使用的是root权限,那么对服务器分享的目录来说,也拥有root权限,此项不安全。括号中逗号后边不需要空格,否则会报错:exportfs: /etc/exports:1: syntax error: bad option list
- 使配置文件生效
sudo exportfs -r
- 启动
rpcbing
和nfs
服务
sudo service rpcbind start
-
sudo service nfs start
如果需要查看一下是否已经启动nfs服务,可以使用:systemctl list-unit-files | grep nfs
- 启动
nfs
sudo systemctl start nfs
客户端挂载
通过Telnet进入客户端后,输入以下命令,即可完成挂载:
-
mount -t nfs -o nolock 10.31.32.39:/home/share /mnt
其中10.31.32.39
为服务器的IP地址,完成挂载后,进入/mnt
目录,就像进入服务器的/home/share
目录一样,从此为你打开了一扇便捷大门。