rt-thread中使用lwip自带的tftp功能传输文件

rtthread中使用lwip自带的tftp功能传输文件

TFTP协议

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

硬件框图

在这里插入图片描述

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

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

RT-Thread构建框架

在这里插入图片描述

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

修改构建配置

在这里插入图片描述

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

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

61行到85行内容为:

# The set of source files associated with this SConscript file.
path = [GetCurrentDir() + '/src/include',
    GetCurrentDir() + '/src/include/ipv4',
    GetCurrentDir() + '/src/include/netif']

if not GetDepend('RT_USING_SAL'):
    path += [GetCurrentDir() + '/src/include/posix']

if GetDepend(['RT_LWIP_SNMP']):
    src += snmp_src
    path += [GetCurrentDir() + '/src/apps/snmp']

if GetDepend(['RT_LWIP_PPP']):
    src += ppp_src
    path += [GetCurrentDir() + '/src/netif/ppp']

if GetDepend(['RT_USING_LWIP_IPV6']):
    src += ipv6_src

if GetDepend(['RT_LWIP_USING_PING']):
    src += Glob('src/apps/ping/ping.c')

group = DefineGroup('lwIP', src, depend = ['RT_USING_LWIP', 'RT_USING_LWIP203'], CPPPATH = path)

Return('group')

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

....
if GetDepend(['RT_LWIP_USING_PING']):
    src += Glob('src/apps/ping/ping.c')

if GetDepend(['RT_LWIP_USING_TFTP']):
    src += Glob('src/apps/tftp/*.c')	
    
group = DefineGroup('lwIP', src, depend = ['RT_USING_LWIP', 'RT_USING_LWIP203'], CPPPATH = path)

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

#define RT_LWIP_USING_TFTP

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

....
if RT_USING_LWIP
    config RT_LWIP_USING_TFTP
        bool "Use tftp app"
        default n
    config RT_USING_LWIP_LOCAL_VERSION
        bool "Use LwIP local version only"
        default n
        help
            If don't select this option, both local version and upstream
 ....

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

在这里插入图片描述

效果演示

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

在这里插入图片描述

在这里插入图片描述

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

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

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

在这里插入图片描述

  • 4
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值