常用功能

端口转发

一次配置,可以实现 Windows端口==WSL端口

  1. 在WINDOWS用户目录下创建一个.wslconfig文件
[wsl2]
localhostForwarding=true
  • PS 如果Windows本地启动了指定端口, 这时WSL中可以使用相同的端口, 但是localhost:port 将指向Windows的服务
  1. 也可以直接在wsl的设置里将网络模式选择为Mirrored

vhdx 内存优化

导入Hyper-V

# 启用Hyper-V功能(如果需要)
Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Hyper-V -All

# 导入Hyper-V模块
Import-Module Hyper-V

运行优化命令

optimize-vhd命令需要在管理员权限的PowerShell中运行,并且需要Hyper-V模块支持。

optimize-vhd -Path "D:\00.wsl\ext4.vhdx" -Mode full

windows 找出端口占用并释放

netstat -ano | findstr :5000  # 找到端口占用的pid
taskkill /pid 1234 /f # kill tash /f 强制结束

开启ssh远程连接

powershell管理员

# 安装 OpenSSH 服务端
Add-WindowsCapability -Online -Name OpenSSH.Server~~~~0.0.1.0

# 启动 SSH 服务
Start-Service sshd

# 设置为开机自启
Set-Service -Name sshd -StartupType 'Automatic'

# 检查并创建防火墙放行规则(通常安装时会自动创建,运行此命令确保放行)
if (!(Get-NetFirewallRule -Name "OpenSSH-Server-In-TCP" -ErrorAction SilentlyContinue)) {
New-NetFirewallRule -Name 'OpenSSH-Server-In-TCP' -DisplayName 'OpenSSH Server (sshd)' -Enabled True -Direction Inbound -Protocol TCP -Action Allow -LocalPort 22
}

windows usb 转到 wsl

WSL2 没有原生 USB 主机支持,标准做法是用 usbipd-win(USB/IP 转发)。Windows 11 + WSL2 内核已内置 USB/IP 客户端。

  1. Windows 侧(管理员 PowerShell)
winget install --id dorssel.usbipd-win
# 重启终端后
usbipd list # 找到设备的 BUSID,例如 2-4
usbipd bind --busid 2-4 # 只需做一次(共享该设备)
usbipd attach --wsl --busid 2-4 # 每次插拔后需要重连

想插上就自动接管:

usbipd attach --wsl --busid 2-4 --auto-attach   # 前台常驻

注意:attach 期间 Windows 侧会失去该设备(独占转移),detach 或 usbipd detach –busid 2-4 才归还。

  1. Ubuntu 侧
sudo apt install linux-tools-generic hwdata
sudo update-alternatives --install /usr/local/bin/usbip usbip \
/usr/lib/linux-tools/*/usbip 20
lsusb # 应该能看到设备

串口类设备会出现在 /dev/ttyUSB0 或 /dev/ttyACM0。权限问题:

sudo usermod -aG dialout,plugdev $USER   # 重开 shell 生效

/etc/wsl.conf 里加 [boot]\nsystemd=true 可以让 udev 正常跑,规则才生效。

  1. 驱动不在 WSL2 内核里怎么办

先试 sudo modprobe ftdi_sio(或 cp210x / ch341 / cdc_acm)。报 module not found 就得自己编 WSL2 内核(microsoft/WSL2-Linux-Kernel,改 .config 打开对应 driver,然后 .wslconfig 里 kernel= 指向
bzImage)。JTAG 仿真器(XDS100/J-Link)走的是 libusb,通常不需要内核驱动,lsusb 能看到就够了。

  1. 只是想读 U 盘/硬盘

别绕 usbipd,直接:

wsl –mount \.\PHYSICALDRIVE2 # 加 –bare 交给 Linux 自己处理分区