嵌入式Linux的ftp最常用來完成開發板和開發環境Linux系統之間的的檔案傳輸功能,避免了頻繁的U盤拷貝的過程。Linux下的tftp開發環境建立包括兩個方面:一是Linux伺服器端的tftp-server支援,二是嵌入式目標系統的tftp-client支援。本文將介紹基於Ubuntu10.04發行版的Linux伺服器端tftp-server的設定和在主機和目標機之間的tftp檔案傳輸方法。
我個人每次都是使用的是root賬戶登陸,避免每條命令之前加sudo,普通使用者登陸登陸的話,需在命令加上sudo。
1
第一步: 安裝tftp所需的軟體(黑色加粗字型為linux命令,下同)? ??搭建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 xinetd2
第二步: 設定xinetd.conf組態檔
進入/etc目錄,首先看目錄中有沒有一個xinetd.conf檔案,如果沒有則新建一個,有的話檢視其內容:
root# cat xinetd.conf
看是否與下面的一致,內容如下所示:
若不一致則執行如下命令,修改為相同即可。
root# gedit xinetd.conf
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
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傳輸的時候,都是從該資料夾中搜尋檔案的。然後儲存檔案,並退出編輯。
5
第五步:重新啟動TFTP
重新啟動tftpd-hpa,提示如下圖:
root# service tftpd-hpa restart
6
第六步:重新載入xinetd
重新載入xinetd進程,提示如下圖:
root# /etc/init.d/xinetd reload
7
第七步:重新啟動xinetd
重新啟動xinetd服務,提示如下圖:
root# /etc/init.d/xinetd restart
每次修改完組態檔後,都需要重新啟動一下服務。
至此,嵌入式Linux系統下搭建TFTP開發環境大功告成,下面介紹如何測試TFTP
1
第一步:新建測試檔案
首先在tftp的工作目錄"/tftpboot"中新建一個檔案test,在其中輸入任意內容,例如內容如下圖:
2
第二步:進入測試目錄
然後進入任意一個不同於/tftpboot的目錄(例如/opt目錄下),然後在終端中輸入如下命令,進入tftp命令符下,如下圖:
root# tftp localhost
3
第三步:獲取測試檔案
輸入如下命令,再按回車,獲取存放在tftp工作目錄/tftpboot中的"test"檔案。如果沒有任何提示,就說明傳輸成功了,如下圖所示:
root# get test
4
第四步:退出TFTP測試
輸入 q 退出tftp命令列,如下圖所示:
5
? ? ? 修改test檔案後,可以在tftp命令中輸入 如下命令,把修改過的test檔案上傳到伺服器資料夾中。? ? ? ?root# put test? ? ? 其效果圖,在此不再給出,讀者可以自行測試。1
鑑於TFTP服務的安裝過程十分繁複,且容易出錯,下面給出指令碼程式碼,自動安裝該服務。新建一個空檔案,將下面程式碼複製,儲存之後,修改檔案許可權,使之具有執行許可權後,就可以自動搭建嵌入式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_conffilename=/etc/xinetd.confexample=/tmp/xinetd.conftest -f $filename ? ? #返回值為0,代表檔案存在 ?返回值為1,代表檔案不存在if [ "$?" -eq 0 ];thenecho "xinetd.conf檔案存在"diff -E $example $filenamecase $? in1) ? ? #檔案內容有誤rm -rf $filenamemv -f $example $filenameecho "xinetd.conf檔案內容修改成功";;0) ? ? #檔案內容正確?rm -rf $exampleecho "xinetd.conf檔案內容正確";;??*)rm -rf $example ? ??? ?echo "未知錯誤,程式終止";;esacelseecho "xinetd.conf檔案不存在,正在建立該檔案"mv -f $example $filenameecho "xinetd.conf檔案建立成功"fi}#=============================================#function modify_tftpd_hpa{echo "# /etc/default/tftpd-hpaTFTP_USERNAME="tftp"TFTP_DIRECTORY="/tftpboot"TFTP_ADDRESS="0.0.0.0:69"TFTP_OPTIONS="-l -c -s"" > /tmp/tftpd-hparm -rf /etc/default/tftpd-hpamv -f /tmp/tftpd-hpa /etc/default/tftpd-hpaecho "tftpd_hpa 檔案內容修改成功"mkdir -p /tftpbootchmod 777 /tftpboot}#=============================================#function modify_tftp{echo "service tftp{disable = nosocket_type = dgramprotocol = udpwait = yesuser = rootserver = /usr/sbin/in.tftpdserver_args = -s /tftpboot -cper_source = 11cps = 100 2flags =IPv4}" > /tmp/tftprm -rf /etc/xinetd.d/tftpmv -f /tmp/tftp /etc/xinetd.d/tftpecho "tftp 檔案內容修改成功"}#=============================================#function test_tftp{echo "This is a test file" > /tftpboot/TESTcd /tmpecho "請在終端命令列中依次鍵入"get TEST"以及"quit""tftp localhostcat /tmp/TEST ? # 返回值為0,表示成功檢視指定的檔案 ?返回值為1,表示不能正常檢視指定的檔案if [ $? -eq 0 ]; thenecho "tftp ?測試成功,可以正常使用"rm -rf /tftpboot/TEST /tmp/TESTelse?echo "tftp ?測試失敗,請檢查tftp設定"rm -rf /tftpboot/TEST /tmp/TESTfi}#=============================================#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 ]doecho "對不起,您輸入的選項有誤,請輸入數位1—4之間的數值!"read -r Step ?donecase "$Step" in1)?read -p "安裝過程中出現的選項,請直接確定,不必更改,按任意鍵繼續安裝"step_1;;2)step_2;;3)step_3;;4)step_4;;*)?echo "出現致命錯誤,請檢查指令碼程式!";;esacecho "操作已完成!"echo "============================="echo " "echo " "echo " "echo " "echo "選項1 安裝TFTP相關服務"echo "選項2 設定TFTP相關服務"echo "選項3 重新啟動TFTP相關服務"echo "選項4 測試TFTP相關服務"echo "鍵入quit,退出TFTP安裝"echo "請鍵入數值,執行您所需要的操作: "read -r Stepecho " "echo " "doneexit ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?## ? 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_conffilename=/etc/xinetd.confexample=/tmp/xinetd.conftest -f $filename ? ? #返回值為0,代表檔案存在 ?返回值為1,代表檔案不存在if [ "$?" -eq 0 ];thenecho "xinetd.conf檔案存在"diff -E $example $filenamecase $? in1) ? ? #檔案內容有誤rm -rf $filenamemv -f $example $filenameecho "xinetd.conf檔案內容修改成功";;0) ? ? #檔案內容正確?rm -rf $exampleecho "xinetd.conf檔案內容正確";;??*)rm -rf $example ? ??? ?echo "未知錯誤,程式終止";;esacelseecho "xinetd.conf檔案不存在,正在建立該檔案"mv -f $example $filenameecho "xinetd.conf檔案建立成功"fi}#=============================================#function modify_tftpd_hpa{echo "# /etc/default/tftpd-hpaTFTP_USERNAME="tftp"TFTP_DIRECTORY="/tftpboot"TFTP_ADDRESS="0.0.0.0:69"TFTP_OPTIONS="-l -c -s"" > /tmp/tftpd-hparm -rf /etc/default/tftpd-hpamv -f /tmp/tftpd-hpa /etc/default/tftpd-hpaecho "tftpd_hpa 檔案內容修改成功"mkdir -p /tftpbootchmod 777 /tftpboot}#=============================================#function modify_tftp{echo "service tftp{disable = nosocket_type = dgramprotocol = udpwait = yesuser = rootserver = /usr/sbin/in.tftpdserver_args = -s /tftpboot -cper_source = 11cps = 100 2flags =IPv4}" > /tmp/tftprm -rf /etc/xinetd.d/tftpmv -f /tmp/tftp /etc/xinetd.d/tftpecho "tftp 檔案內容修改成功"}#=============================================#function test_tftp{echo "This is a test file" > /tftpboot/TESTcd /tmpecho "請在終端命令列中依次鍵入"get TEST"以及"quit""tftp localhostcat /tmp/TEST ? # 返回值為0,表示成功檢視指定的檔案 ?返回值為1,表示不能正常檢視指定的檔案if [ $? -eq 0 ]; thenecho "tftp ?測試成功,可以正常使用"rm -rf /tftpboot/TEST /tmp/TESTelse?echo "tftp ?測試失敗,請檢查tftp設定"rm -rf /tftpboot/TEST /tmp/TESTfi}#=============================================#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 ]doecho "對不起,您輸入的選項有誤,請輸入數位1—4之間的數值!"read -r Step ?donecase "$Step" in1)?read -p "安裝過程中出現的選項,請直接確定,不必更改,按任意鍵繼續安裝"step_1;;2)step_2;;3)step_3;;4)step_4;;*)?echo "出現致命錯誤,請檢查指令碼程式!";;esacecho "操作已完成!"echo "============================="echo " "echo " "echo " "echo " "echo "選項1 安裝TFTP相關服務"echo "選項2 設定TFTP相關服務"echo "選項3 重新啟動TFTP相關服務"echo "選項4 測試TFTP相關服務"echo "鍵入quit,退出TFTP安裝"echo "請鍵入數值,執行您所需要的操作: "read -r Stepecho " "echo " "doneexit