天下苦uboot的tftp久已。
此前,uboot 由于不支持TCP协议,仅支持 UDP 协议,因此只能通过 TFTP或 NFS 进行文件传输。如今uboot已经提供TCP 协议的支持,可通过 HTTP 下载文件或其他内容。
目前的uboot版本里,除了对 TCP 协议的兼容,还添加了一个基础的 wget 应用程序。uboot上的的 wget 应用是一个命令行下载器,允许通过 TCP 从 HTTP 服务器下载文件到指定的内存地址,目前 wget 仅支持 80 端口上的 HTTP 服务器,且不支持 HTTPS。
之前很多开发者在uboot里面集成LWIP,并实现ftpclient客户端来支持快速下载内核或其他文件,而目前uboot版本可以直接使用wget工具从 HTTP 服务器下载内核或其他文件。
若想要使用http来启动内核,需要进行以下uboot配置:
CONFIG_PROT_TCP=y
CONFIG_PROT_TCP_SACK=y
CONFIG_CMD_WGET=y
CONFIG_PROT_TCP和CONFIG_CMD_WGET是需要进行配置,而配置CONFIG_PROT_TCP_SACK则启用选择性确认(SACK),以实现TCP协议的最大性能。
在uboot启动Linux,进行如下配置:
setenv autoload 0;dhcp
setenv serverip 192.168.0.1
wget $loadaddr ~/vmlinuz
或者,也可以在通过DHCP获取IP地址后,使用单个命令行加载Linux:
wget $loadaddr 192.168.0.1:~/vmlinuz