
关注HarmonyOS技术社区,回复【鸿蒙】送价值399元的鸿蒙开发板套件(即将开奖,赶快参与哦!),还可以免费下载鸿蒙入门资料!
👇扫码立刻关注👇

专注开源技术,共建鸿蒙生态
前几天唐老师发布了能够运行在鸿蒙 Hi3861 开发板上的 Python 解释器,不知道的可以看看这篇《鸿蒙开发终于可以用Python了!》。
我们知道,Python 是一种脚本语言,可以解释执行,不需要编译。
有了 Python 解释器,大家可能会希望——如果能直接把 Python 脚本文件上传到开发板上,然后发个命令就可以执行就好了,而不需要像 C 代码那样需要编译、烧录才能运行。
于是,我开始尝试——将 TFTP 服务器移植到鸿蒙 Hi3861 开发板上。经过半天的移植和一天的调试,终于把 TFTP 服务器在 Hi3861 上移植成功了。
没错,在内存 352KB、闪存 2M 的 Hi3861 开发板上成功运行了一个 TFTP 服务器,你可以将 PC 上的文件上传到开发板上,而且可以断电持久保存!当然,你上传的文件不能太大。
以下是整个移植和调试过程中的关键过程记录。
01
TFTP 是什么?
TFTP 是简单文件传输协议 Trivial File Transfer Protocol 的英文缩写。
TFTP 是基于 UDP 的,协议本身比较简单,它的 RFC 1350 官方文档也只有 11 页(TCP 的 RFC 793 文档有 85 页)。
如果大家如果有兴趣,完全可以自己从零实现一个;而我为了能够快速验证在 Hi3861 的可行性,选择了直接移植。
02
TFTP 服务器实现了哪些功能?
已经实现了 TFTP 该有的功能:
支持文件上传。
支持文件下载。
支持文件持久保存,使用了鸿蒙的文件系统 API 接口。
03
运行效果
PC 通过网线连接无线路由器,虚拟机网口桥接网卡,IP 地址:192.168.1.157。
开发板连接通过 WiFi 连接到无线路由器,IP 地址:192.168.1.151。

其中的用到的几个命令格式为:
put 命令,将本地文件上传到服务器,格式:put localfile remotefile。
get 命令,将服务器上的文件下载到本地,格式:get remotename localname。
quit 命令,退出会话。
想尝试运行效果的,可以直接下载本帖附件的代码进行编译,运行。
04
如何编译
步骤如下:
将本帖附件 tftp 代码解压到 openharmony 源码顶层目录。
修改 openharmony 的 build/lite/product/wifiiot.json 文件,将其中的 applications/sample/wifi-iot/app 替换为 tftp:tftp。
在 openharmony 源码的顶层目录,执行 python build.py wifiiot。
05
调试过程中用到的工具和方法
除了常规的串口工具之外,还用到了几个工具(移植其他网络协议时可供参考):
tftp 客户端命令行工具(sudo apt install tftp下载)。
tcpdump 抓包工具:抓取某个网口上的全部数据包:sudo tcpdump -i eth0 -w tftp.pcap(-i 指定网口,-w 指定保存的数据文件)。
WireShark 抓包和分析工具:tcpdump 抓到的数据包是这个网口上的全部数据,用 WireShark 分析时,可以用过滤表达式:tftp 过滤 TFTP 协议的数据包。
06
解决的问题
移植过程中解决了这么几个问题:
解决了报错"Mode too long/not NULL terminated",导致的上传失败。
解决了文件读取时 size 超过了文件实际尺寸的问题。
解决了 DATA 响应数据为空,导致的下载失败的问题。
07
附件说明
①tftp.zip 是本移植项目源码。
②rfc1350.pdf 是 TFTP 协议参考文档。(请通过阅读原文下载)

点“阅读原文”下载源码




