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

发布时间:2024-07-08  

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


文章来源于:电子工程世界    原文链接
本站所有转载文章系出于传递更多信息之目的,且明确注明来源,不希望被转载的媒体或个人可与我们联系,我们将立即进行删除处理。

我们与500+贴片厂合作,完美满足客户的定制需求。为品牌提供定制化的推广方案、专属产品特色页,多渠道推广,SEM/SEO精准营销以及与公众号的联合推广...详细>>

利用葫芦芯平台的卓越技术服务和新产品推广能力,原厂代理能轻松打入消费物联网(IOT)、信息与通信(ICT)、汽车及新能源汽车、工业自动化及工业物联网、装备及功率电子...详细>>

充分利用其强大的电子元器件采购流量,创新性地为这些物料提供了一个全新的窗口。我们的高效数字营销技术,不仅可以助你轻松识别与连接到需求方,更能够极大地提高“闲置物料”的处理能力,通过葫芦芯平台...详细>>

我们的目标很明确:构建一个全方位的半导体产业生态系统。成为一家全球领先的半导体互联网生态公司。目前,我们已成功打造了智能汽车、智能家居、大健康医疗、机器人和材料等五大生态领域。更为重要的是...详细>>

我们深知加工与定制类服务商的价值和重要性,因此,我们倾力为您提供最顶尖的营销资源。在我们的平台上,您可以直接接触到100万的研发工程师和采购工程师,以及10万的活跃客户群体...详细>>

凭借我们强大的专业流量和尖端的互联网数字营销技术,我们承诺为原厂提供免费的产品资料推广服务。无论是最新的资讯、技术动态还是创新产品,都可以通过我们的平台迅速传达给目标客户...详细>>

我们不止于将线索转化为潜在客户。葫芦芯平台致力于形成业务闭环,从引流、宣传到最终销售,全程跟进,确保每一个potential lead都得到妥善处理,从而大幅提高转化率。不仅如此...详细>>