在嵌入式開發中,由於嵌入式開發板資源有限,不能進行檔案編譯,因此我們都是將寫好都代碼在宿主機(PC)上進行調試編譯好後產生二進位檔案,然後通過tftp或NFS來進行傳輸到開發板上運行。但是如何來配置tftp呢?經過一番配置,我終於成功了,在這裡分享一下。
環境:TQ2440開發板
linux核心:linux2.6.25
PC系統:Centos6.0
好了,那就開始配置吧!
首先,我們需要以宿主機(PC)作為伺服器端,因為我們是要將電腦上都檔案下載到開發板上嘛。在PC終端安裝tftp服務的伺服器端,用戶端。
# yum tftp.i386 tftp-server-***.i386
安裝完後,編輯vi /etc/xinetd.d/tftp
service tftp
...{
socket_type = dgram
protocol = udp
wait = yes
user = root
server = /usr/sbin/in.tftpd
server_args = -s /tftpboot
disable = no
}
將disable改為no,儲存退出。
接下來建立預設的tftp根目錄,要跟上面的server_args的路徑一樣,這裡是/tftpboot:
# cd /
# mkdir tftpboot
# /etc/rc.d/init.d/xinetd restart
停止 xinetd: [ 確定 ]
啟動 xinetd: [ 確定 ]
然後在命令列中輸入setup
#setup
選擇<system services>選中tftp並去掉iptables選項,還得選中portmap(連接埠映射),如果系統中沒有那個選項,還得安裝相關服務,yum install portmap就OK
再
# /etc/rc.d/init.d/xinetd restart
這時,tftp就配置好了。此時用戶端(開發板)就可以上傳下載檔案到PC端都/tftpboot目錄下了。
那麼在用戶端是如何使用tftp上傳下載都了。這個和PC端還是有點不一樣的,在開發板上的終端輸入
# tftp
Usage: tftp [OPTION]... HOST [PORT]
Transfer a file from/to tftp server
Options:
-l FILE Local FILE
-r FILE Remote FILE
-g Get file
-p Put file
-b SIZE Transfer blocks of SIZE octets
參數說明:
-l 是local的縮寫,後跟本地或下載到本地後重新命名的檔案名稱。
-r 是remote的縮寫,後跟遠程即PC機tftp伺服器根目錄中的檔案名稱,或上傳到PC機後重新命名後的檔案名稱。
-g 是get的縮寫,下載檔案時用,後跟PC機的IP地址
-p 是put的縮寫,上傳檔案時用,後跟PC機的IP地址
tftp 預設佔用的是69連接埠 下載檔案:[root@wanyao /]# tftp -l hello_arm -r hello_arm
-g 192.168.1.103 69
上傳檔案:[root@wanyao /]# tftp -l hello_arm -r hello_arm
-p 192.168.1.103 69其中,192.168.1.103是宿主機的ip
注意:下載或上傳檔案時,伺服器和本地檔案名稱最好相同,否則會出現得到了檔案,但檔案大小卻是 0k 的現象。如果出現了這種現象,請多敲幾次命令,因為tftp服務是基於udp協議,不能保證檔案正確的傳輸。
安裝過程中出現的問題及原因
現象一:
tftp> get test.log
Transfer timed out.
原因:
tftpd服務沒有啟動
現象二
tftp> put test2
Error code 0: Permission denied
原因:
運行命令,查看系統日誌
#tail /var/log/messages
發現有如下一段文字:
Mar 24 19:05:26 localhost setroubleshoot: SELinux is preventing
/usr/sbin/in.tftpd (tftpd_t) "write" to tftpboot (tftpdir_t). For
complete SELinux messages. run sealert -l
40a5a6bf-8ded-4bfa-ab6e-fa669a25fc6c
知道這是是由SELinux造成的,在FC3和FC3以後的FC版本中SELinux預設的都是開啟的,現關掉它,修改檔案 /etc/sysconfig/selinux,設定其中的
SELINUX=disabled
然後重啟電腦即可
或者執行命令 system-config-securitylevel 開啟 “安全層級配置”對話方塊,將SELinux(S)選項中 “強制” 改為“允許”。
現象三:
tftp> put ex070416.log
Error code 1: File not found
原因:
指定的檔案不存在;或tftpd啟動參數中沒有指定-c選項,允許上傳檔案
現象四:
tftp> get test.log
Error code 2: Only absolute filenames allowed
原因:
在/etc/xinetd.d/tftpd中設定的server_args為/etc/default/tftpd-hpa
cat /etc/default/tftpd-hpa
#Defaults for tftpd-hpa
RUN_DAEMON="no"
OPTIONS="-s /home/tftpd -c -p -U 077 -u tftpd"
設定的時候只要將server_args=改為你自己設定的伺服器檔案夾就行了