Устройство CH340 не отображается в /dev/ (WSL)

Вопрос или проблема

У меня есть клон Arduino Nano с чипом последовательного интерфейса CH340. Он отображается в lsusb как адаптер USB-Serial QinHeng Electronics HL-340, и когда он подключается, я вижу его в 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: Устройство подключено
[ 31.538489] vhci_hcd: скорость vhci_device не установлена
[ 31.608492] usb 1-1: новое устройство USB полной скорости номер 2, использующее vhci_hcd
[ 31.698522] vhci_hcd: скорость vhci_device не установлена
[ 31.768510] usb 1-1: Запрос SetAddress (2) к порту 0
[ 31.812328] usb 1-1: Обнаружено новое USB-устройство, idVendor=1a86, idProduct=7523, bcdDevice= 2.63
[ 31.812734] usb 1-1: Новые строки USB-устройства: Mfr=0, Product=2, SerialNumber=0
[ 31.813059] usb 1-1: Продукт: USB2.0-Serial

Но /dev/ttyUSB* отсутствует.
Спасибо.

На момент написания, причина отсутствия поддержки 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 или пробел дважды, чтобы убедиться, что они включены с <*> вместо .

Затем сохраните и выйдите из menuconfig и перезапишите config-wsl.

– Вам, вероятно, не следует использовать следующие зачеркивания, но они являются альтернативой предыдущим двум –
3. Измените файл config-wsl: nano Microsoft/config-wsl (или используйте ваш предпочитаемый редактор).
​Перейдите к строке 2409 (shift+_ затем 2409 в nano) и замените # 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/<ваше-имя-пользователя>/wsl_kernel

Создайте файл в директории вашего пользователя Windows с именем .wslconfig и вставьте это в него:

[wsl2]
kernel = C:\\Users\\<ваше-имя-пользователя>\\wsl_kernel

Выключите WSL с помощью wsl –shutdown в командной строке Windows.

Откройте свой терминал WSL, и теперь вы должны иметь возможность подключать USB-последовательные устройства, как указано здесь.

И надеюсь, все должно работать!
(Проверено на Win10 и Win11 с дистрибутивом Ubuntu WSL2)

У Лео Бонда есть правильный ответ, но я не могу оставить комментарий из-за отсутствия репутации. Если ваш Ubuntu, похоже, не обновляется после редактирования файла .wslconfig, попробуйте удалить .wslconfig, а затем снова создать его в vi из WSL.
Мой Блокнот или Notepad++ вызвали какую-то ошибку форматирования, из-за которой WSL не смог прочитать .wslconfig и проигнорировал мои обновления ядра.

На момент написания:
Теперь в WSL2 с середины 2022 года(?) есть предварительно собранные модули, которые вы можете увидеть через
zgrep =m /proc/config.gz. В частности, есть модули для CH341 (работал у меня с CH340), CP210X, FTDI, которые покрывают большинство распространенных адаптеров USB-Serial. Загрузка через sudo modprobe ch341 и sudo modprobe usbserial сработали для меня. Проверьте с помощью lsmod и повторно проверьте dmesg.

@RShiver Я не могу проголосовать за вас, ни прокомментировать ваш пост из-за нехватки репутации.
Но я действительно хочу вас поблагодарить, так как sudo modprobe ftdi_sio действительно поддерживает FTDI4232H, который используется на плате разработчика, к которой я теперь наконец могу получить доступ из WSL2.
Вы не представляете, как трудно найти эту информацию в интернете.
Вывод dmesg:
[29493.050061] usbcore: зарегистрирован новый драйвер интерфейса ftdi_sio
[29493.050550] usbserial: зарегистрирована поддержка USB Serial для FTDI USB Serial Device
[29493.050977] ftdi_sio 1-2:1.0: Обнаружен конвертер FTDI USB Serial Device
[29493.051288] usb 1-2: Обнаружен FT4232H
[29493.052436] usb 1-2: Конвертер FTDI USB Serial Device теперь подключен к ttyUSB1
[29493.052942] ftdi_sio 1-2:1.1: Обнаружен конвертер FTDI USB Serial Device
[29493.053348] usb 1-2: Обнаружен FT4232H
[29493.054571] usb 1-2: Конвертер FTDI USB Serial Device теперь подключен к ttyUSB2
[29493.055006] ftdi_sio 1-2:1.2: Обнаружен конвертер FTDI USB Serial Device
[29493.055328] usb 1-2: Обнаружен FT4232H
[29493.056296] usb 1-2: Конвертер FTDI USB Serial Device теперь подключен к ttyUSB3
[29493.056723] ftdi_sio 1-2:1.3: Обнаружен конвертер FTDI USB Serial Device
[29493.057047] usb 1-2: Обнаружен FT4232H
[29493.058047] usb 1-2: Конвертер FTDI USB Serial Device теперь подключен к ttyUSB4

Чтобы облегчить подключение USB-устройств к WSL2, я теперь использую WSL USB Manager, который позволяет легко выбрать, какой порт перенаправлять.
Чтобы резюмировать все модули для пробирования большинства USB-последовательных адаптеров:
sudo modprobe ch341
sudo modprobe usbserial
sudo modprobe cp210x
sudo modprobe ftdi_sio

Ответ или решение

Решение проблемы: Устройство CH340 не отображается в /dev/ на WSL

Ваша проблема заключается в том, что USB-устройство Arduino Nano с чипом CH340 не отображается в подсистеме устройств /dev/ на Windows Subsystem for Linux (WSL). Вы уже сделали первые шаги к диагностике проблемы, так как устройство успешно определяется в lsusb, и вы наблюдаете его активность с помощью вывода из dmesg. Однако, отсутствие устройств вида /dev/ttyUSB* указывает на недостаток поддержки USB-сериалов в WSL.

Причина проблемы

На момент написания этого текста основная проблема заключается в том, что модули для поддержки USB-сериальных устройств не включены в ядро WSL. Стандартная конфигурация ядра WSL не позволяет работать с дополнительными драйверами, необходимыми для правильного обнаружения этих устройств.

Решение проблемы

Для решения данной проблемы есть несколько методов, которые могут помочь вам подключить ваше USB-периферийное устройство в WSL. Рассмотрим наиболее эффективные способы:

  1. Использование предустановленных модулей WSL2:

    • На момент примерно середины 2022 года, в WSL2 были добавлены предустановленные модули для популярных USB-to-Serial адаптеров, таких как CH340, CP210X и FTDI. Вы можете проверить, включены ли необходимые модули, с помощью команды:
      zgrep =m /proc/config.gz
    • Если вы видите строки, связанные с CONFIG_USB_SERIAL_CH341, CONFIG_USB_SERIAL_CP210X и другими, попробуйте загрузить модуль с помощью:
      sudo modprobe ch341
      sudo modprobe usbserial
      sudo modprobe cp210x
      sudo modprobe ftdi_sio
    • После этого проверьте, отображаются ли ваши устройства с помощью:
      ls /dev/ttyUSB*
  2. Компиляция собственного ядра 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
      cd WSL2-Linux-Kernel

      Изменение конфигурации ядра:

      make menuconfig KCONFIG_CONFIG=Microsoft/config-wsl

      В меню перейдите в раздел Device Drivers -> USB Support -> USB Serial Converter support, и включите нужные драйвера.

      Сборка ядра:

      После выход из меню сохраните конфигурацию:

      make KCONFIG_CONFIG=Microsoft/config-wsl

      Это может занять некоторое время. Для ускорения сборки можно использовать:

      make -j4 KCONFIG_CONFIG=Microsoft/config-wsl

      Копирование и настройка конфигурации:

      После завершения сборки скопируйте полученное ядро:

      cp arch/x86/boot/bzImage /mnt/c/Users/<ваше-имя-пользователя>/wsl_kernel

      Создайте файл .wslconfig в вашей домашней директории Windows:

      [wsl2]
      kernel = C:\\Users\\<ваше-имя-пользователя>\\wsl_kernel

      Затем завершите работу WSL:

      wsl --shutdown
  3. Проверка конфигурации:

    • Убедитесь, что вы правильно настроили файл .wslconfig. Некоторые текстовые редакторы могут вводить скрытые символы или проблемы форматирования. Если WSL не обновляется после редактирования, попробуйте удалить и заново создать файл .wslconfig с использованием редактора Vi или Nano.
  4. Использование WSL USB Manager:

    • Для удобства работы с USB-устройствами в WSL очень рекомендую воспользоваться инструментом WSL USB Manager, который упрощает процедуру перенаправления USB-портов в WSL.

Заключение

Следуя указанным шагам, вы сможете настроить поддержку USB-сериалов в WSL, что позволит вашему Arduino Nano с чипом CH340 функционировать должным образом. На всякий случай, помните, что вы всегда можете обратиться к документации WSL и сообществу для получения дополнительной помощи и информации.

Если у вас возникли дополнительные вопросы или сложности, не стесняйтесь спрашивать!

Оцените материал
Добавить комментарий

Капча загружается...