嵌入式開發之TFTP開發環境的搭建

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



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章