通过在虚拟机搭建一个nfs,可以让板子直接连接虚拟机上的指定文件夹,并访问里面的内容。

首先需要安装nfs,安装nfs需要虚拟机联网,联网的方式有两种,net和桥接。网上有很多方法介绍,这里简单介绍一下桥接的方式。

一般我都是连接无线网络。使用的是ubuntu14.04,以此为背景。

VMWARE编辑->虚拟网络编辑器->更改设置。选择第一个VMnet0,选择桥接模式,并选择自己电脑的无线网卡。

虚拟机启动NFS报unknown operation starts 虚拟机安装nfs_服务器


设置完成后保存配置。

进入ubuntu控制台下,进入路径:/etc/network,打开文件interfaces。

修改文件为

虚拟机启动NFS报unknown operation starts 虚拟机安装nfs_服务器_02


既把eth0中的静态ip改为动态的。然后保存退出。

/etc/init.d/networking restart //重启网卡

reboot

改完之后重启下ubuntu。在去尝试ping一下www.baidu.com,正常情况是能连接上的。

不过如果ip改成动态的,板子和虚拟机之间的通信似乎是不行了,尝试了几次没有成功,应该是因为设备不在同一个局域网了。

虚拟机启动NFS报unknown operation starts 虚拟机安装nfs_重启_03


联网成功后使用如下命令安装nfs服务程序及客户端程序,apt会自动安装nfs-common、rpcbind等13个软件包。如果是root用户,可以省略sudo

sudo apt install nfs-kernel-server

接下来要建立用于文件交互使用的文件夹这个文件夹可以自己随意建立。记住路径就好。
我建立的文件夹路径:/zhaoguanfeng/nfs
有时候需要修改新建的文件夹的权限。可以使用chmod命令

chmod 777 /zhaoguanfeng/nfs

当然也不是一定要修改文件夹的权限。
建立好之后,打开文件/etc/exports
在exports下添加刚才创建的文件夹路径,以及相应的权限信息

虚拟机启动NFS报unknown operation starts 虚拟机安装nfs_ubuntu_04

/zhaoguanfeng/nfs *(rw,sync,no_root_squash,no_subtree_check)

“/zhaoguanfeng/nfs”是存放nfs文件系统的路径;“*”表示所在的网段都可以共享;“rw”表示nfs文件系统允许读写;“sync”表示修改都会同步到nfs服务端,否则只是会暂存在本地内存;

接下来将nfs文件夹路径导出

exportfs -av

虚拟机启动NFS报unknown operation starts 虚拟机安装nfs_重启_05


(控制nfs运行状态的所有指令)

虚拟机启动NFS报unknown operation starts 虚拟机安装nfs_重启_06

配置完成重启nfs服务器

sudo /etc/init.d/nfs-kernel-server restart

以下命令查看nfs运行状态,在使用nfs之前最好看以下,确定nfs是在运行的,免得连接不上。

sudo /etc/init.d/nfs-kernel-server status

这样nfs服务器就配置完成了。但是虚拟机和板子还是无法连接。我这里的问题主要是因为虚拟机为了联网连接到了无线网卡上,板子是用网线连接电脑的,我想应该是连接在了有线网卡上,所以两者之间都不在同一个局域网络下,自然nfs之间也挂载不上。所以接下来需要把虚拟机连接到有限网卡上(当然虚拟机连接到了有线网卡上之后就连不了网了)。重复最开始的操作修改虚拟机网卡。并重新设置interfaces中的dhcp为static,修改eth0的ip,子网掩码,网关。并重启虚拟机。

虚拟机启动NFS报unknown operation starts 虚拟机安装nfs_ubuntu_07


虚拟机启动NFS报unknown operation starts 虚拟机安装nfs_服务器_08


修改板子的ip,将其改到和虚拟机ip同一个网段下。

我的板子修改ip和在虚拟机下修改ip一样。也是在/etc/network/interfaces中修改eth0的信息。修改完后重启设备。

虚拟机启动NFS报unknown operation starts 虚拟机安装nfs_ubuntu_09

之后就可以使用如下语句运行mount挂载nfs。和板子挂载的时候,要加-o nolock.末尾的/mnt/nfs路径是在板子中建立的一个文件夹路径。用于和虚拟机的nfs文件夹连接。这个文件夹一定要创建。

mount -t nfs -o nolock 192.168.1.141:/zhaoguanfeng/nfs /mnt/nfs

umount卸载nfs

umount /mnt/nfs

挂载之前可以用板子先ping一下虚拟机。挂载好之后,就可以在windows下编板子的程序,使用虚拟机去编译写好的程序,将编译好的文件通过nfs传递给板子,板子再去执行。需要注意的是在编辑makefile的时候,使用的交叉编译工具链要使用板子对应的工具链,而不是gcc,不然生成的文件是不能在板子上运行的。