0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

RT-Thread中使用lwip自带的tftp功能传输文件

RTThread物联网操作系统 来源:未知 2023-07-24 19:35 次阅读

TFTP协议


TFTP(简单文件传输协议)是TCP/IP协议族中的一个用来在客户机与服务器之间进行文件传输的协议,端口号为69号。TFTP基于UDP协议,开销小、效率高,但是TFTP只能从服务器上获得或者写入文件,不能列出目录,也不进行认证

硬件框图


ae5e9f44-2a13-11ee-a368-dac502259ad0.png

常见的组成框图差异不大,以STM32H7为例,ARM内核与MAC控制器集成在一个MCU芯片中,外部与PHY芯片相连,经过网络变压器之后通过网线连接到PC端,后者是通过无线WIFI的方式连到远端服务器。

而从操作系统的层面来看,硬件框图就显得不重要了,对于rt-thread来说,只关注协议应用本身,与硬件的交互在移植的时候做好适配即可。下面以RT-Thread源码包中的QEMU虚拟开发板为例,介绍如何使用lwip自带的tftp功能传输文件。

RT-Thread构建框架


ae74ed80-2a13-11ee-a368-dac502259ad0.jpg

RTThread源码包提供了完整的操作系统,从内核再到组件服务层,以及经过认证的第三方的软件包,非常便于开发人员进行应用开发。开发者只需要关心和使用网络应用层提供的网络接口,而无需关心底层具体网络 协议栈类型和实现,使用tftp传输文件需要提前挂载好文件系统,本文不多叙述,我们主要关注Lwip中的网络app。

修改构建配置


ae933588-2a13-11ee-a368-dac502259ad0.png

在lwip的apps文件夹下,有tftp相关的源文件,但是rtthread并未在构建工具中开放给用户,以2.0.3版本为例,打开对应的SConscript文件,路径为

1rt-thread/components/net/lwip/lwip-2.0.3/SConscript

61行到85行内容为:


		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')这段脚本的功能是指,如果定义了相应的宏定义,则把这部分的源代码添加到工程中,参与编译。但是从这里来看,是没有添加lwip自带的tftp的部分的,因此需要修改这部分脚本,增加一个宏的判断,以及添加tftp文件夹下的.c文件,修改内容为:


		

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)

构建的脚本修改完成,还需要修改宏的添加,只有添加了RT_LWIP_USING_TFTP宏,才会把tftp下的c文件添加到工程中,这里有两种方法,一种是直接在工程根目录下的rtconfig.h中直接添加宏定义


		

1#defineRT_LWIP_USING_TFTP

另一种是修改menuconfig菜单选项,增加宏的设置,修改方法为打开rt-thread/components/net/lwip/Kconfig文件,第8行左右,增加RT_LWIP_USING_TFTP的设置


		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修改完成之后,在配置界面就会多出一个菜单选项,使能该菜单,然后使用scons构建就会自动在rtconfig.h文件中增加这个宏。

aeb52472-2a13-11ee-a368-dac502259ad0.jpg

效果演示


进入msh终端,输入help可查看支持的功能,其中 tftp_server 为以上操作实现的功能

aed2047a-2a13-11ee-a368-dac502259ad0.png

aee99d2e-2a13-11ee-a368-dac502259ad0.png

输入tftp_server并回车运行后,就启动了tftp服务器,输入ifconfig可查看开发板的ip地址,我的是192.168.75.130

af00ded0-2a13-11ee-a368-dac502259ad0.png

电脑端低开tftp工具,作为tftp客户端,在Host输入开发板的ip,端口设置为69,选择一个电脑本地的文件然后点击put即可将文件发送到开发板,如我电脑上的TOP.bin文件

af18930e-2a13-11ee-a368-dac502259ad0.png

传输完成后,在开发板msh终端输入ls即可查看刚才传输的文件。

af2b2ab4-2a13-11ee-a368-dac502259ad0.png

原文链接:http://club.rt-thread.org

———————End——————


点击阅读原文进入官网


原文标题:RT-Thread中使用lwip自带的tftp功能传输文件

文章出处:【微信公众号:RTThread物联网操作系统】欢迎添加关注!文章转载请注明出处。


声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • RT-Thread
    +关注

    关注

    31

    文章

    1285

    浏览量

    40081

原文标题:RT-Thread中使用lwip自带的tftp功能传输文件

文章出处:【微信号:RTThread,微信公众号:RTThread物联网操作系统】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    RT-Thread上CAN实践

    开箱测试RT-Thread官方已完成了对英飞凌XMC7200EVK的移植,通过shell可以看到做好了uart3的console。本文将介绍如何进行RT-ThreadCan移植。接下来我们要完成CAN_FD的驱动移植,并正常启动RT-T
    的头像 发表于 11-13 01:03 1141次阅读
    <b class='flag-5'>RT-Thread</b>上CAN实践

    开源共生 商业共赢 | RT-Thread 2024开发者大会报名启动!

    亲爱的RT-Thread开发者我们很高兴地宣布,一年一度的RDC(RT-ThreadDeveloperConference,RT-Thread开发者大会)正式启动报名!2024RT-Threa
    的头像 发表于 10-29 08:06 369次阅读
    开源共生 商业共赢 | <b class='flag-5'>RT-Thread</b> 2024开发者大会报名启动!

    2024 RT-Thread全球巡回 线下培训火热来袭!

    亲爱的RT-Thread社区成员们:我们非常高兴地宣布,2024年RT-Thread全球开发者线下培训即将拉开帷幕!24年全球巡回培训将覆盖超10座城市及国家,为开发者提供一个深入学习RT-Thread嵌入式开发的绝佳机会。
    的头像 发表于 08-07 08:35 1167次阅读
    2024 <b class='flag-5'>RT-Thread</b>全球巡回 线下培训火热来袭!

    【好书推荐】RT-Thread设备驱动开发指南

    近年来国内芯片产业和物联网产业的快速崛起,行业发展迫切需要更多人才,尤其需要掌握嵌入式操作系统等底层技术的人才。随着RT-Thread被更广泛地应用于行业中,开发者对嵌入式驱动开发的需求越来越
    的头像 发表于 08-01 08:35 617次阅读
    【好书推荐】<b class='flag-5'>RT-Thread</b>设备驱动开发指南

    RT-Thread 新里程碑达成——GitHub Star 破万!

    RT-Thread实时操作系统开源项目在GitHub上的star数量突破一万!截止发文,RT-Thread作为实时操作系统在业界Star数量排名第一!仓库地址:https://github.com
    的头像 发表于 07-04 08:35 467次阅读
    <b class='flag-5'>RT-Thread</b> 新里程碑达成——GitHub Star 破万!

    基于 RT-Thread专业版的EtherCAT主站方案

    (一)方案介绍本方案基于RT-Thread专业版,在RT-Thread端集成EtherCAT主站协议,通过EtherCAT对伺服电机或远程IO进行实时控制,具备传输速度快,实时性高,扩展设备灵活等
    的头像 发表于 06-19 08:35 887次阅读
    基于 <b class='flag-5'>RT-Thread</b>专业版的EtherCAT主站方案

    6月6日杭州站RT-Thread线下workshop,探索RT-Thread混合部署新模式!

    6月6日下午我们将在杭州举办RT-Thread混合部署线下workshop,在瑞芯微RK3568平台上实现同时运行RT-Thread和linux,本次workshop邀请到RT-Thread资深
    的头像 发表于 05-28 08:35 441次阅读
    6月6日杭州站<b class='flag-5'>RT-Thread</b>线下workshop,探索<b class='flag-5'>RT-Thread</b>混合部署新模式!

    2024 RT-Thread 全球技术大会演讲议程发布!

    RT-ThreadGlobalTechConference(RT-ThreadGTC,RT-Thread全球技术大会)致力于围绕RT-Thread基础软件技术发展、实践创新、开发者能力
    的头像 发表于 05-16 08:34 539次阅读
    2024 <b class='flag-5'>RT-Thread</b> 全球技术大会演讲议程发布!

    5月16日南京站RT-Thread线下workshop,探索RT-Thread混合部署新模式!

    5月16日下午我们将在南京举办RT-Thread混合部署线下workshop,在瑞芯微RK3568平台上实现同时运行RT-Thread和linux,本次workshop邀请到RT-Thread资深
    的头像 发表于 05-01 08:35 359次阅读
    5月16日南京站<b class='flag-5'>RT-Thread</b>线下workshop,探索<b class='flag-5'>RT-Thread</b>混合部署新模式!

    RT-Thread混合部署Workshop北京站来啦!

    4月25日,下午我们将在北京举办RT-Thread混合部署线下workshop,在瑞芯微RK3568平台上实现同时运行RT-Thread和linux,本次workshop邀请到RT-Thread资深
    的头像 发表于 04-19 08:34 437次阅读
    <b class='flag-5'>RT-Thread</b>混合部署Workshop北京站来啦!

    4月25日北京站RT-Thread线下workshop,探索RT-Thread混合部署新模式

    4月25日,下午我们将在北京举办RT-Thread混合部署线下workshop,在瑞芯微RK3568平台上实现同时运行RT-Thread和linux,本次workshop邀请到RT-Thread资深
    的头像 发表于 04-16 08:35 416次阅读
    4月25日北京站<b class='flag-5'>RT-Thread</b>线下workshop,探索<b class='flag-5'>RT-Thread</b>混合部署新模式

    4月10日深圳场RT-Thread线下workshop,探索RT-Thread混合部署新模式!

    4月10日我们将在深圳福田举办RT-Thread混合部署线下workshop,在瑞芯微RK3568平台上实现同时运行RT-Thread和linux,本次workshop邀请到RT-Thread资深嵌入式软件工程师农晓明老师为您讲
    的头像 发表于 03-27 11:36 815次阅读
    4月10日深圳场<b class='flag-5'>RT-Thread</b>线下workshop,探索<b class='flag-5'>RT-Thread</b>混合部署新模式!

    4月10日深圳场RT-Thread线下workshop,探索RT-Thread混合部署新模式!

    4月10日我们将在深圳福田举办RT-Thread混合部署线下workshop,在瑞芯微RK3568平台上实现同时运行RT-Thread和linux,本次workshop邀请到RT-Thread资深
    的头像 发表于 03-27 08:34 527次阅读
    4月10日深圳场<b class='flag-5'>RT-Thread</b>线下workshop,探索<b class='flag-5'>RT-Thread</b>混合部署新模式!

    RT-Thread成为恩智浦注册合作伙伴,共同赋能工业与物联网应用开发!

    前不久,恩智浦半导体加入RT-Thread全球合作伙伴计划,成为RT-Thread高级会员合作伙伴。同时,RT-Thread现已成为恩智浦注册合作伙伴。
    的头像 发表于 03-15 09:15 853次阅读

    恩智浦半导体正式加入RT-Thread全球合作伙伴计划!

    前不久,恩智浦半导体正式加入RT-Thread全球合作伙伴计划,成为RT-Thread高级会员合作伙伴。同时,RT-Thread现已成为恩智浦注册合作伙伴(RT-Thread| 简介合
    的头像 发表于 03-14 10:40 615次阅读
    恩智浦半导体正式加入<b class='flag-5'>RT-Thread</b>全球合作伙伴计划!