网络文件系统
网络文件系统,常被称为NFS(Network File System),它是一种非常便捷的在服务器与客户端通过网络共享文件的方式。
开启了NFS服务后,客户端访问服务器共享文件时如同访问本地存储器(SD卡/磁盘等等)上的文件一样,在嵌入式开发时,我们常常利用这个特性在主机上共享文件,主要有以下应用:
- 在NFS服务器上编译应用软件,客户端(开发板)通过NFS访问并运行应用程序进行测试。
- 把NFS作为根文件系统来启动
至于为什么这样应用,服务器端的硬件相比开发板更加好,有时候开发板的硬件条件不能够编译软件是可以用服务器端来编译,一方面提高开发效率,还有一方面节省开发板的空间。
NFS环境搭建
开发主机(Ubuntu18.04)
连接到局域网
应用场景中开发主机和开发板需要通过网络互相访问,另外由于NFS文件系统暴露到公网需要处理很多安全问题,为简化操作,只把开发主机和开发板连接到局域网,即都使用网线把它们连接到同一个网段(还没学网络,不知道这个说法对不对,有错希望指出)。
开发主机的虚拟机网络配置改成“桥接网卡”:
互ping测试
开发板和主机连接好网络后,相互之间进行互ping测试,通过命令ifconfig查看网络接口的信息可以看到IP地址。
如果使用ifconfig命令提示找不到命令,使用如下命令安装:
sudo apt install net-tools
安装NFS服务
Ubuntu系统默认没有安装NFS服务,需要使用如下命令安装NFS服务端软件:
sudo apt install nfs-kernel-server
配置NFS
安装NFS服务后,虚拟机会新增一个/etc/exports文件(即/etc目录下名字为exports的文件),NFS服务根据它的配置来运行。
使用如下命令打开exports文件来配置:
sudo vim /etc/exports
在文件末尾(不能在文字后面接着,另起一行)添加如下语句:
# 以下内容是虚拟机要共享的文件夹,IP地址等等,根据实际环境进行修改
/home/gu/workdir *(rw,sync,no_root_squash)
创建共享目录
使用如下命令在主机(虚拟机)上创建共享文件目录:
mkdir /home/gu/workdir
更新exports配置
修改完/etc/exports文件并保存后,使用exportfs命令来更新配置:
sudo exportfs -arv
查看NFS共享情况
使用showmount -e可查看当前NFS服务器的加载情况,具体如下图:
开发板安装NFS客户端
开发主机开启NFS服务后,还需要在开发板安装NFS客户端,让开发板使用NFS服务。
使用如下命令进行安装:
sudo apt install nfs-common -y
查看NFS服务器共享目录
安装好NFS客户端后在开发板上执行showmount -e
+“NFS服务器IP”命令,不同网络环境下,NFS服务器(开发主机)IP可能不一样,以实际情况为准。
如果显示出的结果有之前在开发主机上设置好的共享文件路径,则表示成功。
临时挂载NFS文件系统
在开发板使用以下命令挂载NFS服务器的共享目录到开发板/mnt目录下:
sudo mount -t nfs 主机IP:/home/gu/workdir /mnt
以上命令使用的各个参数如下:
- -t nfs:指定挂载的文件系统格式为nfs。
- 主机IP:指定NFS服务器的IP地址。
- /home/gu/workdir:指定NFS服务器的共享目录。
- /mnt:本地挂载目录,即要把NFS服务器的共享目录映射到开发板的/mnt目录下。
如果挂载成功,终端不会有输出,Linux的哲学思想是“没有消息便是好消息”。
挂载只是临时的,开发板在重启后需要重新使用命令挂载该NFS目录才能访问。
取消挂载
命令如下:
# 以下命令在开发板上运行
sudo umount /mnt