配置和使用TFTP

       因爲特定的開發環境的制約,我不得不在WINDOWS上調試代碼而要登陸到LINUX宿主開發機上進行開發工作。然後在LINUX交叉編譯環境中編譯成二進制代碼並通過TFTP(也許這是最方便的方法了)下載到WINDOWS終端上,在通過只能支持WINDOWS的FlexROM III仿真機把二進制代碼運行和調試,調試好了以後再燒到ARM7目標扳上。我暈!這麼複雜!如果調試有問題,還要重新到LINUX系統上重新編譯!


        言歸正傳,先講如何配置TFTP。先用rpm -qa |grep tftp 確定系統上是否裝了TFTP。如果沒有在光盤第二張裏。如果安裝了,修改/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 = yes //默認是關閉的,這裏註釋掉。
per_source = 11
cps = 100 2
flags = IPv4
}


這樣就可以在/TFTPBOOT目錄傳遞文件了。
[WINDOWS :]
tftp -i ipxxx get/put filename
[LINUX :]
tftp>connect ipxx
get/put filename


但是,往往會遇到這樣的問題:
1。提示服務器無法找到你要的文件。
2。你無權訪問。
爲什麼會這樣呢?因爲,權限設置有問題:
我們需要在ROOT身份下,給/TFTPBOOT目錄設置讀寫的權限。
chmod 766 -R /tftpboot
如此,你可以從LINUX系統的/TFTPBOOT得到文件了。但是你會發現你傳遞不上文件。
你需要在要登陸到LINUX服務器上首先在你的/TFTPBOOT目錄中建立你要傳遞的文件。


Egs:
touch arm-elf-tools.tar.gz
chmod 666 arm-elf-tools.tar.gz
tftp -i ipxx put arm-elf-tools.tar.gz
這樣就可以了!
我開始沒有‘chmod 666 arm-elf-tools.tar.gz '結果總是報告錯誤,說我不能寫!
注意:我開始在/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 = yes //默認是關閉的,這裏註釋掉。
per_source = 11
cps = 100 2
flags = IPv4
}c
hmod -R 777 /tftpboot //注意這句。
-----------------------------------------------------------


結果LINUX系統重啓動後,xinetd就不能停止,但是可以啓動。所有我開放的服務都突然
停了。我開始懷疑是有人DHCP改動了IP地址,訪問不了了。後來發現IP沒有改。也能
PING通就是TELNET不上了。最後發現是加了chmod -R 777 /tftpboot 的原因:在XINETD
停止的時候要執行chmod -R 777 /tftpboot 執行不了,就停不了,也重啓不了。結果那些服務
都沒有啓動。配置文件讀取執行到這裏就停止了!


註意:tftp似乎有個BUG。是這樣的,我telnet到遠程LINUX上,在remote機器上的
/tftpboot目錄中執行暸get romfs.bin(因為我忘記是在遠程機器上暸,我以為在本地,因為
我的確在本地機器上操作)我本來希望能夠將那個目錄下的ROMFS.BIN文件下載到本地來,
結果它將remote機器上/tftpboot/目錄下的romfs.bin文件清除掉暸。因為,tftp client程式會
在操作的當前目錄建立一個妳要GET的文件,結果就把原來在這個目錄下的文件無聲無息
的覆蓋掉暸。我覺得,TFTP應該做一下這個檢查,如果本地有要GET的同名文件,應該讓
用戶確認一下,給齣提示!(我問暸一下Richad steman,他說他不知道,他從來不用
TFTP。TFTP不是GNU的嗎?我還以為是,結果就很冒失的問他暸。呵呵

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