本應(yīng)用筆記介紹 RT-Thread NetUtils 的使用方法,幫助開發(fā)者更好地使用 RT-Thread NetUtils 組件來解決網(wǎng)絡(luò)開發(fā)過程中遇到的問題。
本文的目的和背景
在進(jìn)行網(wǎng)絡(luò)相關(guān)的產(chǎn)品開發(fā)和調(diào)試時,一些好用的小工具往往能取到事半功倍的效果。 RT-Thread NetUtils 組件基于此應(yīng)用場景,開發(fā)和封裝了一系列簡潔好用的網(wǎng)絡(luò)工具集合,為開發(fā)者提供便利。
為了方便用戶開發(fā)網(wǎng)絡(luò)應(yīng)用,RT-Thread 將常用的網(wǎng)絡(luò)工具制作 NetUtils 組件包,通過 env 動態(tài)配置,即開即用, 有效降低資源的占用。
本文的結(jié)構(gòu)
NetUtils 組件介紹
Ping 工具的配置和使用
NTP 時間同步工具的配置和使用
TFTP 文件傳輸工具的使用
Iperf 網(wǎng)絡(luò)帶寬測試工具的配置和使用
其他網(wǎng)絡(luò)調(diào)試工具的配置和使用
問題闡述
本應(yīng)用筆記將圍繞下面幾個問題來介紹 RT-Thread NetUtils 組件。
RT-Thread NetUtils 主要包括哪些?分別有什么功能?
如何使用 Ping 工具診斷網(wǎng)絡(luò)穩(wěn)定性?
如何測試網(wǎng)絡(luò)穩(wěn)定性和帶寬?
如何通過網(wǎng)絡(luò)傳輸文件?
問題的解決
NetUtils 組件介紹
RT-Thread NetUtils 作為網(wǎng)絡(luò)工具合集,既有用于測試調(diào)試的 Ping 命令, 同步時間的 NTP 工具, 性能和帶寬測試的 Iperf 、 NetIO,還有在嵌入式系統(tǒng)中廣泛使用的輕量級文件傳輸工具 TFTP,方便地通過網(wǎng)絡(luò)完成兩個設(shè)備間的文件互傳。另外, RT-Thread 還針對開發(fā)中的實際問題,提供了一些高級的輔助工具,如可以遠(yuǎn)程登錄到 RT-Thread Finsh/MSH Shell 的 Telnet 工具,以及基于 lwIP 的網(wǎng)絡(luò)抓包工具 tcpdump。
下面是 RT-Thread NetUtils的分類和簡介:
每個小工具可使用 menuconfig 獨立控制啟用/停用,并提供了 Finsh/MSH 的使用命令。首先打開 env 工具,進(jìn)入 BSP 目錄,在 env 命令行輸入 menuconfig 進(jìn)入配置界面配置工程,根據(jù)需求選擇合適的 NetUtils 功能,如圖所示(注意: Ping 和 TFTP 依賴于 lwIP,需要先開啟 lwIP 的依賴后才能顯示)
RT-Thread online packages -> IoT - internet of things -> netutils: Networking utilities for RT-Thread
Ping工具的配置與使用
介紹
Ping是一種網(wǎng)絡(luò)診斷工具,用來測試數(shù)據(jù)包能否通過 IP 協(xié)議到達(dá)特定主機(jī)。估算與主機(jī)間的丟失數(shù)據(jù)包率(丟包率)和數(shù)據(jù)包往返時間(網(wǎng)絡(luò)時延,Round-trip delay time)
使用
Ping 工具依賴 lwIP,需要先在 env 工具 開啟 lwIP 的依賴才可見,步驟如下:
-> RT-Thread Components -> Network stack -> light weight TCP/IP stack -> Enable lwIP stack
在NetUtils菜單欄使能 Ping 選項:
RT-Thread online packages -> IoT - internet of things -> netutils: Networking utilities for RT-Thread [*] Enable Ping utility
Ping 支持訪問IP 地址或域名,使用 Finsh/MSH 命令進(jìn)行測試,大致使用效果如下:
Ping 域名
msh />ping rt-thread.org 60 bytes from 116.62.244.242 icmp_seq=0 ttl=49 time=11 ticks 60 bytes from 116.62.244.242 icmp_seq=1 ttl=49 time=10 ticks 60 bytes from 116.62.244.242 icmp_seq=2 ttl=49 time=12 ticks 60 bytes from 116.62.244.242 icmp_seq=3 ttl=49 time=10 ticks msh />
Ping IP
msh />ping 192.168.10.12 60 bytes from 192.168.10.12 icmp_seq=0 ttl=64 time=5 ticks 60 bytes from 192.168.10.12 icmp_seq=1 ttl=64 time=1 ticks 60 bytes from 192.168.10.12 icmp_seq=2 ttl=64 time=2 ticks 60 bytes from 192.168.10.12 icmp_seq=3 ttl=64 time=3 ticks msh />
NTP工具的配置與使用
介紹
NTP是網(wǎng)絡(luò)時間協(xié)議(Network Time Protocol),它是用來同步網(wǎng)絡(luò)中各個計算機(jī)時間的協(xié)議。在 RT-Thread 上實現(xiàn)了 NTP 客戶端,連接上網(wǎng)絡(luò)后,可以獲取當(dāng)前 UTC 時間,并更新至 RTC 中。
使用
在 NetUtils 菜單欄使能 NTP 選項:
RT-Thread online packages -> IoT - internet of things -> netutils: Networking utilities for RT-Thread [*] Enable NTP(Network Time Protocol) client
獲取 UTC 時間UTC 時間又稱世界統(tǒng)一時間、世界標(biāo)準(zhǔn)時間、國際協(xié)調(diào)時間。北京時間為 UTC+8 時間,比 UTC 時間多 8 小時,或者理解為早 8 小時。
API:time_t time_t ntp_get_time(void)
參數(shù) | 描述 |
---|---|
無 | 無 |
返回 | 描述 |
>0 | 當(dāng)前 UTC 時間 |
=0 | 獲取時間失敗 |
示例代碼:
#include
獲取本地時間
本地時間比 UTC 時間多了時區(qū)的概念,例如:北京時間為東八區(qū),比 UTC 時間多 8 個小時。
在menuconfig中可以設(shè)置當(dāng)前時區(qū),默認(rèn)為8
API:time_t ntp_get_local_time(void)
該 API 使用方法與ntp_get_time()類似
同步本地時間至 RTC
如果開啟 RTC 設(shè)備,還可以使用下面的命令及 API 同步 NTP 的本地時間至 RTC 設(shè)備。
Finsh/MSH 命令效果如下:
msh />ntp_sync Get local time from NTP server: Sat Feb 10 15:22:33 2018 The system time is updated. Timezone is 8. msh />
API:time_t ntp_sync_to_rtc(void)
注意事項1、NTP API 方法執(zhí)行時會占用較多的線程堆棧,使用時保證堆??臻g充足(≥1.5K);2、NTP API 方法不支持可重入,并發(fā)使用時,請注意加鎖。
TFTP工具的配置與使用
介紹
TFTP(Trivial File Transfer Protocol, 簡單文件傳輸協(xié)議)是 TCP/IP 協(xié)議族中的一個用來在客戶機(jī)與服務(wù)器之間進(jìn)行簡單文件傳輸?shù)膮f(xié)議,提供不復(fù)雜、開銷不大的文件傳輸服務(wù),端口號為69,比傳統(tǒng)的 FTP 協(xié)議要輕量級很多,適用于小型的嵌入式產(chǎn)品上。
RT-Thread 目前支持的是 TFTP 服務(wù)器。
使用
TFTP 工具依賴 lwIP,需要先在 env 工具 開啟 lwIP 的依賴才可見,步驟如下:
-> RT-Thread Components -> Network stack -> light weight TCP/IP stack -> Enable lwIP stack
在NetUtils菜單欄使能 TFTP 選項:
RT-Thread online packages -> IoT - internet of things -> netutils: Networking utilities for RT-Thread [*] Enable TFTP(Trivial File Transfer Protocol) server
安裝 TFTP 客戶端
安裝文件位于netutils/tools/Tftpd64-4.60-setup.exe,使用 TFTP 前,請先安裝該軟件。
啟動 TFTP 服務(wù)器
在傳輸文件前,需要在 RT-Thread 上使用 Finsh/MSH 命令來啟動 TFTP 服務(wù)器,大致效果如下:
msh />tftp_server TFTP server start successfully. msh />
傳輸文件
打開剛安裝的Tftpd64軟件,按如下操作進(jìn)行配置:
1、選擇Tftp Client;2、在Server interfaces下拉框中,務(wù)必選擇好與 RT-Thread 處于同一網(wǎng)段的網(wǎng)卡;3、填寫 TFTP 服務(wù)器的 IP 地址??梢栽?RT-Thread 的 MSH 下使用ifconfig命令查看;4、填寫 TFTP 服務(wù)器端口號,默認(rèn):69
發(fā)送文件到 RT-Thread
1、在Tftpd64軟件中,選擇好要發(fā)送文件;2、Remote File是服務(wù)器端保存文件的路徑(包括文件名),選項支持相對路徑和絕對路徑。由于 RT-Thread 默認(rèn)開啟DFS_USING_WORKDIR選項,此時相對路徑是基于 Finsh/MSH 當(dāng)前進(jìn)入的目錄。所以,使用相對路徑時,務(wù)必提前切換好目錄;3、點擊Put按鈕即可。
如下圖所示,將文件發(fā)送至 Finsh/MSH 當(dāng)前進(jìn)入的目錄下,這里使用的是相對路徑:
注意:如果DFS_USING_WORKDIR未開啟,同時Remote File為空,文件會將保存至根路徑下。
從 RT-Thread 接收文件
1、在Tftpd64軟件中,填寫好要接收保存的文件路徑(包含文件名);2、Remote File是服務(wù)器端待接收回來的文件路徑(包括文件名),選項支持相對路徑和絕對路徑。由于 RT-Thread 默認(rèn)開啟DFS_USING_WORKDIR選項,此時相對路徑是基于 Finsh/MSH 當(dāng)前進(jìn)入的目錄。所以,使用相對路徑時,務(wù)必提前切換好目錄;3、點擊Get按鈕即可。
如下所示,將/web_root/image.jpg保存到本地,這里使用的是絕對路徑:
msh /web_root>ls ##查看文件是否存在 Directory /web_root: image.jpg 10559 msh /web_root>
Iperf工具的配置與使用
介紹
Iperf是一個網(wǎng)絡(luò)性能測試工具。Iperf 可以測試最大 TCP 和 UDP 帶寬性能,具有多種參數(shù)和 UDP 特性,可以根據(jù)需要調(diào)整,可以報告帶寬、延遲抖動和數(shù)據(jù)包丟失。
使用
在NetUtils菜單欄使能 Iperf 選項:
RT-Thread online packages -> IoT - internet of things -> netutils: Networking utilities for RT-Thread [*] Enable iperf-liked network performance tool
Iperf 使用的是主從式架構(gòu),即一端是服務(wù)器,另一端是客戶端,我們提供的 Iperf 軟件包實現(xiàn)了 TCP 服務(wù)器模式和客戶端模式,暫不支持 UDP 測試。下面將具體講解 2 種模式的使用方法。
Iperf 服務(wù)器模式
獲取 IP 地址
需要在 RT-Thread 上使用 Finsh/MSH 命令來獲取 IP 地址,大致效果如下:
msh />ifconfig network interface: e0 (Default) MTU: 1500 MAC: 00 04 9f 05 44 e5 FLAGS: UP LINK_UP ETHARP ip address: 192.168.12.71 gw address: 192.168.10.1 net mask : 255.255.0.0 dns server #0: 192.168.10.1 dns server #1: 223.5.5.5
記下獲得的 IP 地址 192.168.12.71(按實際情況記錄)
啟動 Iperf 服務(wù)器
需要在 RT-Thread 上使用 Finsh/MSH 命令來啟動 Iperf 服務(wù)器,大致效果如下:
msh />iperf -s -p 5001
-s 表示作為服務(wù)器啟動-p 表示監(jiān)聽 5001 端口
安裝 JPerf 測試軟件
安裝文件位于netutils/tools/jperf.rar,這個是綠色軟件,安裝實際上是解壓的過程,解壓到新文件夾即可。
進(jìn)行 jperf 測試
打開jperf.bat軟件,按如下操作進(jìn)行配置:
1、 選擇Client模式;2、 輸入剛剛獲得的 IP 地址 192.168.12.71(按實際地址填寫);3、 修改端口號為 5001;4、 點擊run Lperf!開始測試;5、 等待測試結(jié)束。測試時,測試數(shù)據(jù)會在 shell 界面和 JPerf 軟件上顯示。
Iperf 客戶端模式
獲取 PC 的 IP 地址
在 PC 的命令提示符窗口上使用 ipconfig 命令獲取 PC 的 IP 地址,記下獲得的 PC IP 地址為 192.168.12.45(按實際情況記錄)。
安裝 JPerf 測試軟件
安裝文件位于netutils/tools/jperf.rar,這個是綠色軟件,安裝實際上是解壓的過程,解壓到新文件夾即可。
開啟 jperf 服務(wù)器
打開jperf.bat軟件,按如下操作進(jìn)行配置:
1、 選擇Server模式2、 修改端口號為 50013、 點擊run Lperf!開啟服務(wù)器
啟動 Iperf 客戶端
需要在 RT-Thread 上使用 Finsh/MSH 命令來啟動 Iperf 客戶端,大致效果如下:
msh />iperf -c 192.168.12.45 -p 5001
-c 表示作為客戶端啟動,后面需要加運行服務(wù)器端的pc的 IP 地址-p 表示連接 5001 端口等待測試結(jié)束。測試時,測試數(shù)據(jù)會在 shell 界面和 JPerf 軟件上顯示。
其他網(wǎng)絡(luò)調(diào)試工具的介紹和使用
除了上述常用的網(wǎng)絡(luò)工具,RT-Thread 也提供一些開發(fā)調(diào)試中比較實用的網(wǎng)絡(luò)工具,如 NetIO 工具、 Telnet 工具和 tcpdump 工具。
NetIO 工具
NetIO用于在 OS/2 2.x 、 Windows 、 Linux 和 Unix 上進(jìn)行網(wǎng)絡(luò)性能測試的工具。它會通過 TCP/UDP 方式,使用不同大小的數(shù)據(jù)包進(jìn)行網(wǎng)絡(luò)凈吞吐量測試。
RT-Thread 目前支持的是 NetIO TCP 服務(wù)器。
NetIO 的使用請參考組件目錄下的 README ,此處不再贅述。
Telnet 工具
Telnet協(xié)議是一種應(yīng)用層協(xié)議,使用于互聯(lián)網(wǎng)及局域網(wǎng)中,使用虛擬終端機(jī)的形式,提供雙向、以文字字符串為主的交互功能。屬于 TCP/IP 協(xié)議族的其中之一,是 Internet 遠(yuǎn)程登錄服務(wù)的標(biāo)準(zhǔn)協(xié)議和主要方式,常用于網(wǎng)頁服務(wù)器的遠(yuǎn)程控制,可供用戶在本地主機(jī)運行遠(yuǎn)程主機(jī)上的工作。
RT-Thread 目前支持的是 Telnet 服務(wù)器, Telnet 客戶端連接成功后,將會遠(yuǎn)程連接到設(shè)備的 Finsh/MSH ,實現(xiàn)設(shè)備的遠(yuǎn)程控制。
Telnet 的使用請參考組件目錄下的 README ,此處不再贅述。
tcpdump 工具
tcpdump 是一款基于 RT-Thread 的捕獲IP報文的小工具, 抓包的數(shù)據(jù)可以通過文件系統(tǒng)保存,或者通過 rdb 工具導(dǎo)入PC,利用 wireshark 軟件解析。
tcpdump 的使用請參考組件目錄下的 README ,此處不再贅述。
-
組件
+關(guān)注
關(guān)注
1文章
512瀏覽量
17813 -
RT-Thread
+關(guān)注
關(guān)注
31文章
1285瀏覽量
40081
原文標(biāo)題:RT-Thread網(wǎng)絡(luò)工具集 (NetUtils) 應(yīng)用筆記——周四RTOS專欄
文章出處:【微信號:elecfans,微信公眾號:電子發(fā)燒友網(wǎng)】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
評論