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

網(wǎng)絡(luò)工具集 (NetUtils) 使用方法
RT-Thread文件系統(tǒng)的基本知識(shí)和使用方法
使用RT-Thread NetUtils組件來解決網(wǎng)絡(luò)開發(fā)過程中遇到的問題
RT-Thread編程指南
RT-Thread用戶手冊(cè)
移植RT-Thread的原理與方法
RT-Thread全球技術(shù)大會(huì):螢石研發(fā)團(tuán)隊(duì)使用RT-Thread的技術(shù)挑戰(zhàn)

RT-Thread全球技術(shù)大會(huì):Kconfig在RT-Thread中的工作機(jī)制

RT-Thread全球技術(shù)大會(huì):RT-Thread測(cè)試用例集合案例

RT-Thread學(xué)習(xí)筆記 RT-Thread的架構(gòu)概述

RT-Thread文檔_RT-Thread 潘多拉 STM32L475 上手指南

基于RT-Thread Studio學(xué)習(xí)

評(píng)論