嵌入式 Linux NFS 环境搭建实战

3,314 阅读6分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第29天,点击查看活动详情

嵌入式 Linux入门 环境篇第五课,搭建 NFS 环境   ......  by 矜辰所致

前言

我们在前面的 Linux 入门环境篇中,开发环境基本搭建好了,但是为了方便后续的学习开发,我们还得学会使用网络共享文件夹。

实现网络共享文件夹的方式,一般有 NFS 和 TFTP 两种方式。

所以本文就介绍一下 在 Ubuntu 上搭建 NFS 服务以及在 开发板上挂载 Ubuntu 虚拟机中共享的 NFS 共享目录。

我是矜辰所致,尽量用心写好每一系列文章,不浮夸,不将就,认真对待学知识的我们,矜辰所致,金石为开!

一、NFS 简介

NFS (Network File System 简称:NFS) 是 linux 系统和网络存储文件管理器。

能使使用者访问网络上别处的文件就像在使用自己的计算机一样。通过网络快速、无缝地共享文件。

简单来说就是:通过 NFS 我们可以在开发板上直接通过网络访问 Ubuntu 虚拟机上的文件,并且就相当于自己本地的文件一样,可以操作。

那么为什么嵌入式 Linux 开发需要使用网络共享文件?

在我们进行嵌入式 Linux 开发的时候,我们是需要通借助 PC 进行程序的编译,编译完成以后才拷贝到开发板进行程序的运行,我们需要手动的将文件拷贝到 SD 卡,然后再将 SD 插至开发板上进行程序运行。

借助网络共享文件夹,我们每次修改编译以后的程序就无需手动的进行文件的拷贝。

比如,我们在 Ubuntu 上制作开发板的根文件系统,然后使用 NFS 来加载根文件系统到开发板的 DDR 上。

二、NFS、TFTP、FTP、SSH

对于刚接触嵌入式 Linux 开发的新朋友来说,NFS、TFTP、FTP、SSH 这些概念往往会傻傻分不清楚,他们都与网络有关,但是用途又各有不同,而且往往嵌入式 Linux 基本的开发环境,这些东西又是必须的。

所以在本文中,我们来简单的理一理他们各自的用途。

SSH 与 FTP

对于 SSH 与 FTP ,我们其实在环境篇前面几篇文章中已经讲过了,其实已经比较过 SSH 与 FTP 了:

在这里插入图片描述 在 Linux 中它们的用法,也可以查阅前面的几篇文章。

NFS 与 TFTP

至于本文我们要将的 NFS 和下一篇文章要将的 TFTP 其实是类似的东西:

NFS 是网络文件系统,上面我们介绍过,通过网共享文件,将东西下载到 DDR 中。

TFTP 是 TCP/IP 协议族中的一个用来在客户机与服务器之间进行简单文件传输的协议 ,也可以实现网络挂载。

在我们的嵌入式 Linux 开发中,可以使用 NFS 和 TFTP 通过网络来挂载 PC 端的共享文件。

FTP 与 TFTP

我们注意到 FTP 与 TFTP 都是文件传输协议,那么他们有啥区别呢?

只需要简单记住 2 点:

1、交互使用 FTP(比如 windows 与 Ubuntu 虚拟机文件交互)。 TFTP 允许仅单向传输的文件(开发板使用 TFTP 挂载 Ubuntu 虚拟机的文件)。

2、FTP 是完整、面向会话、常规用途文件传输协议。而 TFTP 用作 bones bare - 特殊目的文件传输协议。

当然他们的区别并不只有上面 2 点,这里我们把他们当成开发工具,只需要记住这两点就足以让我们区别他们。

三、搭建 NFS 环境

这里说明一下,如果看过前面的文章,应该能够明白, NFS 有服务器端,也有客户端。 比如要使得 Ubuntu 虚拟机能够挂载 windows 主机上的网络文件,我们需要在 Ubuntu 上安装 NFS 客户端。

本文的目的是为了使得开发板能够通过网络访问 Ubuntu 下的共享文件,所以我们需要在 Ubuntu 下安装的是 NFS 服务器。

下面我们一步一步来进行。

3.1 Ubuntu 安装 NFS 服务器

在终端中使用sudo apt-get install nfs-kernel-server -y 命令安装 NFS 服务器。

在这里插入图片描述

等待安装完成即可。

3.2 创建共享文件夹

创建一个文件夹,当做 NFS 的共享目录,并给予 NFS 目录可读可写可执行权限,如下图:

在这里插入图片描述

3.3 配置 NFS 服务

完成上述步骤,我们需要对 NFS 服务进行配置,我们需要修改/etc/exports 文件,在文件末尾添加上配置信息。

注意,需要使用 sudo 修改,然后使用 :wq! 保存退出,如下图:

在这里插入图片描述

上图中配置指令 *(rw,sync,no_root_squash) 的含义如下 : *号 :表示允许所有的网络段访问共享文件夹 rw :表示访问者具有可读写权限 sync :表示将缓存写入设备中,可以说是同步缓存的意思,实时写入 no_root_squash :表示访问者具有 root 权限。

3.4 更新查看配置信息

使用 sudo exportfs -arv 更新配置信息 :

在这里插入图片描述

或者使用 sudo /etc/init.d/nfs-kernel-server restart 指令重启 NFS 服务器:

在这里插入图片描述

接着使用showmount -e查看 NFS 共享文件夹情况:

在这里插入图片描述

3.5 开发板挂载 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 虚拟机中创建一个文件,也可以在 开发板中看到,如下图:

在这里插入图片描述

当然,在任一地方进行文件的改动,都可以实时的查看到:

在这里插入图片描述

卸载 NFS 目录

使用 umount [挂载目录] 指令卸载挂载的 NFS 目录:

在这里插入图片描述

结语

本文介绍了 NFS 的相关知识,也学习了开发板上如何挂载 PC 端 Ubuntu 虚拟机上的共享文件夹。

我们后期的学习中,会经常使用到网络文件共享的方式进行开发。

下一篇文章,我们还要来学习说明一下 TFTP 环境的搭建,当然对于新手来说,NFS 和 TFTP 知道其中一种方式就行了。

好了,本文就到这里,谢谢大家!