嵌入式开发之TFTP开发环境的搭建

2019-07-13 03:41发布

data/attach/1907/vbk5hw1kf8sfe2f6q4t5e7hykuhmp09v.jpg 1、TFTP简介     简单文件传输协议或称小型文件传输协议(英文:TrivialFileTransferProtocol,缩写tftp),是一种简化的文件传输协议,于1980年定义。tftp是用来下载远程文件的最简单网络协议,它其于UDP协议而实现。嵌入式Linux的ftp最常用来完成开发板和开发环境Linux系统之间的的文件传输功能,避免了频繁的U盘拷贝的过程。Linux下的tftp开发环境建立包括两个方面:一是Linux服务器端的tftp-server支持,二是嵌入式目标系统的tftp-client支持。本文将介绍基于Ubuntu10.04发行版的Linux服务器端tftp-server的配置和在主机和目标机之间的tftp文件传输方法。 ================================================================================================ 2、开发环境 Linux操作系统:Ubuntu10.04 开发板:OMAPL138双核处理平台 说明:我个人每次都是使用的是root账户登陆,避免每条命令之前加sudo,普通用户登陆登陆的话,需在命令加上sudo。 ================================================================================================
3、TFTP开发环境搭建流程 3.1 安装tftp所需的软件     搭建TFTP服务所需要安装的软件有tftp-hpa,tftpd-hpa以及xinetd,其中:
    tftp-hpa   : 是客户端软件;          root# apt-get install tftp-hpa 
    tftpd-hpa  : 是服务程序;            root# apt-get install tftpd-hpa 
    xinetd     : 是新一代进程守护程序。  root# apt-get install xinetd
3.2 配置xinetd.conf配置文件     进入/etc目录,首先看目录中有没有一个xinetd.conf文件,如果没有则新建一个,有的话查看其内容:     root# cat xinetd.conf     看是否与下面的一致,内容如下所示:       若不一致则运行如下命令,修改为相同即可。
    root# gedit xinetd.conf 3.3 配置tftpd-hpa配置文件     修改tftpd-hpa配置文件的内容:      root# gedit /etc/default/tftpd-hpa
    将内容修改成:
    # /etc/default/tftpd-hpa      TFTP_USERNAME="tftp"      TFTP_DIRECTORY="/tftpboot"      TFTP_ADDRESS="0.0.0.0:69"      TFTP_OPTIONS="-l -c -s"     修改成功后,如下图所示,保存退出。
     注解:TFTP_DIRECTORY="/tftpboot"表示tftp服务器的工作目录,用户可根据自己的实际情况进行更改。      指定了tftp服务的工作目录后,我们需要在相应的路径下建立该tftp工作目录,命令如下:      root# mkdir –p /tftpboot     修改工作目录的权限为777,777是最松的权限,这样不仅可以允许别的主机或者目标机下载,同时允许其上传文件。命令为:      root# chmod 777 /tftpboot 3.4 配置tftp配置文件         进入/etc下面的xinetd.d文件夹,查看是否有一个tftp文件,如果没有的话,就新建一个并输入以下内容,如果有的话就查看内容是否与下面的一致,不一致则修改,内容如下:
        root# gedit tftp     service tftp
    {
       disable = no
       socket_type = dgram
       protocol = udp
       wait = yes
       user = root
       server = /usr/sbin/in.tftpd
       server_args = -s /tftpboot -c
       per_source = 11
       cps = 100 2
       flags =IPv4
    }
    修改之后,如图所示:

    其中server_args一行是配置服务器的文件存放的位置,就是进行tftp传输的时候,都是从该文件夹中搜索文件的。然后保存文件,并退出编辑。
4、重新启动服务    重启tftpd-hpa,提示如下图:
   root# service tftpd-hpa restart

    重新加载xinetd进程,提示如下图:
   root# /etc/init.d/xinetd reload

    重启xinetd服务,提示如下图:     root# /etc/init.d/xinetd restart
    每次修改完配置文件后,都需要重新启动一下服务。
5、本地测试TFTP服务     首先在tftp的工作目录"/tftpboot"中新建一个文件test,在其中输入任意内容,例如内容如下图:

  然后进入任意一个不同于/tftpboot的目录(例如/opt目录下),然后在终端中输入如下命令,进入tftp命令符下,如下图:
    root# tftp localhost
   输入如下命令,再按回车,获取存放在tftp工作目录/tftpboot中的"test"文件。如果没有任何提示,就说明传输成功了,如下图所示:
    root# get test
    然后输入 q 退出tftp命令行,如下图所示:

   在当前目录下运行ls就可以看到一个test文件,可以使用如下命令查看其内容,可以发现是与开始新建的那个test的内容是一致的。    root# cat test

    修改test文件后,可以在tftp命令中输入 如下命令,把修改过的test文件上传到服务器文件夹中。
   root# put test     其效果图,在此不再给出,读者可以自行测试。 ================================================================================================ 鉴于TFTP服务的安装过程十分繁复,且容易出错,下面给出脚本代码,自动安装该服务。
#!/bin/bash
##########################################################################
# 搭建TFTP服务所需要安装的软件有tftp-hpa,tftpd-hpa以及xinetd,其中:#
# tftp-hpa   : 是客户端软件;#
# tftpd-hpa  : 是服务程序;#
# xinetd     : 是新一代进程守护程序。#
##########################################################################


function creat_xinetd_conf
{
echo  "# 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" > /tmp/xinetd.conf 
}
function config_xinetd_conf
{
creat_xinetd_conf
filename=/etc/xinetd.conf
example=/tmp/xinetd.conf
test -f $filename     #返回值为0,代表文件存在  返回值为1,代表文件不存在
if [ "$?" -eq 0 ];then
echo "xinetd.conf文件存在"
diff -E $example $filename
case $? in
1)     #文件内容有误
rm -rf $filename
mv -f $example $filename
echo "xinetd.conf文件内容修改成功";;
0)     #文件内容正确 
rm -rf $example
echo "xinetd.conf文件内容正确";;  
*)
rm -rf $example        
echo "未知错误,程序终止";;
esac
else
echo "xinetd.conf文件不存在,正在创建该文件"
mv -f $example $filename
echo "xinetd.conf文件创建成功"
fi
}
#============================================================================================#
function modify_tftpd_hpa
{
echo "# /etc/default/tftpd-hpa


TFTP_USERNAME="tftp"
TFTP_DIRECTORY="/tftpboot"
TFTP_ADDRESS="0.0.0.0:69"
TFTP_OPTIONS="-l -c -s"" > /tmp/tftpd-hpa
rm -rf /etc/default/tftpd-hpa
mv -f /tmp/tftpd-hpa /etc/default/tftpd-hpa
echo "tftpd_hpa 文件内容修改成功"
mkdir -p /tftpboot
chmod 777 /tftpboot
}
#============================================================================================#
function modify_tftp
{
echo "service tftp
{
disable = no
socket_type = dgram
protocol = udp
wait = yes
user = root
server = /usr/sbin/in.tftpd
server_args = -s /tftpboot -c
per_source = 11
cps = 100 2
flags =IPv4
}" > /tmp/tftp
rm -rf /etc/xinetd.d/tftp
mv -f /tmp/tftp /etc/xinetd.d/tftp
echo "tftp 文件内容修改成功"
}
#============================================================================================#
function test_tftp
{
echo "This is a test file" > /tftpboot/TEST
cd /tmp
echo "请在终端命令行中依次键入"get TEST"以及"quit""
tftp localhost
cat /tmp/TEST   # 返回值为0,表示成功查看指定的文件  返回值为1,表示不能正常查看指定的文件
if [ $? -eq 0 ]; then
echo "tftp  测试成功,可以正常使用"
rm -rf /tftpboot/TEST /tmp/TEST
else 
echo "tftp  测试失败,请检查tftp配置"
rm -rf /tftpboot/TEST /tmp/TEST
fi
}
#============================================================================================#




function step_1      #安装TFTP相关服务
{
apt-get update                #安装软件之前,先升级一下数据库,获取软件包的最新相关信息
apt-get install tftp-hpa      #安装TFTP服务的客户端软甲
apt-get install tftpd-hpa     #安装TFTP服务的服务器端软件
apt-get install xinetd        #安装新一代进程守护程序
}
function step_2      #配置TFTP相关服务
{

config_xinetd_conf            #配置/etc/xinetd.conf文件
modify_tftpd_hpa           #修改/etc/default/tftp-hpa文件
modify_tftp            #安装TFTP服务的服务器端软件
}
function step_3      #重启TFTP相关服务
{
service tftpd-hpa restart     #重新启动tftpd-hpa
/etc/init.d/xinetd reload     #重新加载xinetd服务程序
/etc/init.d/xinetd restart    #重新启动xinetd服务程序
}


function step_4      #测试TFTP相关服务
{
test_tftp           #测试tftp服务
}


echo "选项1 安装TFTP相关服务"
echo "选项2 配置TFTP相关服务"
echo "选项3 重启TFTP相关服务"
echo "选项4 测试TFTP相关服务"
echo "键入quit,退出TFTP安装"
echo "请键入数值,执行您所需要的操作: "


read -r Step 
while [ $Step != quit ]
do
while [ $Step -lt 1 -o $Step -gt 4 ]
do
echo "对不起,您输入的选项有误,请输入数字1—4之间的数值!"
read -r Step
done
case "$Step" in
1)
read -p "安装过程中出现的选项,请直接确定,不必更改,按任意键继续安装"
step_1;;
2)
step_2;;
3)
step_3;;
4)
step_4;;
*)
echo "出现致命错误,请检查脚本程序!";;
esac
echo "操作已完成!"
echo "============================="
echo " "
echo " "
echo " "
echo " "
echo "选项1 安装TFTP相关服务"
echo "选项2 配置TFTP相关服务"
echo "选项3 重启TFTP相关服务"
echo "选项4 测试TFTP相关服务"
echo "键入quit,退出TFTP安装"
echo "请键入数值,执行您所需要的操作: "
read -r Step
echo " "
echo " "
done


exit