news 2026/5/25 1:17:14

# WSL2 中使用 USB 串口设备:一键挂载脚本详解> 让 WSL2 访问 Windows 下的 USB 转串口设备,告别繁琐的命令行操作## 背景:WSL2 的 USB 设备访问难题

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
# WSL2 中使用 USB 串口设备:一键挂载脚本详解> 让 WSL2 访问 Windows 下的 USB 转串口设备,告别繁琐的命令行操作## 背景:WSL2 的 USB 设备访问难题

WSL2 挂载 USB 串口设备脚本解析

准备工作确保 WSL2 内核为最新版本 Windows 端以管理员身份安装usbipd-win

winget install dorssel.usbipd-win

WSL2 中安装工具包:

sudo apt install usbutils

脚本功能实现自动检测usbipd.exe路径,支持默认安装位置和 PATH 环境变量 交互式列出所有 USB 设备信息(BUSID/VID:PID/描述) 自动执行设备绑定和挂载操作 验证设备节点并设置权限为 666

脚本使用流程保存脚本为mount_serial.sh并赋予执行权限:

chmod +x mount_serial.sh

运行脚本并选择设备编号:

./mount_serial.sh

成功后会显示设备挂载路径(如/dev/ttyUSB0

核心代码逻辑设备路径检测采用 fallback 机制:

USBIPD="/mnt/c/Program Files/usbipd-win/usbipd.exe" [ ! -f "$USBIPD" ] && USBIPD="usbipd.exe"

设备列表解析使用 awk 处理:

busid=$(echo "$device" | awk '{print $1}') vid_pid=$(echo "$device" | awk '{print $2}') desc=$(echo "$device" | cut -d' ' -f3-)

权限设置命令:

sudo chmod 666 /dev/ttyUSB*

故障排查方案权限问题解决方案:

Start-Process PowerShell -Verb RunAs -ArgumentList "usbipd bind -b <BUSID>"

设备未识别时检查内核日志:

dmesg | grep -i usb

确认内核模块支持:

zgrep CONFIG_USB_SERIAL /proc/config.gz

自动化改进建议添加设备自动检测逻辑示例:

auto_attach() { for dev in "${devices[@]}"; do if [[ $dev == *"FTDI"* ]]; then busid=$(echo "$dev" | awk '{print $1}') "$USBIPD" attach --wsl -b "$busid" break fi done }

持久化配置方法将常用命令添加到.bashrc

alias mount-arduino='usbipd attach --wsl -b 1-1'

创建 udev 规则文件(如需固定设备节点):

echo 'KERNEL=="ttyUSB*", MODE="0666"' | sudo tee /etc/udev/rules.d/99-serial.rules
#!/bin/bash # ============================================== # 脚本: mount_serial.sh # 用途: 在 WSL2 中选择一个 USB 串口设备,并挂载到 WSL 中 # 前提: 已在 Windows 端安装 usbipd-win (winget install dorssel.usbipd-win) # ============================================== # usbipd.exe 的路径(通常在这里) USBIPD="/mnt/c/Program Files/usbipd-win/usbipd.exe" # 如果上面的路径不存在,尝试用系统 PATH 中的 usbipd if [ ! -f "$USBIPD" ]; then USBIPD="usbipd.exe" fi echo "==============================" echo " WSL2 USB 串口挂载工具" echo "==============================" # 1. 检查 usbipd 是否可用(修正:使用 --version 参数) echo "[*] 检查 usbipd 是否可用..." if ! "$USBIPD" --version &> /dev/null; then echo "[错误] 无法运行 usbipd.exe,请确认已安装 usbipd-win。" echo "安装命令 (管理员 PowerShell): winget install dorssel.usbipd-win" exit 1 fi echo "[✓] usbipd 正常" # 2. 获取 USB 设备列表 echo "[*] 正在获取 USB 设备列表..." mapfile -t devices < <("$USBIPD" list 2>/dev/null | tail -n +3) # 跳过标题行 if [ ${#devices[@]} -eq 0 ]; then echo "[!] 没有找到任何 USB 设备。请检查设备是否已连接。" exit 1 fi echo "" echo "可用的 USB 设备:" echo "--------------------------------------------------------------" # 打印设备列表并构建选项数组 options=() index=1 for line in "${devices[@]}"; do # 输出格式: BUSID VID:PID 描述 # 例: 1-1 1a86:7523 USB Serial busid=$(echo "$line" | awk '{print $1}') vidpid=$(echo "$line" | awk '{print $2}') desc=$(echo "$line" | cut -d' ' -f3-) echo " [$index] BUSID=$busid $vidpid $desc" options+=("$busid|$desc") ((index++)) done echo "--------------------------------------------------------------" # 3. 让用户选择一个设备 read -p "请输入要挂载的设备编号 [1-$((index-1))]: " choice if ! [[ "$choice" =~ ^[0-9]+$ ]] || [ "$choice" -lt 1 ] || [ "$choice" -ge "$index" ]; then echo "[错误] 无效的选择。" exit 1 fi selected="${options[$((choice-1))]}" busid=${selected%%|*} desc=${selected#*|} echo "你选择了: BUSID=$busid 描述: $desc" # 4. 绑定(bind)设备 —— 需要管理员权限 echo "[*] 正在绑定设备 (可能需要管理员权限)..." if ! "$USBIPD" bind -b "$busid" 2>&1; then echo "[警告] 绑定失败,可能是因为权限不足。" echo "请用管理员身份打开一个新的 PowerShell 窗口,执行以下命令:" echo " usbipd bind -b $busid" echo " usbipd attach --wsl -b $busid" echo "然后在本脚本中直接按回车尝试 attach。" read -p "按回车继续尝试 attach..." fi # 5. 将设备挂载到 WSL echo "[*] 正在挂载设备到 WSL..." if "$USBIPD" attach --wsl -b "$busid" 2>&1; then echo "[✓] 设备已挂载。" else echo "[错误] 挂载失败,请检查设备是否已被其他程序占用,或尝试手动执行:" echo " usbipd attach --wsl -b $busid" exit 1 fi # 6. 验证设备是否出现在 /dev 下 echo "[*] 等待设备就绪..." sleep 2 # 给内核一点时间识别设备 if ls /dev/ttyUSB* /dev/ttyACM* 2>/dev/null | grep -q .; then echo "[✓] 检测到以下串口设备:" ls -l /dev/ttyUSB* /dev/ttyACM* 2>/dev/null # 自动赋权(可选) for dev in /dev/ttyUSB* /dev/ttyACM*; do [ -e "$dev" ] && sudo chmod 666 "$dev" 2>/dev/null done echo "[✓] 权限已设置为可读写。" else echo "[!] 未检测到 /dev/ttyUSB* 或 /dev/ttyACM* 设备,但挂载可能已成功。" echo "请运行 'dmesg | tail' 查看内核日志,或检查设备类型。" fi echo "==============================" echo " 操作完成,你现在可以在 WSL 中使用该串口了。" echo "=============================="

所有代码:

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/25 1:16:24

【消息队列】Kafka深度解析:从原理到生产环境实战

【消息队列】Kafka深度解析&#xff1a;从原理到生产环境实战 引言 Kafka是一个分布式流处理平台&#xff0c;具有高吞吐量、低延迟、高可靠性的特点&#xff0c;被广泛应用于日志收集、实时数据处理、消息队列等场景。本文将详细介绍Kafka的核心原理和生产环境实践。 一、Kafk…

作者头像 李华
网站建设 2026/5/25 1:09:46

2026年AI模型接口中转站全网全维度硬核实测 面向开发者与企业的权威选型实用指南

本次测评由中国产业信息研究院联合TechInsight AI评测实验室在2026年3月28日正式对外发布&#xff0c;所有公开统计数据全部来源于72小时不间断连续压测、万级QPS高并发仿真模拟、10万真实业务请求样本以及服务商后台脱敏运营数据&#xff0c;所有测试环节完全贴合真实生产场景…

作者头像 李华
网站建设 2026/5/25 1:06:22

离线语音识别与物联网在智能家居中的应用与优化

1. 项目概述&#xff1a;离线语音识别与物联网的智能家居融合方案 在智能家居领域&#xff0c;语音控制已成为最自然的人机交互方式之一。传统基于云端的语音识别方案&#xff08;如Amazon Alexa&#xff09;虽然普及度高&#xff0c;但存在三个致命缺陷&#xff1a;首先&#…

作者头像 李华
网站建设 2026/5/25 1:06:16

Codex CLI高危漏洞CVE-2025-61260深度解析与工程化防御

1. 这不是一次普通漏洞&#xff0c;而是一面照见AI开发工具链脆弱性的镜子CVE-2025-61260这个编号刚在NVD&#xff08;国家漏洞数据库&#xff09;公开时&#xff0c;我正在帮一家中型金融科技公司做CI/CD流水线安全加固。团队刚上线Codex CLI作为代码补全与PR摘要生成的标配工…

作者头像 李华
网站建设 2026/5/25 0:59:49

对称性自适应机器学习力场:高效精准计算碳纳米管声子谱

1. 项目概述&#xff1a;当机器学习“学会”了对称性在计算材料科学领域&#xff0c;我们常常面临一个经典的“精度-效率”困境。一方面&#xff0c;基于第一性原理的密度泛函理论&#xff08;DFT&#xff09;计算&#xff0c;能提供近乎量子力学精度的结果&#xff0c;是探索材…

作者头像 李华