前言
TinyServer是FreeCRT V0.9.8.0开始引入的一个功能,包括了DHCP、TFTP、HTTP等server服务,为嵌入式软件工作者提供方便的IP地址动态分配和文件传输功能。
最初作者是用tftp32这个工具来进行日常工作的,但tftp32始终不令人满意。另外,对于目前的嵌入式开发(一般版本镜像都会超过10Mb),使用tftp来传输文件,确实是慢了点,http传输文件似乎更加方便。所以才推出TinyServer这个功能。以下分别对几个子功能做介绍。
1. 广义文件系统
为了实现对不同网络协议的文件进行统一接口的访问,作者开发了这个所谓的“广义文件系统”,意思是突破本地文件系统的藩篱。其思想有点类似与libcurl库,只不过我是用c++实现的,目前只是简单的实现了tftp、ftp、sftp和本地的部分文件操作接口。
文件路径格式:prototol://host:port/pathame?username=[var]&password=[var]
广义文件系统的文件路径格式需要满足以上的格式要求,其中protocol目前支持的范围为:local、tftp、ftp、sftp。username和password仅对ftp和sftp有效,如果ftp支持匿名,也就不必须。host字段支持域名或ip地址。
以IP地址为192.168.1.1的主机的ftp服务器路径可以写成:
ftp://192.168.1.1/pathname?username=root&password=root
如果没有使用自定义的端口,则port字段可以省略。
2. TFTP服务器
tftp是基于dup的最简单的文件传输协议,对于嵌入式开发有着重要的作用,因为相对于TCP来说,UDP的实现要简单的多,在没有完整的协议栈而又需要传输较大的文件时,TFTP的作用就愈加凸显出来。TFTP的配置界面如下:

其中可供用户改变的字段解释如下:
- TFTP Server Enable – 用户控制server启动或停止
- Bind Interface – 绑定到计算机的具体网络接口,如果选中0.0.0.0那么所有接口都使能
- Log Level – 服务器的调试等级,调试信息可以在view -> Tiny Server Tracer里查看
- Port – TFTP server提供服务的端口
- Timout – 协议层面的超时时间
- Max retry – 超时重新尝试的次数
- Read Enable – 是否允许读操作
- Write Enable – 是否允许写操作
- Path restriction – 是否可以访问非服务器根目录内文件
- Download – 广义文件系统路径,从这个路径下载文件
- Upload – 广义文件系统路径,上传文件到这个路径
3. HTTP服务器
对于有完整协议栈的的系统,要进行文件访问,tcp是更有选择,因为通常它会比tftp提供更大的传输率。可供选择的协议有ftp、sftp、http等,而http会是更好的选择,因为它在提供文件服务器的同时,还可以通过网页的形式来进行局域网的文件分享。所以tiny server选择http作为tcp的文件服务器。配置界面如下:

其中前三项与TFP的一样,不再赘述,其余几项的说明:
1. Port – HTTP的端口,默认是80
2. Title – 通过浏览器浏览网页时显示的title,默认是“Welcome to FreeCRT!”
3. Home – 广义文件系统http根目录
在linux下可以通过wget命令来获取文件:
wget http://178.178.1.1/upgrade.img
通过浏览器来浏览文件http server下的文件或下载:

通过广义文件系统的支持,事实上实现了服务器的一级跳板功能,对于有此需求的朋友,将会极大的提升工作效率。
4. DHCP服务器
DHCP服务器最主要的功能是给主机分配IP地址,对此Tiny Server中的实现支持静态和动态两种分配地址模式,支持地址的renew和release等基本功能,但是目前不支持,服务器重启时保存当前状态的需求。DHCP服务器的主界面如下,其中IP Pool是用户自定义的地址池,包括动态和静态的,可以通过右键菜单进行增、删、改。Active Lease包括了当前活动的地址租约,可以通过右键菜单进行删除操作。

地址池的配置界面如下:

这些字段基本字面意思已经非常直白,会用的肯定懂,不懂的这辈子也不太会用,就不细说了。
后记
非常讨厌写文档,干巴巴的,没一点文采可供施展,就算是Tiny Server的这个topic的文档吧。语焉不详之处敬请谅解,最后说明一下,Tiny Server作为嵌入式开发的辅助工具,目前基本可用,但要作为专业服务器,那是不行的,当然Tiny Server确实还有很多值得探讨和挖掘的地方,留待日后吧!
2022-01-29