![250cb376b69037af5b0700dcc83e92aa.png](https://img-blog.csdnimg.cn/img_convert/250cb376b69037af5b0700dcc83e92aa.png)
大家好,我是兔子。
是一个嵌入式软硬件工程师。
正在从单片机开发转岗Linux开发。
这次教大家如何通过NFS给开发板传输文件。
使用NFS,调试会很方便,需要频繁的通过pc和开发板之间通信,将修改好的文件传输到开发板中运行调试。
同时,调试内核时,也可以通过u-boot。使用nfs将内核直接加载到开发板的SDRAM/DDR中,直接运行内核而不用更新NAND里的内核。等内核调试差不多,再下载到NAND中。
1.NFS服务简介
NFS 就是 Network FileSystem 的缩写,最早之前是由sun 这家公司所发展出来的。 它最大的功能就是可以透过网络,让不同的机器、不同的操作系统、可以彼此分享个别的档案 (share files)。所以,你也可以简单的将他看做是一个文件服务器 (file server) 呢!这个 NFS 服务器可以让你的 PC 来将网络远程的 NFS 服务器分享的目录,挂载到本地端的机器当中, 在本地端的机器看起来,那个远程主机的目录就好像是自己的一个磁盘分区槽一样 (partition)!使用上面相当的便利!
2.虚拟机安装NFS服务
嵌入式Linux调试,是需要虚拟机和开发板都开启了NFS功能的,并且通过网络来通信。
(开发板上使用到的是网口,所以使用服务时,需要用网线将开发板和电脑相连)
开发板默认以及安装了NFS服务,所以我们就需要给虚拟机安装NFS服务。
1)进入虚拟机,并保证虚拟机可以连接外网。
先使用虚拟机自带的网络浏览器,打开一个国内网站,看是否可以进入。
![2e68d9473a07999c69087a1d6f41540c.png](https://img-blog.csdnimg.cn/img_convert/2e68d9473a07999c69087a1d6f41540c.png)
能进入,表示能连接外网。
![7a7b126ee2f00f8e22efb89c48b7b6b0.png](https://img-blog.csdnimg.cn/img_convert/7a7b126ee2f00f8e22efb89c48b7b6b0.png)
如果不能进入,则检查一下虚拟机的配置。
![06e2c2ffb57564e2ddf204f980251c3e.png](https://img-blog.csdnimg.cn/img_convert/06e2c2ffb57564e2ddf204f980251c3e.png)
由于我的笔记本只有WIFI,没有网口。(使用WIFI上外网)
故将网络设置为NAT模式,即和PC机的windows共享WIFI网络。
![c3aeda6b01ce2725ee7f477f5bf59da1.png](https://img-blog.csdnimg.cn/img_convert/c3aeda6b01ce2725ee7f477f5bf59da1.png)
这样,再用浏览器验证一下,就可以上外网了。
2)下载NFS服务
在虚拟机里,按Crtl+Alt+T,进入终端。
在终端里输入命令sudo apt-get install nfs-kernel-server
表示下载并安装NFS服务。
并输入虚拟机的密码。我的虚拟机的密码为123456
![f8710db5810f32f73a3e1530ef22ba24.png](https://img-blog.csdnimg.cn/img_convert/f8710db5810f32f73a3e1530ef22ba24.png)
可以看到,在输入安装NFS指令,并输入密码后,弹出来一堆打印数据,表示正在下载并安装。
有遇到选择的地方,输入Y即可。
3)配置NFS共享文件夹
我们需要修改NFS配置文件,配置共享文件夹的路径。
该配置文件路径为/etc/exports
使用sudo vi /etc/exports命令,打开该文件。
![5a946612ebfb10a21e035fcc680b34f2.png](https://img-blog.csdnimg.cn/img_convert/5a946612ebfb10a21e035fcc680b34f2.png)
在最后面,添加一行
/work/nfs_root *(rw,sync,no_root_squash)
表示共享文件夹的路径,以及权限。
(在vi界面里,先输入i进入编辑模式。编辑完后,使用esc退出编辑模式,并输入:wq保存文件并退出)
vi编辑器的用法,可以移步教程2
兔子MCU:从51单片机到Linux shell基本指令及hello world编写(教程2)zhuanlan.zhihu.com![76b5dc3ae37697fd8335e4f7d00fc112.png](https://img-blog.csdnimg.cn/img_convert/76b5dc3ae37697fd8335e4f7d00fc112.png)
![d15d597681d141e1510b38487500972d.png](https://img-blog.csdnimg.cn/img_convert/d15d597681d141e1510b38487500972d.png)
然后,进入根目录下的,新建work文件夹,在work文件夹下,再新建nfs_root文件夹。
就可以了。(兔子提供的虚拟机,已经组建好了NFS服务,可以移步链接去了解)
兔子MCU:从51单片机到Linux 虚拟机搭建(教程1)zhuanlan.zhihu.com![76b5dc3ae37697fd8335e4f7d00fc112.png](https://img-blog.csdnimg.cn/img_convert/76b5dc3ae37697fd8335e4f7d00fc112.png)
![1166498ecd020654549f2f806ce15579.png](https://img-blog.csdnimg.cn/img_convert/1166498ecd020654549f2f806ce15579.png)
![986fedad6c6bd2fd4de47a5a41b1b963.png](https://img-blog.csdnimg.cn/img_convert/986fedad6c6bd2fd4de47a5a41b1b963.png)
4)重启NFS配置
这样,NFS服务就配置好了,需要重启一次,更新NFS的配置。
输入sudo /etc/init.d/nfs-kernel-server restart重启配置。
(如果不重启,配置不会生效)。
![7f619d3e4cdea8c1ad573961292145af.png](https://img-blog.csdnimg.cn/img_convert/7f619d3e4cdea8c1ad573961292145af.png)
这样,虚拟机端的NFS已经设置好。(设置好后,以后使用虚拟机无需再次配置)。
3.开发板和虚拟机网络通信
我们将开发板和电脑通过网线相连,测试一下网络是否连接。
1)开发板查询ip地址。
Ifconfig
![4687ddc3b91cb9a3db7e29d9a9d74dfe.png](https://img-blog.csdnimg.cn/img_convert/4687ddc3b91cb9a3db7e29d9a9d74dfe.png)
可以看到,开发板的ip是192.168.1.136,网关192.168.1.255。
2)虚拟机查询ip地址
![4a201f70da9875b538c1c9f8b036e1b8.png](https://img-blog.csdnimg.cn/img_convert/4a201f70da9875b538c1c9f8b036e1b8.png)
由于兔子的笔记本没有网口,外接了一个USB转网口。
可以看到,虚拟机的网口ip为192.168.1.101,网关是192.168.1.255
虚拟机和开发板ip不冲突,且都在同一个网段。表示网络设置无问题。
3)测试网络通信
在开发板上,使用ping命令,测试网络是否OK。
![58a016f59ec6c3f3fe82b1e86264b7c8.png](https://img-blog.csdnimg.cn/img_convert/58a016f59ec6c3f3fe82b1e86264b7c8.png)
可以看到开发板和虚拟机之间网络通信成功。
4.开发板挂载NFS
1)虚拟机的NFS共享文件夹新建一个文件
我在刚才设置的共享文件/work/nfs_root下,新建了一个名叫NFS_test的文件。
![00fcd7c8ceaaa441ce8dcc05aab99704.png](https://img-blog.csdnimg.cn/img_convert/00fcd7c8ceaaa441ce8dcc05aab99704.png)
2)开发板挂载NFS文件系统
在开发板里,输入
mount -t nfs -o nolock,vers=2 192.168.1.101:/work/nfs_root /mnt
![9849f589a7697c3e0551d23f86e46904.png](https://img-blog.csdnimg.cn/img_convert/9849f589a7697c3e0551d23f86e46904.png)
表示虚拟机的ip是192.168.1.101,将虚拟机的NFS共享目录/work/nfs_root挂载到开发板的/mnt目录下。
3)查看开发板的/mnt目录
![e7fffc0718fa89c5a260750a7556ee67.png](https://img-blog.csdnimg.cn/img_convert/e7fffc0718fa89c5a260750a7556ee67.png)
可以看到,虚拟机的文件,已经在开发板里有显示了。
说明NFS共享文件成功。我们可以对这个共享文件进行操作。
比如拷贝,编辑,删除,运行等。
至此,NFS功能已经实现。
后续调试程序,可以将需要上传到文件/程序。拷贝到虚拟机的/work/nfs_root目录。
在开发板上就可以进入挂载目录/mnt,可以直接可以使用。
![0178577a35eae888225660d2a4272a60.png](https://img-blog.csdnimg.cn/img_convert/0178577a35eae888225660d2a4272a60.png)