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
