嵌入式linux最常用到tftp命令來完成開發闆和Linux系統之間的的文件傳輸,避免了頻繁的U盤拷貝過程。
我們知道,Windows下使用“tftpd32.exe”這款軟件可以很方便地在Windows下搭建的tftp服務器。但是,當我們做嵌入式linux開發的時候,如果用Windows搭建tftp服務器,用的還是虛拟機,就得在虛拟機中開啟共享文件夾,然後再把文件放入共享文件夾内,最後傳輸到開發闆中執行。這麼複雜的步驟,對于我來講太繁瑣了……那麼我們是否可以隻用一個Linux系統就完成編譯 文件傳輸呢?答案是可以的!下面就來教大家如何在Linux系統下安裝tftp服務器。
Linux下的tftp開發環境建立包括兩個方面:一是Linux服務器端的tftp-server支持,二是嵌入式目标系統的tftp-client支持。
本教程分為三個部分:
Windows 10專業版(版本号:1909;操作系統版本:18383.752)、Windows子系統Ubuntu 18.04(1804.2020.5.0)
1.1:安裝tftp服務器所需的軟件
搭建tftp服務所需要安裝的軟件有tftp-hpa,tftpd-hpa以及xinetd,其中:
tftp-hpa——客戶端軟件:
~$ sudo apt-get install tftp-hpa
tftpd-hpa——服務程序:
~$ sudo apt-get install tftpd-hpa
xinetd——新一代的網絡守護進程服務程序,又叫超級Internet服務器,常用來管理多種輕量級Internet服務:
~$ sudo apt-get install xinetd
1.2:配置xinetd.conf配置文件
查看/etc/xinetd.conf這個文件是否和以下内容一緻;如果不一緻,請修改;如果沒有,直接用vi命令創建并編輯
~$ cat /etc/xinetd.conf
# 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
1.3:配置tftpd-hpa配置文件
~$ sudo vi /etc/default/tftpd-hpa
将内容修改成:
# /etc/default/tftpd-hpa
TFTP_USERNAME="tftp"
TFTP_DIRECTORY="/home/harry/tftpboot"
TFTP_ADDRESS="0.0.0.0:69"
TFTP_OPTIONS="-l -c -s"
修改成功後,如下圖所示,:wq保存退出。
配置tftpd-hpa配置文件
注:TFTP_DIRECTORY=”/home/harry/tftpboot”表示tftp服務器的工作目錄,用戶可根據自己的實際情況進行更改。
1.4:建立工作目錄
指定了tftp服務的工作目錄後,我們需要在相應的路徑下建立該tftp工作目錄,命令如下:
~$ mkdir tftpboot
修改tftp服務器目錄的權限為777,這樣不僅可以允許目标機下載,同時允許其上傳。命令為:
~$ sudo chmod 777 ./tftpboot
1.5:配置tftp配置文件
查看/etc下面的xinetd.d目錄裡的ftp文件内容是否和下面圖片中的一緻(如果沒有的話,就新建一個并輸入以下内容)
~$ sudo vi /etc/xinetd.d/tftp
内容如下:
service tftp
{
socket_type = dgram
protocol = udp
wait = yes
user = root
server = /usr/sbin/in.tftpd
server_args = -s /home/harry/tftpboot/ -c
disable = no
per_source = 11
cps = 100 2
flags = IPv4
}
修改之後,如圖所示
配置tftp配置文件
server_args一行是配置tftp服務器中文件的存放位置,進行tftp傳輸的時候,都是從該目錄中搜索文件的。
然後保存文件,并退出編輯。
1.6:重新啟動tftp
重新啟動tftp,會提示一個OK
~$ sudo service tftpd-hpa restart
重新啟動tftp
如果用的linux系統和筆者一樣,是win10子系統的話,windows的防火牆會提示你,一定要點“是”!!!否則就會失敗
1.7:重新加載xinetd
重新加載xinetd進程,會提示一個OK:
~$ sudo /etc/init.d/xinetd reload
重新加載xinetd
1.8:重新啟動xinetd
重啟xinetd服務,會提示兩個OK:
~$ sudo /etc/init.d/xinetd restart
重新啟動xinetd
注意:每次修改完配置文件後,都需要重新啟動一下服務。
至此,Linux系統下搭建tftp服務器步驟完成,下面介紹如何測試tftp。
2.1:新建測試文件
筆者在tftp的工作目錄“/home/harry/tftpboot”中複制一個已經編譯好的C語言程序文件“hello”,該文件可以打印Hello World!,如下圖所示:
打印Hello World!
2.2:進入測試目錄
然後進入任意一個不同于“/home/harry/tftpboot”的目錄(例如/home/harry目錄下),然後在終端中輸入
~$ tftp 127.0.0.1
進入tftp命令符下,如圖:
進入測試目錄
2.3:獲取測試文件
輸入如下命令,再按回車,獲取存放在tftp工作目錄/home/harry/tftpboot中的“helol”文件。如果沒有任何提示,就說明傳輸成功了,否則就是失敗,要麼配置有問題,要麼防火牆攔截了。如下圖所示:
~$ get test
獲取測試文件
2.4:退出tftp命令
輸入q 退出tftp命令行,如下圖所示:
退出tftp命令
2.5:修改文件權限并運行
~$ ls
~$ chmod 777 hello
~$ ls
~$ ./hello
修改獲取的文件權限并運行
2.6:上傳文件
可以在tftp命令中輸入 如下命令,文件上傳到tftp服務器中
~$ put main.c
2.7:開發闆tftp 傳送命令
tftp [server_ip](tftp服務器ip,如192.168.1.2)-g -r [filename](傳送文件名 例如:main)
完整命令
至此,整個tftp服務器的搭建步驟以及tftp測試就完成了,如果有任何問題,歡迎大家在下方留言。
如何在Linux系統中手動安裝arm-linux-gcc交叉編譯工具
,更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!