嵌入式 Linux入门 环境篇第五课,搭建 NFS 环境 ...... by 矜辰所致
我们在前面的 Linux 入门环境篇中,开发环境基本搭建好了,但是为了方便后续的学习开发,我们还得学会使用网络共享文件夹。
实现网络共享文件夹的方式,一般有 NFS 和 TFTP 两种方式。
所以本文就介绍一下 在 Ubuntu 上搭建 NFS 服务以及在 开发板上挂载 Ubuntu 虚拟机中共享的 NFS 共享目录。
❤️ 嵌入式 Linux 入门 环境篇系列博文:
嵌入式 Linux 入门 环境篇(一、开发板初体验)
嵌入式 Linux 入门 环境篇(二、安装虚拟机 — 体验 Ubuntu 22.04)
嵌入式 Linux 入门 环境篇(三、开发板和 PC 的网络互通)
嵌入式 Linux 入门 环境篇(四、必备开发工具安装)
.
我是矜辰所致,尽量用心写好每一系列文章,不浮夸,不将就,认真对待学知识的我们,矜辰所致,金石为开!
NFS (Network File System 简称:NFS) 是 linux 系统和网络存储文件管理器。
能使使用者访问网络上别处的文件就像在使用自己的计算机一样。通过网络快速、无缝地共享文件。
简单来说就是:通过 NFS 我们可以在开发板上直接通过网络访问 Ubuntu 虚拟机上的文件,并且就相当于自己本地的文件一样,可以操作。
在我们进行嵌入式 Linux 开发的时候,我们是需要通借助 PC 进行程序的编译,编译完成以后才拷贝到开发板进行程序的运行,我们需要手动的将文件拷贝到 SD 卡,然后再将 SD 插至开发板上进行程序运行。
借助网络共享文件夹,我们每次修改编译以后的程序就无需手动的进行文件的拷贝。
比如,我们在 Ubuntu 上制作开发板的根文件系统,然后使用 NFS 来加载根文件系统到开发板的
DDR 上。
对于刚接触嵌入式 Linux 开发的新朋友来说,NFS、TFTP、FTP、SSH 这些概念往往会傻傻分不清楚,他们都与网络有关,但是用途又各有不同,而且往往嵌入式 Linux 基本的开发环境,这些东西又是必须的。
所以在本文中,我们来简单的理一理他们各自的用途。
对于 SSH 与 FTP ,我们其实在环境篇前面几篇文章中已经讲过了,在文章:
嵌入式 Linux 入门 环境篇(四、必备开发工具安装)
中其实已经比较过 SSH 与 FTP 了:
至于本文我们要将的 NFS 和下一篇文章要将的 TFTP 其实是类似的东西:
NFS 是网络文件系统,上面我们介绍过,通过网共享文件,将东西下载到 DDR 中。
TFTP 是 TCP/IP 协议族中的一个用来在客户机与服务器之间进行简单文件传输的协议 ,也可以实现网络挂载。
在我们的嵌入式 Linux 开发中,可以使用 NFS 和 TFTP 通过网络来挂载 PC 端的共享文件。
我们注意到 FTP 与 TFTP 都是文件传输协议,那么他们有啥区别呢?
只需要简单记住 2 点:
1、交互使用 FTP(比如 windows 与 Ubuntu 虚拟机文件交互)。 TFTP 允许仅单向传输的文件(开发板使用 TFTP 挂载 Ubuntu 虚拟机的文件)。
2、FTP 是完整、面向会话、常规用途文件传输协议。而 TFTP 用作 bones bare - 特殊目的文件传输协议。
当然他们的区别并不只有上面 2 点,这里我们把他们当成开发工具,只需要记住这两点就足以让我们区别他们。
这里说明一下,如果看过前面的文章,应该能够明白, NFS 有服务器端,也有客户端。 比如要使得 Ubuntu 虚拟机能够挂载 windows 主机上的网络文件,我们需要在 Ubuntu 上安装 NFS 客户端。
本文的目的是为了使得开发板能够通过网络访问 Ubuntu 下的共享文件,所以我们需要在 Ubuntu 下安装的是 NFS 服务器。
下面我们一步一步来进行。
在终端中使用sudo apt-get install nfs-kernel-server -y
命令安装 NFS 服务器。
等待安装完成即可。
创建一个文件夹,当做 NFS 的共享目录,并给予 NFS 目录可读可写可执行权限,如下图:
完成上述步骤,我们需要对 NFS 服务进行配置,我们需要修改/etc/exports
文件,在文件末尾添加上配置信息。
注意,需要使用 sudo
修改,然后使用 :wq!
保存退出,如下图:
上图中配置指令
*(rw,sync,no_root_squash)
的含义如下
:
*号 :表示允许所有的网络段访问共享文件夹
rw :表示访问者具有可读写权限
sync :表示将缓存写入设备中,可以说是同步缓存的意思,实时写入
no_root_squash :表示访问者具有 root 权限。
使用 sudo exportfs -arv
更新配置信息 :
或者使用 sudo /etc/init.d/nfs-kernel-server restart
指令重启 NFS 服务器:
接着使用showmount -e
查看 NFS 共享文件夹情况:
首先确保开发板与 Ubuntu 虚拟机的网络是可以相互 ping 通的,这个在前面的文章
嵌入式 Linux 入门 环境篇(三、开发板和 PC 的网络互通) 已经说明过:
我们可以使用showmount -e
指令在开发板查看主机的共享文件夹:
博主使用的正点原子的开发板内核应该是默认安装了 NFS 客户端,如果读者使用的是其他开发板,可能需要手动在开发板安装一下 NFS 客户端。
使用 sudo apt install nfs-common -y
指令安装 NFS 客户端。
使用
mount -t nfs -o nolock,nfsvers=3 192.168.2.139:/home/qzh/linux/nfs /mnt
命令进行挂载,如下图:
还是因为使用的开发板的问题,需要加上nfsvers=3
这个条件,其他的开发板视情况而定。
现在我们这个文件夹中是空的,没有任何文件,如下图:
我们在开发板上创建一个文件,可以在 Ubuntu 虚拟机中看到,如下图:
同样的我们在 Ubuntu 虚拟机中创建一个文件,也可以在 开发板中看到,如下图:
当然,在任一地方进行文件的改动,都可以实时的查看到:
使用 umount [挂载目录]
指令卸载挂载的 NFS 目录:
本文介绍了 NFS 的相关知识,也学习了开发板上如何挂载 PC 端 Ubuntu 虚拟机上的共享文件夹。
我们后期的学习中,会经常使用到网络文件共享的方式进行开发。
下一篇文章,我们还要来学习说明一下 TFTP 环境的搭建,当然对于新手来说,NFS 和 TFTP 知道其中一种方式就行了。
好了,本文就到这里,谢谢大家!