LV02-03-网络环境-03-NFS环境搭建

本文主要网络环境的搭建——NFS环境的相关笔记,若笔记中有错误或者不合适的地方,欢迎批评指正😃。

点击查看使用工具及版本
PC端开发环境 Windows Windows11
Ubuntu Ubuntu20.04.6的64位版本(一开始使用的是16.04版本,后来进行了升级)
VMware® Workstation 17 Pro 17.0.0 build-20800274
终端软件 MobaXterm(Professional Edition v23.0 Build 5042 (license))
Win32DiskImager Win32DiskImager v1.0
Linux开发板环境 Linux开发板 正点原子 i.MX6ULL Linux 阿尔法开发板
uboot NXP官方提供的uboot,NXP提供的版本为uboot-imx-rel_imx_4.1.15_2.1.0_ga(使用的uboot版本为U-Boot 2016.03)
linux内核 linux-4.15(NXP官方提供)
点击查看本文参考资料
分类 网址 说明
官方网站 https://www.arm.com/ ARM官方网站,在这里我们可以找到Cotex-Mx以及ARMVx的一些文档
https://www.nxp.com.cn/ NXP官方网站
https://www.nxpic.org.cn/NXP 官方社区
https://u-boot.readthedocs.io/en/latest/u-boot官网
https://www.kernel.org/linux内核官网
点击查看相关文件下载
分类 网址 说明
NXP https://github.com/nxp-imx NXP imx开发资源GitHub组织,里边会有u-boot和linux内核的仓库
https://elixir.bootlin.com/linux/latest/source 在线阅读linux kernel源码
nxp-imx/linux-imx/releases/tag/rel_imx_4.1.15_2.1.0_ga NXP linux内核仓库tags中的rel_imx_4.1.15_2.1.0_ga
nxp-imx/uboot-imx/releases/tag/rel_imx_4.1.15_2.1.0_ga NXP u-boot仓库tags中的rel_imx_4.1.15_2.1.0_ga
I.MX6ULL i.MX 6ULL Applications Processors for Industrial Products I.MX6ULL 芯片手册(datasheet,可以在线查看)
i.MX 6ULL Applications ProcessorReference Manual I.MX6ULL 参考手册(下载后才能查看,需要登录NXP官网)

前边我们已经可以实现开发板、windows和linux开发板互相ping通了,接下来我们了解一下在ubuntu搭建NFS环境。

一、 NFS 环境搭建

1.  NFS 简介

NFS ( Network File System ,网络文件系统),是由 SUN 公司研制的 UNIX 表示层协议( presentation layer protocol ),基于 UDP/IP ,使用 nfs 能够在不同计算机之间通过网络进行文件共享,能使使用者访问网络上别处的文件就像在使用自己的计算机一样。我们可以在 Ubuntu 上制作开发板的根文件系统,然后使用 NFS 来加载根文件系统到开发板的 DDR 上。

NFS 可以将远程的计算机磁盘挂载到本地,像本地磁盘一样操作,文件还是在服务器中,只是服务器将文件共享给了客户端,客户端实际并没有这些文件。就像我们使用的网盘一样,文件在网盘中,在本地的电脑中实际并不存在,但是我们可以查看这些文件。

2.  NFS 搭建

2.1 查看是否已安装

在终端执行以下命令:

1
dpkg -s nfs-kernel-server

若是没有安装的话则会有以下提醒:

1
2
dpkg-query: 系统没有安装软件包 nfs-kernel-server,因而没有相关的信息
使用 dpkg --info (= dpkg-deb --info) 来检测打包好的文件

2.2 安装 NFS

在终端执行以下命令:

1
sudo apt-get install nfs-kernel-server

2.3  NFS 共享目录

接下来我们创建一个目录用于 NFS 共享服务:

1
2
sudo mkdir -p /home/sumu/4nfs 
sudo chmod -R 777 /home/sumu/4nfs/

2.4  NFS 服务配置

在终端执行以下命令打开相关配置文件:

1
sudo vi /etc/exports

然后在文件的尾部添加以下内容:

1
/home/sumu/4nfs *(rw,sync,no_subtree_check,no_root_squash)
  • /home/sumu/4nfs 是 nfs 服务器的工作目录,即客户端要访问的文件需要放到该目录下。

  • * 表示允许所有的网络段访问。

  • rw 表示访问者具有可读写权限。

  • sync 表示将缓存写入设备中,可以说是同步缓存的意思。

  • no_subtree_check 如果共享 /usr/bin 之类的子目录时, NFS 不检查父目录的权限(默认)

  • no_root_squash 表示访问者具有 root 权限。

【注意】

(1) ubuntu17.10 之后的版本 nfs 默认只支持协议 3 和 4 ,但后续我们使用的 uboot(2013.01) 默认使用协议 2 ,所以需要在 /etc/default/nfs-kernel-server 文件末尾加一句如下内容:

1
RPCNFSDOPTS="--nfs-version 2,3,4 --debug --syslog"

然后重启 nfs 服务即可。

(2)配置文件权限的 () 里面不能有空格。

2.5 重启 NFS 服务

在终端执行以下命令:

1
2
3
sudo /etc/init.d/nfs-kernel-server restart
# 或者
sudo service nfs-kernel-server restart

【注意】在有的资料中看到以后每次重新打开 ubuntu 若要使用 nfs 都需要重启,在这里记录一下,后边遇到问题,可以首先尝试该种方法。

2.6 本地挂载与卸载共享目录

  • 挂载
1
sudo mount -t nfs localhost:/home/sumu/4nfs /mnt/nfs_temp/
  • 卸载
1
sudo umount /mnt/nfs_temp/

2.7 查看 NFS 共享目录

在终端执行以下命令:

1
showmount -e

若是前边配置没有问题,则会显示如下信息:

1
2
Export list for vm:
/home/sumu/4nfs *
点击查看可能出现的问题

执行这个命令的时候可能会有如下提示:

1
2
Command 'showmount' not found, but can be installed with:
sudo apt install nfs-common

此时我们按照提示安装相关服务即可:

1
sudo apt install nfs-common

2.8 检查 NFS 是否启动

1
sudo systemctl status nfs-server

若 NFS 服务已经启动,则会有以下提示信息:

1
2
3
4
5
6
7
8
9
10
11
12
13
● nfs-server.service - NFS server and services
Loaded: loaded (/lib/systemd/system/nfs-server.service; enabled; vendor pr>
Drop-In: /run/systemd/generator/nfs-server.service.d
└─order-with-mounts.conf
Active: active (exited) since Wed 2022-08-17 21:18:16 CST; 13min ago
Process: 8515 ExecStartPre=/usr/sbin/exportfs -r (code=exited, status=0/SUC>
Process: 8516 ExecStart=/usr/sbin/rpc.nfsd (code=exited, status=0/SUCCESS)
Main PID: 8516 (code=exited, status=0/SUCCESS)
CPU: 15ms

8月 17 21:18:16 vm systemd[1]: Starting NFS server and services...
8月 17 21:18:16 vm systemd[1]: Finished NFS server and services.

二、NFS功能测试

1. ubuntu本地测试

1.1 在共享目录创建测试文件

1
2
cd /home/sumu/4nfs  # 进入到服务器工作目录
sudo touch test.c # 创建一个新文件

创建的文件内容如下:

1
2
3
4
5
#include <stdio.h>
int main(int argc, const char* argv[])
{
return 0;
}

1.2 挂载NFS共享目录

1
2
3
4
5
6
7
8
cd ~       # 回到家目录

# 使用 nfs 挂载工作目录到 /mnt
sudo mkdir -p /mnt/nfs_temp
sudo mount -t nfs localhost:/home/sumu/4nfs /mnt/nfs_temp

# 查看是否挂载成功
ls /mnt/nfs_temp

若显示有 test.c文件,且内容如下:

image-20240829073436967

那么表示我们的 NFS 服务安装配置成功。

2. linux开发板测试

开发板中是正点原子出厂系统,肯定是有tftp功能的,但是其实我们经常会再uboot中使用tftp下载linux内核镜像,然后启动内核,一般来说官方的uboot和linux都应该是支持的。

2.1 开发板ip配置

按照上一节《LV02-03-网络环境-01-网络开发环境搭建》配置好uboot、开发板、windows的IP,使其三者可以互相ping通。三者的IP如下:

1
2
3
开发板 IP   : 192.168.10.109
虚拟机 IP : 192.168.10.108
电脑网口的 IP: 192.168.10.100

2.2 挂载共享目录到开发板

一般来说我们搭建 NFS 环境也是为了能将文件从 Ubuntu 传输到我们的 linux 开发板,当我们配置好 Linux 开发板和 ubuntu 的网络环境,两者之间互相可以 ping 通的时候,我们可以这样来实现文件的传输。

查看NFS服务器的共享目录:

1
showmount -e 192.168.10.108
image-20240831105141495

然后在开发板的终端中执行:

1
2
3
4
mkdir -p ~/nfs_temp # 创建临时挂载目录
mount -t nfs -o nolock,nfsvers=3 <Ubuntu_IP>:<Ubuntu_NFS_dir> ~/nfs_temp/
df # 查看挂载目录
umount ~/nfs_temp/ # 卸载挂载目录

这样我们便可以将 ubuntu 中的 Ubuntu_NFS_dir 目录也就是 NFS 共享目录下的文件挂载到 Linux 开发板的 ~/nfs_temp/ 中,我们可以直接在 ~/nfs_temp/ 中拷贝我们需要的文件。例如我们在终端执行:

1
2
3
4
mkdir -p ~/nfs_temp
mount -t nfs -o nolock,nfsvers=3 192.168.10.108:/home/sumu/4nfs ~/nfs_temp
df # 查看挂载目录
ls ~/nfs_temp

若是挂载成功,那么便会有以下信息:

image-20240829074322114

中间有一次目录中什么也没有是因为我之前挂载过,但是吧目录删掉了,也把服务器的文件删了,重新添加就好了。

3. windows挂载测试

3.1 启动windows的NFS服务

  • (1)【控制面板】→【程序】→【启用或者关闭Windows功能】
image-20230718225611215
  • (2)【勾选NFS服务】→【确定】
image-20230718231756685
  • (3)重启系统
image-20230718230118726

3.2 挂载nfs目录

  • (1)【打开文件资源管理器】→【映射网络驱动器】
image-20230718231923207
  • (2)【选择驱动器编号】→【输入地址】
image-20240829074700842

地址的格式为:

1
\\<ubuntu_IP>\<nfs_dir_path>
  • (3)若是成功挂载则会有如下显示:
image-20240829074754722

我们打开看一下就会发现有如下文件:

image-20240829074854698