Установка Драйвера ch34* Linux Debian

Аватара пользователя
Артём Мамзиков
Admin
Сообщения: 925
Стаж: 6 лет 2 месяца
Откуда: Вологодская область
Благодарил (а): 1 раз
Поблагодарили: 43 раза
Контактная информация:

Установка Драйвера ch34* Linux Debian

Сообщение Артём Мамзиков »

Есть у нас переходник для CISCO
HL-340 USB для порта COM RS232 Serial
HL-340 USB для порта COM RS232 Serial
Bus 002 Device 012: ID 1a86:7523 QinHeng Electronics HL-340 USB-Serial adapter
Bus 002 Device 009: ID 1a86:7523 QinHeng Electronics HL-340 USB-Serial adapter

Код: Выделить всё

ls /dev/ttyUSB*
/dev/ttyUSB0
/dev/ttyUSB1

Код: Выделить всё

chmod 777 /dev/ttyUSB0

Код: Выделить всё

chmod 777 /dev/ttyUSB2
Пробуем подключиться через Minicom к нашей cisco
Сводка Команд Minicom

Предварительно настроив скорость подключения

Код: Выделить всё

minicom -D /dev/ttyUSB0
или

Код: Выделить всё

minicom -D /dev/ttyUSB1
И получаем что нет соединения
CTRL-A Z for help | 9600 8N1 | NOR | Minicom 2.7 | VT102 | Не на линии | ttyUSB0
CTRL-A Z for help | 9600 8N1 | NOR | Minicom 2.7 | VT102 | Не на линии | ttyUSB1

Нужно установить драйвер ch34* который более распространен для Ардуино

Версия Debian

Код: Выделить всё

cat /etc/debian_version
9.9
Информация о дистрибутиве:

Код: Выделить всё

lsb_release -a 
No LSB modules are available.
Distributor ID: Debian
Description: Debian GNU/Linux 9.9 (stretch)
Release: 9.9
Codename: stretch

Информация о ядре:

Код: Выделить всё

uname -a
4.9.0-9-amd64 #1 SMP Debian 4.9.168-1+deb9u2 (2019-05-13) x86_64 GNU/Linux

Версия ядра

Код: Выделить всё

uname -r
4.9.0-9-amd64

Устанавливаем не обходимые пакеты

Код: Выделить всё

apt-get install linux-kbuild-4.9 linux-compiler-gcc-6-x86
Автоматическое определение

Код: Выделить всё

apt-get install linux-headers-$(uname -r)
Руками
2 пакета качаем вручную так как в репозитории другая версия ядра linux-headers-4.9.0-13-amd64 а у нас 4.9.0-9

Код: Выделить всё

dpkg -i linux-headers-4.9.0-9-common_4.9.168-1+deb9u2_all.deb

Код: Выделить всё

dpkg -i linux-headers-4.9.0-9-amd64_4.9.168-1+deb9u2_amd64.deb
После установки пакетов скачиваем исходный код драйвера CH341SER
Извлекаем из архива и переходим в папку далее

1.Очистите предыдущую установку

Код: Выделить всё

make clean
будет выполнена команда очистки rm -rf *.mk .tmp_versions Module.symvers *.mod.c *.o *.ko .*.cmd Module.markers

2. Cобрать 3.Загрузить модуль

Код: Выделить всё

make load

выполнит команду можно сразу ее выполнить insmod ch341.ko - загрузить модуль для динамической загрузки

4. Обновления таблицы зависимостей модулей ядра

Код: Выделить всё

depmod -a
Проверяем

Код: Выделить всё

dmesg | grep ch34.

[11569568.782441] usbcore: registered new interface driver ch341
[11569568.782454] usbserial: USB Serial support registered for ch341-uart
[11569568.782470] ch341 2-1.5:1.0: ch341-uart converter detected
[11569568.784748] usb 2-1.5: ch341-uart converter now attached to ttyUSB0
[11569627.727162] ch341 2-1.6:1.0: ch341-uart converter detected
[11569627.728669] usb 2-1.6: ch341-uart converter now attached to ttyUSB1
[12713456.491493] ch34x: disagrees about version of symbol module_layout
[12713517.844258] ch34x: disagrees about version of symbol module_layout
[12772392.094761] ch341: disagrees about version of symbol module_layout
[12777761.020663] ch341: loading out-of-tree module taints kernel.
[12777806.421420] usbserial: USB Serial deregistering driver ch341-uart
[12777806.421512] ch341-uart ttyUSB1: ch341-uart converter now disconnected from ttyUSB1
[12777806.421548] ch341-uart ttyUSB0: ch341-uart converter now disconnected from ttyUSB0
[12777806.421556] usbcore: deregistering interface driver ch341
[12777806.421577] ch341 2-1.6:1.0: device disconnected
[12777806.421984] ch341 2-1.5:1.0: device disconnected
[12777808.815543] usb_ch341 2-1.5:1.0: ttyCH341USB0: ch341 USB device
[12777808.815629] usb_ch341 2-1.6:1.0: ttyCH341USB1: ch341 USB device
[12777808.815678] usbcore: registered new interface driver usb_ch341
[12777808.815679] ch341: USB serial driver for ch340, ch341, etc.
[12777808.815679] ch341: V1.8 On 2024.01
[12781989.347131] usbcore: deregistering interface driver usb_ch341
[12781989.347245] usb_ch341 2-1.6:1.0: ch341 usb device disconnect.
[12781989.347296] usb_ch341 2-1.5:1.0: ch341 usb device disconnect.
[12781989.347307] ch341: ch341 driver exit.
[12782007.862469] usb_ch341 2-1.5:1.0: ttyCH341USB0: ch341 USB device
[12782007.862534] usb_ch341 2-1.6:1.0: ttyCH341USB1: ch341 USB device
[12782007.862580] usbcore: registered new interface driver usb_ch341
[12782007.862581] ch341: USB serial driver for ch340, ch341, etc.
[12782007.862581] ch341: V1.8 On 2024.01

Код: Выделить всё

ls /dev/ttyCH341USB*
/dev/ttyCH341USB0 /dev/ttyCH341USB1

Код: Выделить всё

minicom -s
Заходим в настройку последовательного порта (Serial port setup) и меняем значения Скорость/Четность/Биты (Bps/Par/Bits) на 9600 8N1.

Меняем последовательный порт (Serial Device) на порт, к которому подключено оборудование и настраиваем параметры управления потоком(Flow Control). В данном примере это /dev/ttyS0 — адрес порта COM1. При подключении через разъем mini-usb порт может быть таким /dev/ttyACM0.

A - Serial Device : /dev/ttyS0
B - Lockfile Location : /var/lock
C - Callin Program :
D - Callout Program :
E - Bps/Par/Bits : 9600 8N1
F - Hardware Flow Control : Yes
G - Software Flow Control : No

Устройство /dev/ttyUSB0 обычно используется при подключении через переходник usb->com. Скорость 19200 иногда 115200 используется на свитчах 3COM

Сохраняем конфигурацию, как настройки по-умолчанию в главном меню minicom (Save setup as dfl), либо как конфигурацию с конкретным названием ( Save setup as..).
Для выхода из minicom необходимо нажать Ctrl+A затем Q.

Далее запускаем minicom с настройками по-умолчанию.
minicom
Либо с сохранными настройками.
minicom <имя_конфигурации>

Или подключиться

Код: Выделить всё

minicom -D /dev/ttyCH341USB0
или

Код: Выделить всё

minicom -D /dev/ttyCH341USB1
стандартный порт с указанием скорости
minicom -D /dev/ttyUSB0 -b 9600

Чтобы выйти из minicom, выполните следующие шаги:
Нажмите Ctrl+A.
Затем нажмите X.

Более подробно
Показать
# Установка

make clean - Очистите предыдущую установку
будет выполнена команда очистки rm -rf *.mk .tmp_versions Module.symvers *.mod.c *.o *.ko .*.cmd Module.markers modules.order *.a *.mod
make - собрать
make load выполнит команду можно сразу ее выполнить insmod ch341.ko - загрузить модуль для динамической загрузки драйвера

# Выгрузить модуль если это необходимо
make unload выполнит команду можно сразу ее выполнить rmmod ch341

# Обновления таблицы зависимостей модулей ядра
depmod -a

make install чтобы заставить драйвер работать постоянно
Выполняться следующие команды:
# Проверка что плагин загружен
rmmod ch341 || true
insmod ch341.ko || true
# Создание пути
mkdir -p /lib/modules/$(shell uname -r)/kernel/drivers/usb/serial/ || true
# Копирование файла
cp -f ./ch341.ko /lib/modules/$(shell uname -r)/kernel/drivers/usb/serial/ || true
# Обновления таблицы зависимостей модулей ядра
depmod -a

make uninstall чтобы удалить драйвер
Выполняться следующие команды
# Проверка выгрузки
rmmod ch341 || true
# Удаление
rm -rf /lib/modules/$(shell uname -r)/kernel/drivers/usb/serial/ch341.ko || true
# Обновления таблицы зависимостей модулей ядра
depmod -a
else
obj-m := ch341.o


чтобы быть уверенным, что модуль загрузится после перезагрузки, вы можете изменить расширение файла с "*.ko" на "*.ko.gz" и добавить его в путь к драйверам:
нет такого пути /usr/lib/modules/$(uname -r)/kernel/drivers/usb/serial
есть только такой /usr/lib/modules-load.d и такой /lib/modules/$(uname -r)/kernel/drivers/usb/serial/ch341.ko
В архиве
find . -name *.ko | xargs gzip
Копируем из текущей папки в
cp ch34x.ko.gz /usr/lib/modules/$(uname -r)/kernel/drivers/usb/serial
Перемещаем
mv /usr/lib/modules/$(uname -r)/kernel/drivers/usb/serial/ch341.ko.gz /lib/modules/$(uname -r)/kernel/drivers/usb/serial/ch341.ko.gz~

# Просмотр подключеного устройства
lsmod | grep ch341
ch341 24576 0
usbcore 253952 6 usbhid,ehci_hcd,usbserial,ch341,ehci_pci
видно, что модуль ch341 был успешно загружен, так как он отображается в списке загруженных модулей.

# Проверим результаты
dmesg | grep ch34.
это пример вывода команды:
[12713456.491493] ch34x: disagrees about version of symbol module_layout
[12713517.844258] ch34x: disagrees about version of symbol module_layout

dmesg | grep ch341
[11569568.782441] usbcore: registered new interface driver ch341
[11569568.782454] usbserial: USB Serial support registered for ch341-uart
[11569568.782470] ch341 2-1.5:1.0: ch341-uart converter detected
[11569568.784748] usb 2-1.5: ch341-uart converter now attached to ttyUSB0
[11569627.727162] ch341 2-1.6:1.0: ch341-uart converter detected
[11569627.728669] usb 2-1.6: ch341-uart converter now attached to ttyUSB1
[12772392.094761] ch341: disagrees about version of symbol module_layout
[12777761.020663] ch341: loading out-of-tree module taints kernel.
[12777806.421420] usbserial: USB Serial deregistering driver ch341-uart
[12777806.421512] ch341-uart ttyUSB1: ch341-uart converter now disconnected from ttyUSB1
[12777806.421548] ch341-uart ttyUSB0: ch341-uart converter now disconnected from ttyUSB0
[12777806.421556] usbcore: deregistering interface driver ch341
[12777806.421577] ch341 2-1.6:1.0: device disconnected
[12777806.421984] ch341 2-1.5:1.0: device disconnected
[12777808.815543] usb_ch341 2-1.5:1.0: ttyCH341USB0: ch341 USB device
[12777808.815629] usb_ch341 2-1.6:1.0: ttyCH341USB1: ch341 USB device
[12777808.815678] usbcore: registered new interface driver usb_ch341
[12777808.815679] ch341: USB serial driver for ch340, ch341, etc.
[12777808.815679] ch341: V1.8 On 2024.01
[12781989.347131] usbcore: deregistering interface driver usb_ch341
[12781989.347245] usb_ch341 2-1.6:1.0: ch341 usb device disconnect.
[12781989.347296] usb_ch341 2-1.5:1.0: ch341 usb device disconnect.
[12781989.347307] ch341: ch341 driver exit.
[12782007.862469] usb_ch341 2-1.5:1.0: ttyCH341USB0: ch341 USB device
[12782007.862534] usb_ch341 2-1.6:1.0: ttyCH341USB1: ch341 USB device
[12782007.862580] usbcore: registered new interface driver usb_ch341
[12782007.862581] ch341: USB serial driver for ch340, ch341, etc.
[12782007.862581] ch341: V1.8 On 2024.01

Проверка
ls /dev/ttyUSB*
или
ls /dev/ttyCH341USB*
Ответ
ttyCH341USB0
ttyCH341USB1

в файле Makefile путь
KERNELDIR := /lib/modules/$(shell uname -r)/build
аналогична в нашем случае версии ядра 4.9.0-13-amd64
KERNELDIR := /lib/modules/4.9.0-13-amd64/build
Данный путь должен существовать!
Еще варианты утилит для подключения
Запустите GNU Screen, указав порт, скорость передачи и другие параметры:
screen /dev/ttyUSB0 9600

Запустите picocom, указав порт и скорость передачи данных. Например, для подключения к порту /dev/ttyUSB0 со скоростью 9600 бит/с:
picocom /dev/ttyUSB0 -b 9600

Управление потоком: нет

Код: Выделить всё

minicom -D /dev/ttyCH341USB0
Ответ
CISCO1 con0 is now available
Press RETURN to get started.
User Access Verification
Username:

или

Код: Выделить всё

picocom /dev/ttyCH341USB0 -b 9600
Ответ:
picocom v3.1
port is : /dev/ttyCH341USB0
flowcontrol : none
baudrate is : 9600
parity is : none
databits are : 8
stopbits are : 1
escape is : C-a
local echo is : no
noinit is : no
noreset is : no
hangup is : no
nolock is : no
send_cmd is : sz -vv
receive_cmd is : rz -vv -E
imap is :
omap is :
emap is : crcrlf,delbs,
logfile is : none
initstring : none
exit_after is : not set
exit is : no

Type [C-a] [C-h] to see available commands
Terminal ready
User Access Verification
Username:
% Username: timeout expired!

CISCO1 con0 is now available
Press RETURN to get started.

picocom /dev/ttyUSB0 -b 9600 стандартный порт
выйти
Нажмите сочетание клавиш Ctrl+A.
Затем нажмите Ctrl+X.

Miniterm - это простая консольная утилита, предоставляемая библиотекой pySerial для работы с последовательными портами.
Cutecom - графическая программа для работы с последовательными портами в Linux
ch341ser_linux-main.zip
ch341ser_linux-main.zip
(9.8 МБ) 31 скачивание
в кратце
Показать
Подключение через разные утилиты
picocom /dev/ttyUSB0 -b 9600
ctrl + A, ctrl + Q для выхода из picocom.

screen /dev/ttyUSB0 9600

minicom -D /dev/ttyUSB0 -b 9600
Чтобы выйти из minicom, выполните следующие шаги:
Нажмите Ctrl+A. Затем нажмите X.

Если после перезагрузки не работает, попробовать загрузить модуль (возможно не прогрузился) хотя в новых версиях есть дефолтный
cd /root/installsourcecode/ch341ser_linux-main/CH341SER-master/
make load

Обновления таблицы зависимостей модулей ядра
depmod -a

Проверить подключение
lsusb |grep CH340

Просмотреть порты
ls /dev/ttyUSB*
ls /dev/ttyCH341USB*


make clean - Очистите предыдущую установку
make - собрать
make install чтобы заставить драйвер работать постоянно
make uninstall чтобы удалить драйвер

загрузить
make load аналогична insmod ch34x.ko


Обновления таблицы зависимостей модулей ядра
depmod -a
Скрипт на подключение делает проверку устройства и модуля если нет пытается загрузить, проверяет соответствие устройство - порт, убивает все предыдущие подключения на этот порт и подключается на этот порт.
cisco.zip
cisco.zip
(1.36 КБ) 5 скачиваний
./cisco.sh

Код: Выделить всё

#!/bin/bash

# Перейдем в папку с драйвером
cd /root/installsourcecode/ch341ser_linux-main/CH341SER-master/

# Имя модуля
MODULE="ch34"

function comusb(){
# Проверяем наличие устройств ttyUSB
DEVICE=$(ls /dev/ttyUSB* 2>/dev/null |sed 's|/dev/||' |tail -n 1)
if [ -z "$DEVICE" ]; then
   # Проверяем наличие устройств ttyCH341USB
   DEVICE=$(ls /dev/ttyCH341USB* 2>/dev/null |sed 's|/dev/||' |tail -n 1)
fi

chekmd=$(dmesg |grep -i "$MODULE.*$DEVICE")
if [ -z "$chekmd" ]; then
 chekmd=$(dmesg |grep -i "$MODULE.*tty")
 if [ -z "$chekmd" ]; then
 echo "Оборудование не найдено dmesg |grep -i $MODULE"
 exit 1
 else
 # Получим имя порта так как в предыдущей проверке оно не совпало (не найдено), но устройство такое есть с модулем
 DEVICE=$(echo $chekmd| awk '{print $3}' | sed 's/:$//' | uniq|grep -i "tty")
 fi
fi
echo "dmesg:"
echo "$chekmd"
echo ""

echo "Завершаем предыдущие процессы подключения если есть (чтоб не занимали порт)"
# находим текущий процесс, выведем PID процесса и завершим его.
ps -ux|grep -Ei "(picocom|screen|minicom)[ ]"| awk '{print $2}'|xargs -I {} bash -c 'if [ -n {} ]; then kill -9 {} >/dev/null; else exit; fi'
ps -ux|grep -Ei "$DEVICE[ ]"| awk '{print $2}'|xargs -I {} bash -c 'if [ -n {} ]; then kill -9 {} >/dev/null; else exit; fi'
# Проверим еще раз что процесс завершился несколько раз)
ps -ux|grep -Ei "(picocom|screen|minicom)[ ]"| awk '{print $2}'|xargs -I {} bash -c 'if [ -n {} ]; then kill -9 {} >/dev/null; else exit; fi'
ps -ux|grep -Ei "(picocom|screen|minicom)[ ]"| awk '{print $2}'|xargs -I {} bash -c 'if [ -n {} ]; then kill -9 {} >/dev/null; else exit; fi'
ps -ux|grep -Ei "(picocom|screen|minicom)[ ]"| awk '{print $2}'|xargs -I {} bash -c 'if [ -n {} ]; then kill -9 {} >/dev/null; else exit; fi'
#pid=`ps -ux|grep -Ei "(picocom|screen|minicom)[ ]"| awk '{print $2}'`
# Завершим процесс
#kill "${pid}"
#kill -15 "${pid}"
#kill -9 "${pid}"
#kill -TERM "${pid}"
#kill -KILL "${pid}"
echo ""


echo "Подключаемся к CISCO через /dev/$DEVICE"
picocom /dev/$DEVICE -b 9600
#screen /dev/$DEVICE 9600
#minicom -D /dev/$DEVICE -b 9600
}

# Проверяем, подключено ли устройство CH340
if lsusb | grep -i "$MODULE"; then
    echo "Устройство $MODULE подключено. Продолжаем..."

  # Проверяем, загружен ли модуль
  if ! lsmod | grep "$MODULE"; then
    echo "Модуль $MODULE не загружен. Попытка загрузки..."
    # Выгрузить
    #make unload
    #rmmod ch34x
    # Очистите предыдущую сборку
    #make clean
    # Собрать
    #make
    # Попытка загрузить модуль
    make load
    insmod ch34x.ko
    # Обновления таблицы зависимостей модулей ядра
    depmod -a
       echo "Повторная проверка модуля"
       if ! lsmod | grep "$MODULE"; then
       echo "Не удалось загрузить модуль $MODULE."
        exit 1
       else
        echo "Модуль $MODULE успешно загружен."
        comusb
       fi
  else
    echo "Модуль $MODULE уже загружен."
    comusb
  fi

else
  echo "Устройство $MODULE не подключено. Выходим..."
  exit 1
fi

количество слов: 1735

Вернуться в «Linux»