TFTP協(xié)議
TFTP(簡(jiǎn)單文件傳輸協(xié)議)是TCP/IP協(xié)議族中的一個(gè)用來(lái)在客戶機(jī)與服務(wù)器之間進(jìn)行文件傳輸?shù)膮f(xié)議,端口號(hào)為69號(hào)。TFTP基于UDP協(xié)議,開銷小、效率高,但是TFTP只能從服務(wù)器上獲得或者寫入文件,不能列出目錄,也不進(jìn)行認(rèn)證。
硬件框圖
常見的組成框圖差異不大,以STM32H7為例,ARM內(nèi)核與MAC控制器集成在一個(gè)MCU芯片中,外部與PHY芯片相連,經(jīng)過(guò)網(wǎng)絡(luò)變壓器之后通過(guò)網(wǎng)線連接到PC端,后者是通過(guò)無(wú)線WIFI的方式連到遠(yuǎn)端服務(wù)器。
而從操作系統(tǒng)的層面來(lái)看,硬件框圖就顯得不重要了,對(duì)于rt-thread來(lái)說(shuō),只關(guān)注協(xié)議應(yīng)用本身,與硬件的交互在移植的時(shí)候做好適配即可。下面以RT-Thread源碼包中的QEMU虛擬開發(fā)板為例,介紹如何使用lwip自帶的tftp功能傳輸文件。
RT-Thread構(gòu)建框架
RTThread源碼包提供了完整的操作系統(tǒng),從內(nèi)核再到組件服務(wù)層,以及經(jīng)過(guò)認(rèn)證的第三方的軟件包,非常便于開發(fā)人員進(jìn)行應(yīng)用開發(fā)。開發(fā)者只需要關(guān)心和使用網(wǎng)絡(luò)應(yīng)用層提供的網(wǎng)絡(luò)接口,而無(wú)需關(guān)心底層具體網(wǎng)絡(luò) 協(xié)議棧類型和實(shí)現(xiàn),使用tftp傳輸文件需要提前掛載好文件系統(tǒng),本文不多敘述,我們主要關(guān)注Lwip中的網(wǎng)絡(luò)app。
修改構(gòu)建配置
在lwip的apps文件夾下,有tftp相關(guān)的源文件,但是rtthread并未在構(gòu)建工具中開放給用戶,以2.0.3版本為例,打開對(duì)應(yīng)的SConscript文件,路徑為
1rt-thread/components/net/lwip/lwip-2.0.3/SConscript
61行到85行內(nèi)容為:
1#ThesetofsourcefilesassociatedwiththisSConscriptfile. 2path=[GetCurrentDir()+'/src/include', 3GetCurrentDir()+'/src/include/ipv4', 4GetCurrentDir()+'/src/include/netif'] 5ifnotGetDepend('RT_USING_SAL'): 6path+=[GetCurrentDir()+'/src/include/posix'] 7ifGetDepend(['RT_LWIP_SNMP']): 8src+=snmp_src 9path+=[GetCurrentDir()+'/src/apps/snmp'] 10ifGetDepend(['RT_LWIP_PPP']): 11src+=ppp_src 12path+=[GetCurrentDir()+'/src/netif/ppp'] 13ifGetDepend(['RT_USING_LWIP_IPV6']): 14src+=ipv6_src 15ifGetDepend(['RT_LWIP_USING_PING']): 16src+=Glob('src/apps/ping/ping.c') 17group=DefineGroup('lwIP',src,depend=['RT_USING_LWIP','RT_USING_LWIP203'],CPPPATH=path) 18Return('group')這段腳本的功能是指,如果定義了相應(yīng)的宏定義,則把這部分的源代碼添加到工程中,參與編譯。但是從這里來(lái)看,是沒有添加lwip自帶的tftp的部分的,因此需要修改這部分腳本,增加一個(gè)宏的判斷,以及添加tftp文件夾下的.c文件,修改內(nèi)容為:
1.... 2ifGetDepend(['RT_LWIP_USING_PING']): 3src+=Glob('src/apps/ping/ping.c') 4ifGetDepend(['RT_LWIP_USING_TFTP']): 5src+=Glob('src/apps/tftp/*.c') 6group=DefineGroup('lwIP',src,depend=['RT_USING_LWIP','RT_USING_LWIP203'],CPPPATH=path)
構(gòu)建的腳本修改完成,還需要修改宏的添加,只有添加了RT_LWIP_USING_TFTP宏,才會(huì)把tftp下的c文件添加到工程中,這里有兩種方法,一種是直接在工程根目錄下的rtconfig.h中直接添加宏定義
1#defineRT_LWIP_USING_TFTP
另一種是修改menuconfig菜單選項(xiàng),增加宏的設(shè)置,修改方法為打開rt-thread/components/net/lwip/Kconfig文件,第8行左右,增加RT_LWIP_USING_TFTP的設(shè)置
1.... 2ifRT_USING_LWIP 3configRT_LWIP_USING_TFTP 4bool"Usetftpapp" 5defaultn 6configRT_USING_LWIP_LOCAL_VERSION 7bool"UseLwIPlocalversiononly" 8defaultn 9help 10Ifdon'tselectthisoption,bothlocalversionandupstream 11....Kconfig修改完成之后,在配置界面就會(huì)多出一個(gè)菜單選項(xiàng),使能該菜單,然后使用scons構(gòu)建就會(huì)自動(dòng)在rtconfig.h文件中增加這個(gè)宏。
效果演示
進(jìn)入msh終端,輸入help可查看支持的功能,其中 tftp_server 為以上操作實(shí)現(xiàn)的功能
輸入tftp_server并回車運(yùn)行后,就啟動(dòng)了tftp服務(wù)器,輸入ifconfig可查看開發(fā)板的ip地址,我的是192.168.75.130
在電腦端低開tftp工具,作為tftp客戶端,在Host輸入開發(fā)板的ip,端口設(shè)置為69,選擇一個(gè)電腦本地的文件然后點(diǎn)擊put即可將文件發(fā)送到開發(fā)板,如我電腦上的TOP.bin文件
傳輸完成后,在開發(fā)板msh終端輸入ls即可查看剛才傳輸?shù)奈募?/span>
原文鏈接:http://club.rt-thread.org
———————End———————
點(diǎn)擊閱讀原文進(jìn)入官網(wǎng)
原文標(biāo)題:RT-Thread中使用lwip自帶的tftp功能傳輸文件
文章出處:【微信公眾號(hào):RTThread物聯(lián)網(wǎng)操作系統(tǒng)】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
-
RT-Thread
+關(guān)注
關(guān)注
31文章
1305瀏覽量
40386
原文標(biāo)題:RT-Thread中使用lwip自帶的tftp功能傳輸文件
文章出處:【微信號(hào):RTThread,微信公眾號(hào):RTThread物聯(lián)網(wǎng)操作系統(tǒng)】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
RT-Thread上CAN實(shí)踐
![<b class='flag-5'>RT-Thread</b>上CAN實(shí)踐](https://file1.elecfans.com/web2/M00/C4/8A/wKgZomX0EhWACv8DAAAUet8ikhs451.png)
開源共生 商業(yè)共贏 | RT-Thread 2024開發(fā)者大會(huì)報(bào)名啟動(dòng)!
![開源共生 商業(yè)共贏 | <b class='flag-5'>RT-Thread</b> 2024開發(fā)者大會(huì)報(bào)名啟動(dòng)!](https://file1.elecfans.com/web2/M00/C4/8A/wKgZomX0EhWACv8DAAAUet8ikhs451.png)
2024 RT-Thread全球巡回 線下培訓(xùn)火熱來(lái)襲!
![2024 <b class='flag-5'>RT-Thread</b>全球巡回 線下培訓(xùn)火熱來(lái)襲!](https://file1.elecfans.com/web2/M00/C4/8A/wKgZomX0EhWACv8DAAAUet8ikhs451.png)
【好書推薦】RT-Thread設(shè)備驅(qū)動(dòng)開發(fā)指南
![【好書推薦】<b class='flag-5'>RT-Thread</b>設(shè)備驅(qū)動(dòng)開發(fā)指南](https://file1.elecfans.com/web2/M00/C4/8A/wKgZomX0EhWACv8DAAAUet8ikhs451.png)
RT-Thread 新里程碑達(dá)成——GitHub Star 破萬(wàn)!
![<b class='flag-5'>RT-Thread</b> 新里程碑達(dá)成——GitHub Star 破萬(wàn)!](https://file1.elecfans.com/web2/M00/C4/8A/wKgZomX0EhWACv8DAAAUet8ikhs451.png)
基于 RT-Thread專業(yè)版的EtherCAT主站方案
![基于 <b class='flag-5'>RT-Thread</b>專業(yè)版的EtherCAT主站方案](https://file1.elecfans.com/web2/M00/C4/8A/wKgZomX0EhWACv8DAAAUet8ikhs451.png)
6月6日杭州站RT-Thread線下workshop,探索RT-Thread混合部署新模式!
![6月6日杭州站<b class='flag-5'>RT-Thread</b>線下workshop,探索<b class='flag-5'>RT-Thread</b>混合部署新模式!](https://file1.elecfans.com/web2/M00/C4/8A/wKgZomX0EhWACv8DAAAUet8ikhs451.png)
2024 RT-Thread 全球技術(shù)大會(huì)演講議程發(fā)布!
![2024 <b class='flag-5'>RT-Thread</b> 全球技術(shù)大會(huì)演講議程發(fā)布!](https://file1.elecfans.com/web2/M00/C4/8A/wKgZomX0EhWACv8DAAAUet8ikhs451.png)
5月16日南京站RT-Thread線下workshop,探索RT-Thread混合部署新模式!
![5月16日南京站<b class='flag-5'>RT-Thread</b>線下workshop,探索<b class='flag-5'>RT-Thread</b>混合部署新模式!](https://file1.elecfans.com/web2/M00/C4/8A/wKgZomX0EhWACv8DAAAUet8ikhs451.png)
RT-Thread混合部署Workshop北京站來(lái)啦!
![<b class='flag-5'>RT-Thread</b>混合部署Workshop北京站來(lái)啦!](https://file1.elecfans.com/web2/M00/C4/8A/wKgZomX0EhWACv8DAAAUet8ikhs451.png)
4月25日北京站RT-Thread線下workshop,探索RT-Thread混合部署新模式
![4月25日北京站<b class='flag-5'>RT-Thread</b>線下workshop,探索<b class='flag-5'>RT-Thread</b>混合部署新模式](https://file1.elecfans.com/web2/M00/C4/8A/wKgZomX0EhWACv8DAAAUet8ikhs451.png)
4月10日深圳場(chǎng)RT-Thread線下workshop,探索RT-Thread混合部署新模式!
![4月10日深圳場(chǎng)<b class='flag-5'>RT-Thread</b>線下workshop,探索<b class='flag-5'>RT-Thread</b>混合部署新模式!](https://file1.elecfans.com/web2/M00/C6/D0/wKgaomYDlJyAKUBmAAAgR-TqYwc187.png)
4月10日深圳場(chǎng)RT-Thread線下workshop,探索RT-Thread混合部署新模式!
![4月10日深圳場(chǎng)<b class='flag-5'>RT-Thread</b>線下workshop,探索<b class='flag-5'>RT-Thread</b>混合部署新模式!](https://file1.elecfans.com/web2/M00/C4/8A/wKgZomX0EhWACv8DAAAUet8ikhs451.png)
RT-Thread成為恩智浦注冊(cè)合作伙伴,共同賦能工業(yè)與物聯(lián)網(wǎng)應(yīng)用開發(fā)!
恩智浦半導(dǎo)體正式加入RT-Thread全球合作伙伴計(jì)劃!
![恩智浦半導(dǎo)體正式加入<b class='flag-5'>RT-Thread</b>全球合作伙伴計(jì)劃!](https://file1.elecfans.com/web2/M00/C5/31/wKgaomXyY_eAHGhqAAAkpBZI8PE901.png)
評(píng)論