CH340 串行设备未出现在 /dev/ (WSL) 中

Leo*_*und 4 usb serial-port arduino drivers windows-subsystem-for-linux

我有一个带有 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
Run Code Online (Sandbox Code Playgroud)

但没有/dev/ttyUSB*。

谢谢。

Leo*_*und 9

因此,在撰写本文时,缺乏对 USB 串行设备支持的原因是它们的模块未包含在 WSL 内核中。

\n

您可以通过执行以下操作来使用模块编译自己的 WSL 内核:

\n
    \n
  1. 您可能需要这些依赖项:sudo apt install build-essential flex bison libssl-dev libelf-dev dwarves libncurses-dev

    \n
  2. \n
  3. 使用以下命令克隆 WSL2 存储库:git clone https://github.com/microsoft/WSL2-Linux-Kernel.git

    \n
  4. \n
  5. 将目录更改为 WSL2-Linux-Kernel 文件夹:cd WSL2-Linux-Kernel

    \n
  6. \n
  7. 通过运行修改内核配置make menuconfig KCONFIG_CONFIG=Microsoft/config-wsl

    \n
  8. \n
  9. 然后在此处启用Device Drivers -> USB Support -> USB Serial Converter support您的驱动程序。

    \n
      \n
    • CP210x 系列在微控制器开发板上也很常见。
    • \n
    • 您可能希望将它们烘焙到内核中,因此请按yspace两次以确保它们是通过<*>而不是启用的<M>
    • \n
    \n

    然后保存并退出menuconfig并覆盖config-wsl。

    \n
  10. \n
\n

- 您可能不应该使用以下划线点,但它们是前两个点的替代方案 -

\n

3. 修改 config-wsl 文件:(nano Microsoft/config-wsl或使用您选择的编辑器)。

\n

\xe2\x80\x8b转到第 2409 行(shift+_,然后是 nano 中的 2409)并替换# CONFIG_USB_SERIAL_CH341 is not set为\n\xe2\x80\x8b- 您可能需要对另一个常见的串行 USB 适配器CONFIG_USB_SERIAL_CH341=y执行相同操作。CONFIG_USB_SERIAL_CP210X

\n
    \n
  1. 关闭文本编辑器并保存(然后ctrl + x使用nano)。yenter

    \n
  2. \n
  3. 使用 WSL2 内核配置构建内核:make KCONFIG_CONFIG=Microsoft/config-wsl\n\xe2\x80\x8b- 这可能需要一段时间\n\xe2\x80\x8b- 您可以使用 -j 参数加快速度,但请确保指定一个值,例如-j4

    \n
  4. \n
  5. 将编译好的内核复制到 Windows 用户目录:cp arch/x86/boot/bzImage /mnt/c/Users/<your-user-name-here>/wsl_kernel

    \n
  6. \n
  7. 在 Windows 用户目录中创建一个名为 .wslconfig 的文件并将其粘贴到其中:

    \n
  8. \n
\n
[wsl2]\nkernel = C:\\\\Users\\\\<your-user-name-here>\\\\wsl_kernel\n
Run Code Online (Sandbox Code Playgroud)\n
    \n
  1. wsl --shutdown使用 Windows 命令提示符关闭 WSL 。

    \n
  2. \n
  3. 打开 WSL 终端,现在您应该能够连接 USB 串行设备,如此处所述

    \n
  4. \n
\n

希望一切都能正常工作!\n(使用 Ubuntu WSL2 发行版在 Win10 和 Win11 上进行了测试)

\n