我有一个带有 CH340 串行芯片的 arduino nano 克隆版。它出现在 lsusb 中,QinHeng Electronics HL-340 USB-Serial adapter
当它连接时,我可以在 dmesg 中看到它,并显示以下日志:
[ 31.251098] vhci_hcd vhci_hcd.0: pdev(0) rhport(0) sockfd(3)
[ 31.251544] vhci_hcd vhci_hcd.0: devid(65541) speed(2) speed_str(full-speed)
[ 31.252004] vhci_hcd vhci_hcd.0: Device attached
[ 31.538489] vhci_hcd: vhci_device speed not set
[ 31.608492] usb 1-1: new full-speed USB device number 2 using vhci_hcd
[ 31.698522] vhci_hcd: vhci_device speed not set
[ 31.768510] usb 1-1: SetAddress Request (2) to port 0
[ 31.812328] usb 1-1: New USB device found, idVendor=1a86, idProduct=7523, bcdDevice= 2.63
[ 31.812734] usb 1-1: New USB device strings: Mfr=0, Product=2, SerialNumber=0
[ 31.813059] usb 1-1: Product: USB2.0-Serial
但是没有/dev/ttyUSB*。
谢谢。
答案1
因此,截至撰写本文时,缺乏对 USB 串行设备的支持的原因是它们的模块未包含在 WSL 内核中。
你可以通过执行以下操作使用模块编译自己的 WSL 内核:
您可能需要这些依赖项:
sudo apt install build-essential flex bison libssl-dev libelf-dev dwarves libncurses-dev
使用以下命令克隆 WSL2 存储库:
git clone https://github.com/microsoft/WSL2-Linux-Kernel.git
将目录更改为 WSL2-Linux-Kernel 文件夹:
cd WSL2-Linux-Kernel
通过运行来修改内核配置
make menuconfig KCONFIG_CONFIG=Microsoft/config-wsl
。然后转到
Device Drivers -> USB Support -> USB Serial Converter support
这里启用您的驱动程序。- CP210x 系列在微控制器开发板上也很常见。
- 您可能希望将它们嵌入到内核中,因此按
y
或space
两次以确保它们已启用,<*>
而不是<M>
。
然后保存并退出 menuconfig 并覆盖 config-wsl。
- 您可能不应该使用以下划掉的点,但它们是前两个点的替代 -
3. 修改 config-wsl 文件:(nano Microsoft/config-wsl
或者使用您选择的编辑器)。
转到第 2409 行(shift+_,然后是 nano 中的 2409)并替换# CONFIG_USB_SERIAL_CH341 is not set
为CONFIG_USB_SERIAL_CH341=y
- 您可能希望对CONFIG_USB_SERIAL_CP210X
- 另一个常见的串行 USB 适配器执行相同的操作。
关闭文本编辑器并保存(ctrl + x
然后y
用enter
nano)。使用 WSL2 内核配置构建内核:
make KCONFIG_CONFIG=Microsoft/config-wsl
- 这可能需要一段时间 - 您可以使用 -j 参数加快速度,但请确保指定一个值,例如 -j4将编译好的内核复制到你的Windows用户目录:
cp arch/x86/boot/bzImage /mnt/c/Users/<your-user-name-here>/wsl_kernel
在 Windows 用户目录中创建一个名为 .wslconfig 的文件并将其粘贴到其中:
[wsl2]
kernel = C:\\Users\\<your-user-name-here>\\wsl_kernel
wsl --shutdown
使用 Windows 命令提示符关闭 WSL 。打开你的 WSL 终端,现在你应该能够按照概述连接 USB 串行设备这里。
希望一切顺利!(在 Win10 和 Win11 上使用 Ubuntu WSL2 发行版进行测试)
答案2
Leo Bound 给出了正确的答案,但由于没有声誉,我无法发表评论。如果您的 Ubuntu 在编辑 .wslconfig 文件后似乎没有更新,请尝试删除 .wslconfig,然后从 WSL 在 vi 中重新创建它。我的 Notepad 或 Notepad++ 导致了某种格式错误,导致 WSL 无法读取 .wslconfig 并忽略我的内核更新。