当前位置: 首页 > 科技观察

在鸿蒙设备上运行TFTP服务器,实现文件上传、下载、保存

时间:2023-03-18 22:14:59 科技观察

更多内容请访问:与华为官方共建的鸿蒙技术社区https://harmonyos.51cto.com/#zzYesterday唐先生发布了一款可以运行在鸿蒙Hi3861开发板上的Python解释器。不知道的可以去唐老师的帖子。:-)我们知道Python是一种无需编译即可解释执行的脚本语言。有了Python解释器,你可能希望如果能直接把Python脚本文件上传到开发板,然后发出命令执行,就不需要像C代码那样编译烧录运行了。于是,开始尝试将TFTP服务器移植到鸿蒙Hi3861开发板上。经过半天的移植和一天的调试,TFTP服务器终于成功移植到Hi3861上了。没错,在352KB内存,2M闪存的Hi3861开发板上成功运行了一个TFTP服务器。可以将PC上的文件上传到开发板,掉电永久保存!当然上传的文件也不能太大。以下是整个迁移调试过程中的关键过程记录。什么是TFTP?TFTP是TrivialFileTransferProtocol的英文缩写。TFTP基于UDP,协议本身比较简单,其RFC1350官方文档只有11页(TCP的RFC793文档有85页)。如果你有兴趣,你可以自己从头实现一个;而为了快速验证Hi3861的可行性,我选择了直接移植。TFTP服务器实现了哪些功能?TFTP应该实现的功能:1.支持文件上传;2.支持文件下载;3.支持文件持久化存储,使用鸿蒙文件系统API接口。运行效果PC通过网线连接无线路由器,虚拟机网口桥接网卡,IP地址:192.168.1.157;开发板通过WiFi连接无线路由器,IP地址:192.168.1.151;下图是运行效果,左边是虚拟机上面shell执行的命令;用到的几个命令的格式是:1.put命令,上传本地文件到服务器,格式:putlocalfileremotefile2。get命令,将服务器上的文件下载到本地,格式:getremotenamelocalname3.quit命令,退出session,想试试运行效果,可以直接下载本帖附带的代码编译运行。如何编译1、将本贴所附的tftp代码解压到openharmony源码的顶层目录;2、修改openharmony的build/lite/product/wifiiot.json文件:将//applications/sample/wifi-iot/app替换为//tftp:tftp;3.在openharmony源码顶层目录执行pythonbuild.pywifiiot;调试过程中用到的工具和方法不仅仅是常规的串口工具,还有几个工具(移植其他网络协议时可以参考):1.tftp客户端命令行工具(sudoaptinstalltftp下载);2、tcpdump抓包工具;抓包一个网口的所有包:sudotcpdump-ieth0-wtftp.pcap(-i指定网口,-w指定保存的数据文件)3.WireShark是一款抓包分析工具;tcpdump抓到的数据包都是这个网口的数据。用WireShark分析时,可以使用过滤表达式:tftpfilterTFTP协议的数据包;解决的问题在迁移过程中,解决了几个问题:1.解决了错误“Modetoolong/notNULLterminated”,导致上传失败;2.解决了读取时文件大小超出文件实际大小的问题;3.解决了DATA响应数据为空导致下载失败的问题;附件说明1、tftp.zip为本移植项目的源代码;2、rfc1350.pdf是TFTP协议参考文档。了解更多请访问:与华为官方共建鸿蒙科技社区https://harmonyos.51cto.com/#zz