嵌入式中利用ftp實現宿主機與目標機通訊

來源:互聯網
上載者:User

在嵌入式開發中,由於嵌入式開發板資源有限,不能進行檔案編譯,因此我們都是將寫好都代碼在宿主機(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=改為你自己設定的伺服器檔案夾就行了

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.