LV09-01-环境搭建-01-TFTP与NFS

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

点击查看使用工具及版本
Windows windows11
Ubuntu Ubuntu16.04的64位版本
VMware® Workstation 16 Pro 16.2.3 build-19376536
SecureCRT Version 8.7.2 (x64 build 2214) - 正式版-2020年5月14日
Linux开发板 华清远见 底板: FS4412_DEV_V5 核心板: FS4412 V2
u-boot 2013.01
点击查看本文参考资料
参考方向 参考原文
------
点击查看相关文件下载
--- ---

一、TFTP环境搭建

1. TFTP简介

TFTPTrivial File Transfer Protocol,简单文件传输协议)是TCP/IP协议族中的一个用来在客户机与服务器之间进行简单文件传输的协议,提供不复杂、开销不大的文件传输服务,它的端口号为69。我们可以使用TFTP来加载内核镜像、设备树和其他较小的文件到开发板DDR上,从而实现网络挂载。

TFTP文件在服务器中,客户端将文件下载到本地,然后本地和服务器端都会有相同的这样一个文件。

2. TFTP搭建

2.1 查看是否已安装

在终端执行以下命令检查 tftp相关服务是否安装:

1
dpkg -s tftpd-hpa

2.2 安装和配置xinetd

  • 安装

在终端执行以下命令安装 xinetd

1
sudo apt-get install xinetd
  • 配置

这里我们直接用下边的命令打开xinetd.conf配置文件(不检查是否存在了,直接打开,没有的话就是空文件,配置完后边直接保存就可以了):

1
sudo vi /etc/xinetd.conf

打开后将文件修改为以下内容:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# Simple configuration file for xinetd
#
# Some defaults, and include /etc/xinetd.d/

defaults
{

# Please note that you need a log_type line to be able to use log_on_success
# and log_on_failure. The default is the following :
# log_type = SYSLOG daemon info

}

includedir /etc/xinetd.d

最后直接保存即可。

2.3 TFTP目录

接下来创建一个目录用作TFTP服务器的站点,在终端执行以下命令:

1
2
mkdir -p /home/hk/3tftp 
sudo chmod 777 /home/hk/3tftp/

2.4 安装配置相关服务

  • 安装 tftp-hpatftpd-hpa

在终端执行以下命令:

1
sudo apt-get install tftp-hpa tftpd-hpa
  • ftpd-hpa配置文件修改
1
sudo vi /etc/default/tftpd-hpa # 打开配置文件

修改为以下内容:

1
2
3
4
5
6
7
# /etc/default/tftpd-hpa

TFTP_USERNAME="tftp"
TFTP_DIRECTORY="/home/hk/3tftp"
TFTP_ADDRESS=":69"
# TFTP_OPTIONS="--secure"
TFTP_OPTIONS="-c -s -l"

只是修改了TFTP_DIRECTORY的值,后边改为我们自己创建的TFTP服务目录,后边客户端要下载的文件需要放到该目录下。

  • tftp配置文件修改

在终端执行以下命令打开相关配置文件,若没有xinetd.d这个目录,我们可以自己手动创建):

1
sudo vi /etc/xinetd.d/tftp

打开后,一般应该是新文件,我们添加如下内容:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
server tftp
{
socket_type = dgram
wait = yes
disable = no
user = root
protocol = udp
server = /usr/sbin/in.tftpd
server_args = -s /home/hk/3tftp -c
#log_on_success += PID HOST DURATION
#log_on_failure += HOST
per_source = 11
cps =100 2
flags =IPv4
}

【注意】server_args = -s后面要添加自己的tftp工作目录。

2.5 重启相关服务

在终端执行以下命令:

1
2
sudo service tftpd-hpa restart # 重启 tftpd-hpa
sudo service xinetd restart # 重启 xinetd

【注意】看到有个资料上说,每次重新打开ubuntu 若要使用tftp都需要重启,这里先记下,后边出现问题的话可以重启再试一下。

3. 本地测试是否安装成功

  • 进入到服务器工作目录
1
cd /home/hk/3tftp
  • 创建一个新文件
1
sudo touch test.txt
  • 回到家目录
1
cd ~
  • 使用tftp命令登录本机
1
tftp localhost

当我们本地登录成功后,命令提示符会变成如下形式:

1
tftp> 
  • 获取文件
1
tftp> get test.txt
  • 退出 tftp
1
tftp> quit

退出tftp服务后,我们就会回到刚所在的目录里,我们下载的文件也将会被保存到这里

  • 查看是否下载成功
1
ls

若显示有test.txt文件,那么表示我们的TFTP服务安装配置成功。

4. 开发板使用测试

一般来说我们搭建TFTP环境就是为了能将文件从Ubuntu传输到我们的linux开发板,当我们配置好Linux开发板和ubuntu的网络环境,两者之间互相可以ping通的时候,我们可以这样来实现文件的传输,在开发板的终端(我一般使用SecureCRT)中执行:

1
tftp -g -r <file_name> <Ubuntu_IP>

这样便会将UbuntuTFTP服务器目录下的文件下载到开发板的当前目录下。例如,

1
tftp -g -r test.c 192.168.10.100

二、NFS环境搭建

1. NFS简介

NFSNetwork 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/hk/4nfs 
sudo chmod -R 777 /home/hk/4nfs/

2.4 NFS配置

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

1
sudo vi /etc/exports

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

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

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

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

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

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

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

【注意】

(1)ubuntu17.10 之后的版本nfs 默认只支持协议34,但后续我们使用的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/hk/4nfs /mnt/nfs_temp/
  • 卸载
1
sudo umount /mnt/nfs_temp/

2.7 查看NFS共享目录

在终端执行以下命令:

1
showmount -e

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

1
2
Export list for vm:
/home/hk/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.

3. 本地测试是否安装成功

  • 进入到服务器工作目录
1
cd /home/hk/4nfs
  • 创建一个新文件
1
sudo touch test.txt
  • 回到家目录
1
cd ~
  • 使用nfs挂载工作目录到/mnt
1
2
sudo mkdir -p /mnt/nfs_temp
sudo mount -t nfs localhost:/home/hk/4nfs /mnt/nfs_temp
  • 查看是否挂载成功
1
ls /mnt/nfs_temp

若显示有test.txt文件,那么表示我们的NFS服务安装配置成功。

4. 开发板使用测试

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

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/中拷贝我们需要的文件。