注意:首先要确保虚拟机和开发板之间可以互相访问,即配置桥接网卡,如果在同一个网段下但是无法ping通可能是防火墙的问题。可以查看博文解决:vmware虚拟机设置双网卡
注意:当前虚拟机版本为18.04,若虚拟机版本过高可能会出现其他问题,可以查看该博文解决:Ubuntu22.04虚拟机通过NFS连接开发板
什么是 NFS 协议?
- NFS(Network File System)称为网络文件系统, 实现了一个跨越网络的文件访问功能,如下图可以简要说明其原理。其整个架构为 Client-Server 架构,客户端和服务端通过 RPC 协议进行通信,
RPC 协议可以简单的理解为一个基于 TCP 的应用层协议,它简化命令和数据的传输
。NFS最大的特点是将服务端的文件系统目录树映射到客户端
,而在客户端访问该目录树与访问本地文件系统没有任何差别,客户端并不知道这个文件系统目录树是本地的还是远在另外一台服务器
设置NFS的好处
- 在 NFS 服务器上编译应用软件,客户端(开发板)通过 NFS 访问并运行应用程序进行测试。
- 把 NFS 作为根文件系统来启动
操作流程
1. 在虚拟机上安装NFS:
sudo apt-get install nfs-kernel-server rpcbind
2. 在虚拟机上新建文件夹,并开通访问权限
在用户目录下创建共享文件夹
cd /home/book
mkdir nfs_rootfs
修改etc/exports文件 ,添加最后一句话
sudo vim /etc/exports
-
前面的是可以被挂载的ubuntu文件地址,设置为用户目录下所有文件都可以被挂载,灵活性较大,也可以设置只挂载
home/book/nfs_rootfs
-
*表示局域网下的任务地址都可以挂载该虚拟机的共享文件夹,等同于
192.168.1.0/24
,如果要指定ip地址则按照如下格式替换:192.168.1.230/24
,其中24表示子网掩码255.255.255.0 -
rw: 表示客户机的权限,rw 表示可读写,具体的权限还受文件系统的 rwx 及用户身份影响。
-
async 则代表数据会先暂存于内存当中,而非直接写入硬盘
-
no_subtree_check:不检查子目录权限,默认配置。
-
no_root_squash:客户端使用 NFS 文件系统的账号若为 root 时,系统该如何判断这个账号的身份?预设的情况下,客户端 root 的身份会由 root_squash 的设定压缩成 nfsnobody, 如此对服务器的系统会较有保障。但如果你想要开放客户端使用 root 身份来操作服务器的文件系统,那么这里就得要开 no_root_squash 才行
重启服务
sudo /etc/init.d/nfs-kernel-server restart
3. 查看是否启动NFS服务
在虚拟机终端输入
ps -A | grep nfs
输出结果
- d表示服务
查看服务器端 NFS 共享情况
showmount -e
输出结果
4. 在开发板上安装NFS:
- 安装nfs客户端
sudo apt install nfs-common -y
5. 把ubuntu里面的某个目录挂载在开发板
5.1 查看 NFS 服务器共享目录
- 在开发板上执行
showmount -e +“NFS 服务器 IP
命令。注意在不同网络环境下,NFS 服务器 IP 可能不一样,以实际情况为准。例如
showmount -e 192.168.1.10
输出结果如下
5.2 临时挂载
mount -t nfs -o nolock,vers=3 192.168.xxx.xxx:/home/book/nfs_rootfs /mnt
- -t nfs:指定挂载的文件系统格式为 nfs。
- 其中ip地址是虚拟机的桥接网卡地址
5.3 长久挂载
- 设置开机自动挂载,
编辑 vi /etc/profile
文件 - 把上条指令输入到末尾 保存重启或直接执行:
source /etc/profile
5.4 取消挂载
- 当客户机在网络上无法找到 NFS 共享的目录时,如开发主机关机时,在 NFS 的客户机 的终端常常会输出一些提示,或在使用 ls 命令查看共享目录会导致长时间等待,这时可以对目录使用 umount 命令取消挂载,示例如下:
sudo umount /mnt
- 使用该命令时以要取消挂载的目录作为参数即可,没有输出表示执行正常。如果 在当前挂载的目录进行 umount 操作,会提示 “device is busy”。建议取消挂 载时,
先切换到家目录 “~”,在进行 umount 操作
。
其他文件共享方式
- 使用 FileZilla 在 在 Windows 和开发板之间传文件
- 使用共享文件夹,只能在windows和虚拟机之间
- 使用 TFTP 服务传输文件
-
在 Ubuntu 中执行以下命令安装 TFTP 服务:
sudo apt-get install tftp-hpa tftpd-hpa
然后,创建 TFTP 服务器工作目录,并打开 TFTP 服务配置文件,如下:
mkdir -p /home/book/tftpboot
sudo chmod 777 /home/book/tftpboot
sudo vim /etc/default/tftpd-hpa
在配置文件/etc/default/tftpd-hpa 中,添加以下字段:
TFTP_DIRECTORY="/home/book/tftpboot"
TFTP_OPTIONS="-l -c -s"
最后,重启 TFTP 服务:
sudo service tftpd-hpa restart
查看 tftp 服务是否在运行,运行如下命令,即可查看是否在后台运行。
ps -aux | grep “tftp”
-
开发板通过 tftp 传输文件
下载zImage文件,会直接下载在当前路径
tftp -g -r zImage 192.168.5.11
上传文件到ubuntu,成功不会有提示
tftp -p -l 1.txt 192.168.5.11
参考博文:
nfs网络文件系统挂载(虚拟机&开发板)
NFS 网络文件系统 介绍、安装与使用