WSL2搭建TFTP服务器实现STM32网络启动全攻略

1. 项目背景与核心挑战

去年在给正点原子STM32MP157开发板做Linux系统移植时,我遇到了一个看似简单却极其折磨人的问题——如何在Windows环境下通过WSL2搭建TFTP服务器实现网络启动。这个需求在嵌入式开发中非常典型:我们需要频繁修改内核镜像和设备树文件,每次都用读卡器物理烧写效率太低,网络启动就成了必备技能。

理论上这应该是个半小时就能搞定的标准操作:WSL2提供Linux环境,安装配置tftp-hpa服务端,开发板通过uboot的tftp命令获取镜像。但实际落地时,Windows Defender防火墙和WSL2特殊的网络架构让整个过程变成了"打地鼠"式的排错游戏。最崩溃的是,同样的配置在纯Linux主机上五分钟就能跑通,在WSL2环境下却要面对各种玄学问题。

需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。

2. 环境搭建与基础配置

2.1 WSL2环境准备

首先确保Windows 10/11版本号在2004以上,以管理员身份运行:

bash复制wsl --install -d Ubuntu-22.04
wsl --set-version Ubuntu-22.04 2

关键点在于WSL2的网络模式选择。与WSL1的桥接网络不同,WSL2采用NAT模式,会创建一个虚拟交换机vEthernet (WSL)。这意味着:

  • WSL2实例有自己的IP段(通常是172.x.x.x)
  • 主机访问WSL2需要走localhost转发
  • 局域网设备(如开发板)无法直接访问WSL2内的服务

2.2 TFTP服务安装配置

在WSL2中安装TFTP服务端:

bash复制sudo apt update
sudo apt install tftp-hpa tftpd-hpa

配置文件/etc/default/tftpd-hpa需要特别注意:

bash复制TFTP_USERNAME="tftp"
TFTP_DIRECTORY="/srv/tftp"  # 必须777权限
TFTP_ADDRESS=":69"
TFTP_OPTIONS="--secure --create"

这里有个巨坑:WSL2的systemd支持不完整,需要手动启动服务:

bash复制sudo service tftpd-hpa restart
sudo 

内容推荐

已经到底了哦
已经到底了哦