Эта статья выросла из заметки 2010 года, которая была каталогом ссылок на драйверные сайты. Переписана она по одной причине: в Linux драйвер для ARK3116 уже в ядре, и ничего скачивать не нужно — а установка «драйвера» с сайта-агрегатора сегодня означает загрузку неизвестного исполняемого файла на машину, где, возможно, лежат ключи и пароли. Ниже — как USB-UART адаптер на ARK3116 опознаётся по идентификаторам, что именно делает встроенный драйвер, чем это проверяется на живом Debian 12 и какие грабли ждут при подключении к консоли сетевого оборудования.

ARK3116: USB-UART адаптер — обложка обзора
VID 6547 и PID 0232: опознание, встроенный драйвер и проверка на живом ядре

TL;DR: что это и как проверить за десять минут

  1. Что это. Микросхема-преобразователь USB в последовательный порт (UART) от ArkMicroChips; в системе выглядит как /dev/ttyUSB0.
  2. Опознание. Vendor ID 0x6547, Product ID 0x0232 — плюс второй идентификатор 0x18EC:0x3118 в таблице драйвера.
  3. Драйвер. В Linux это модуль ядра ark3116 (CONFIG_USB_SERIAL_ARK3116=m), в FreeBSD — uark(4). Ставить ничего не нужно.
  4. Права. Порт открывает только root или член группы dialout; после добавления в группу нужен новый вход.
  5. Главный риск. Драйверы с сайтов-агрегаторов и несовпадение уровней TTL (5 В против 3,3 В) — два способа испортить и машину, и подключаемое устройство.
lsusb | grep -i 6547                 # 6547:0232 — адаптер виден
modinfo ark3116 | head -6            # драйвер есть в ядре
dmesg | tail -5                      # драйвер привязался к устройству
ls -l /dev/ttyUSB*                   # появился порт

Проблема, которую это решает

Ситуация типовая: у сетевого оборудования, промышленного контроллера или отладочной платы есть последовательный порт, а на ноутбуке его нет уже полтора десятилетия. Нужен переходник USB → UART, и ARK3116 — один из самых дешёвых вариантов.

Дальше начинается путаница, из-за которой и появляются статьи-каталоги драйверов. На Windows производитель действительно требовал отдельный драйвер, и в интернете осел десяток сайтов с файлами вида ARK3116.zip, ark3116.exe и «драйвер для VID_6547&PID_0232». Часть этих файлов — переупакованные старые драйверы, часть — сомнительные сборки с рекламными модулями, а некоторые просто содержат посторонний код. Проверить происхождение файла без подписи невозможно.

В Linux и FreeBSD ситуация обратная: драйвер десятилетиями живёт в основном дереве ядра, поддерживается сообществом и подписан вместе с ядром. Скачивать нечего, и это не мелочь, а принципиальная разница в модели доверия.

Отсюда и структура статьи: сначала опознание устройства, потом проверка встроенного драйвера, потом настройка порта — и только в конце разговор о Windows, где честный ответ звучит как «проверяйте на своей сборке, а не берите первый файл из поиска».

Что такое ARK3116 и как он опознаётся

ARK3116 — высокоинтегрированный контроллер, который преобразует USB Full-Speed (12 Мбит/с) в последовательный порт UART. Внешне это обычно маленькая плата в прозрачной термоусадке с USB-разъёмом с одной стороны и четырьмя-пятью проводами с другой, либо законченный кабель.

Параметр Значение Чем подтверждается
Производитель ArkMicroChips (Arkmicro Technologies) описание модуля ядра
Vendor ID 0x6547 modinfo ark3116 → alias usb:v6547p0232d*
Product ID 0x0232 там же
Второй идентификатор 0x18EC:0x3118 alias usb:v18ECp3118d* в том же модуле
Интерфейс USB Full-Speed, 12 Мбит/с документация на контроллер
Что эмулирует последовательный порт UART, в том числе для IrDA описание модуля: «serial/IrDA driver»
Драйвер Linux ark3116.ko, автор Bart Hartgers, лицензия GPL, внутри дерева ядра modinfo
Драйвер FreeBSD uark(4) документация FreeBSD
Лицензия драйвера GPL modinfo

Идентификаторы — первое, что нужно знать: по ним устройство опознаётся в lsusb, по ним же пишется правило udev и фильтр в системе инвентаризации. Второй идентификатор (18EC:3118) в статье 2010 года не упоминался, а он есть в таблице драйвера — производитель выпускал устройства под двумя наборами VID/PID.

Отдельно про варианты исполнения. Старая заметка перечисляла ARK3116, ARK3116T и ARK3116S как разные версии с разными возможностями. Проверить это по документации сейчас не удалось, поэтому в статье нет утверждений о различиях между ними: для драйвера важен идентификатор, а не буква в названии. Различия в обвязке — уровни TTL, наличие развязки, распиновка — определяются конкретной платой, а не маркировкой чипа.

Возможности: что адаптер умеет и чего не умеет

Таблицы ниже описывают не «возможности микросхемы из даташита», а то, с чем администратор сталкивается на практике.

Со стороны USB Со стороны UART
опознаётся по VID/PID без внешней утилиты создаёт устройство /dev/ttyUSB*
питание от шины, отдельный блок питания не нужен уровни TTL: 5 В или 3,3 В — зависит от платы
работает через любой USB-порт, включая хаб поддерживает стандартные скорости от 9600 до 115200 и выше
не требует загрузки прошивки при включении управление потоком RTS/CTS — по возможностям платы
Что нужно Подходит ли ARK3116 Оговорка
Консоль маршрутизатора или коммутатора да, самая частая задача уровни и распиновка — по паспорту оборудования
Отладочный порт микроконтроллера да 3,3 В против 5 В: несовпадение выводит порт из строя
Промышленный контроллер по RS-232 да, при наличии преобразователя уровней сам чип выдаёт TTL, а не ±12 В
IrDA-приёмник или передатчик да, заявлено в описании драйвера нужен сам модуль IrDA
Модем или телефон старого поколения исторически да современные кабели для мобильных давно ушли в USB
Скорости выше 1 Мбит/с нет это Full-Speed USB и UART без внешнего потока

Есть и третья категория — устройства, где адаптер не нужен вовсе. Если у оборудования есть сетевой порт и SSH, консольный кабель остаётся аварийным средством, а не ежедневным инструментом. Покупать его стоит именно в этом качестве: однажды он понадобится в момент, когда сеть не поднимается, и тогда важно, чтобы он был в ящике, а не «заказан и едет».

Важная оговорка про «RS-232». Чип работает с логическими уровнями (TTL), а промышленный стандарт RS-232 предполагает двухполярные сигналы ±12 В. Платы, которые продаются как «USB-RS232 на ARK3116», содержат дополнительный преобразователь уровней; если его нет, а вы подключились к настоящему COM-порту оборудования, ничего не заработает — и хорошо, если не сгорит.

Драйвер в Linux: что уже есть в ядре

Проверка делалась на живом хосте: Debian 12, ядро 6.1.0-54-amd64. Ниже — фактический вывод, а не пересказ.

Что проверялось Результат
Модуль на месте /lib/modules/6.1.0-54-amd64/kernel/drivers/usb/serial/ark3116.ko
Описание USB ARK3116 serial/IrDA driver
Автор Bart Hartgers <bart.hartgers+ark3116@gmail.com>
Лицензия GPL
Зависимости usbserial, usbcore
В дереве ядра intree: Y
Алиасы устройств usb:v18ECp3118d*… и usb:v6547p0232d*…
Конфигурация ядра CONFIG_USB_SERIAL_ARK3116=m
flowchart LR
  HOST["USB-хост: xHCI и usbcore"] --> MATCH{"совпал ли VID/PID?"}
  MATCH -- "6547:0232" --> DRV["ark3116.ko: usb-serial драйвер"]
  MATCH -- "18EC:3118" --> DRV
  MATCH -- "другой" --> OTHER["другой драйвер или «устройство не опознано»"]
  DRV --> TTY["/dev/ttyUSB0: line discipline, termios"]
  TTY --> APP["picocom, screen, minicom, своя программа"]
  UDEV["правило udev: стабильное имя"] -.-> TTY
  GRP["группа dialout"] -.-> APP

Для сравнения: в том же каталоге ядра Debian лежат 53 модуля USB-serial, включая ftdi_sio, cp210x, pl2303, ch341, mct_u232, ftdi_sio и другие. Все они — модули (=m), то есть подгружаются при появлении устройства или вручную. Ни один из них на проверяемом хосте не был загружен (lsmod пусто по этим именам), потому что устройств не подключено: модуль появляется в системе, когда он нужен.

Микросхема Модуль в ядре Debian 12 Описание из modinfo
ARK3116 ark3116 USB ARK3116 serial/IrDA driver
FTDI FT232 ftdi_sio USB FTDI Serial Converters Driver
Silicon Labs CP210x cp210x Silicon Labs CP210x RS232 serial adaptor driver
Prolific PL2303 pl2303 Prolific PL2303 USB to serial adaptor driver
CH340/CH341 ch341 описание пустое даже в свежем ядре

Строка про ch341 — не придирка: у этого модуля нет описания в modinfo, и в инвентаризации по описанию он не найдётся. Мелочь, которая ломает автоматику, если она ищет адаптеры по тексту.

Как это устроено внутри

Путь от разъёма до приложения состоит из четырёх звеньев, и ломается он тоже по звеньям — что удобно для диагностики.

flowchart TD
  PLUG["вставили адаптер"] --> LS{"lsusb видит 6547:0232?"}
  LS -- нет --> P1["проблема кабеля, порта или питания"]
  LS -- да --> DM{"dmesg: драйвер привязался?"}
  DM -- нет --> P2["модуль не загружен или VID не в таблице"]
  DM -- да --> DEV{"появился /dev/ttyUSB*?"}
  DEV -- нет --> P3["нет модуля usbserial или конфликт с brltty"]
  DEV -- да --> OPEN{"порт открывается без прав root?"}
  OPEN -- нет --> P4["добавить пользователя в dialout, перелогиниться"]
  OPEN -- да --> RUN["работа: stty, затем терминал"]
  1. USB-хост. Контроллер xHCI опрашивает устройство и читает дескрипторы: производитель, продукт, класс.
  2. Сопоставление. Ядро сверяет пару VID/PID с таблицами всех usb-serial драйверов. Для 6547:0232 совпадение даёт ark3116.
  3. Драйвер usb-serial. ark3116.ko регистрируется как tty-драйвер поверх usbserial: он превращает USB-передачу в поток байт и обратно.
  4. Слой tty. Появляется /dev/ttyUSB0; дальше работают обычные механизмы: termios (скорость, биты, чётность), управление потоком, права доступа.
Звено Чем проверяется Типичная причина отказа
USB-хост lsusb кабель только для зарядки, мёртвый порт, нехватка питания
Сопоставление dmesg модуль не загружен, VID не в таблице
usb-serial ls /dev/ttyUSB* нет usbserial, конфликт с brltty
tty и права stty -F, id нет группы dialout, SELinux/AppArmor

Установка

В Linux устанавливать нечего — это главный вывод статьи. Проверка сводится к трём командам, и только если модуль отсутствует, начинается разговор о пакетах.

# 1. есть ли модуль в ядре
modinfo ark3116 | head -6

# 2. загружен ли он сейчас и что говорит журнал ядра
lsmod | grep ark3116
dmesg | tail -20

# 3. при необходимости загрузить вручную
sudo modprobe ark3116

Если modinfo отвечает «Module ark3116 not found», это значит, что ядро собрано без этого драйвера — например, это не дистрибутивное ядро, а самосборное с урезанной конфигурацией. Тогда вариантов два: поставить дистрибутивное ядро или пересобрать своё с CONFIG_USB_SERIAL_ARK3116=m. Скачивать драйвер отдельным файлом не нужно и не следует.

Права доступа — второй шаг, и именно на нём спотыкаются чаще всего:

# кто вы и в каких группах
id
# добавить себя в dialout и перелогиниться (иначе группа не применится)
sudo usermod -aG dialout "$USER"

Постоянное имя порта — третья полезная настройка. Без неё при двух подключённых адаптерах /dev/ttyUSB0 и /dev/ttyUSB1 могут поменяться местами после перезагрузки, и скрипт однажды запишет в чужое устройство.

# /etc/udev/rules.d/99-ark3116.rules
SUBSYSTEM=="tty", ATTRS{idVendor}=="6547", ATTRS{idProduct}=="0232", SYMLINK+="ttyARK0"

sudo udevadm control --reload-rules && sudo udevadm trigger
ls -l /dev/ttyARK0

Windows: честный порядок

Здесь старая заметка обещала автоматическую установку встроенного драйвера на Windows 7–11. Проверить это на парке машин в рамках этой статьи не удалось, поэтому порядок такой: сначала посмотреть, опознала ли система устройство сама (Диспетчер устройств → Порты (COM и LPT)), и только потом искать драйвер.

Шаг Что делать Чего не делать
1 Посмотреть, появился ли COM-порт в диспетчере устройств не ставить «драйвер» до проверки
2 Если устройство с восклицательным знаком — узнать его VID/PID в свойствах не брать первый файл из поиска
3 Проверить подпись исполняемого файла, если он всё же нужен не запускать файлы без цифровой подписи
4 По возможности использовать хост с Linux для консольных задач не ставить драйвер на машину с секретами «на пробу»

Настройка

Настройка — это параметры линии и терминал. По умолчанию newer tty создаётся с параметрами 9600 8N1; для консоли сетевого оборудования обычно нужно 115200 8N1.

flowchart LR
  SPEED["скорость: 9600, 115200, 230400"] --> CONF["параметры линии: 8N1, без управления потоком"]
  FLOW["управление потоком: none, rtscts"] --> CONF
  LVL["уровни TTL: 5 В или 3,3 В"] --> RISK["несовпадение уровней: порт устройства выходит из строя"]
  ISO["гальваническая развязка"] --> RISK
  CONF --> TERM["терминал или скрипт"]
# параметры линии: 115200 бод, 8 бит, без чётности, 1 стоп-бит, без управления потоком
stty -F /dev/ttyUSB0 115200 cs8 -cstopb -parenb -crtscts

# интерактивно: picocom (выход Ctrl+A, Ctrl+X) или screen (выход Ctrl+A, K)
picocom -b 115200 /dev/ttyUSB0
screen /dev/ttyUSB0 115200

# minicom: создать профиль и не сохранять настройки в системный файл
minicom -D /dev/ttyUSB0 -b 115200
Параметр Типичное значение Когда меняют
Скорость 115200 для сетевого оборудования, 9600 для старой промышленной электроники по паспорту устройства
Биты и чётность 8N1 7E1 встречается у старого промышленного ПО
Управление потоком выключено включают, если оборудование требует RTS/CTS
DTR/RTS по умолчанию подняты некоторые устройства требуют их снятия, иначе не отвечают
Таймаут чтения не задаётся в скриптах задаётся на уровне termios или опроса

Скриптовая работа с портом — не редкость: снять вывод консоли при загрузке, отправить команду, дождаться ответа. Здесь помогает python3 -m serial.tools.miniterm или собственный код на pyserial; для разовых задач хватает timeout 5 cat /dev/ttyUSB0.

Есть и обратная сторона удобства: /dev/ttyUSB0 — это файл, и запись в него ничем не защищена. Если в системе два адаптера, а скрипт обращается к имени по умолчанию, однажды команда уйдёт не в тот порт. Поэтому в сценариях, которые что-то меняют на устройстве, имя порта лучше брать из стабильного символьного имени, а перед записью проверять, что устройство то: сравнивать idVendor и idProduct через udevadm info -q property -n /dev/ttyARK0. Это две секунды работы и снятый целый класс инцидентов.

Третий приём, который экономит часы при разборе: держать порт открытым в picocom с включённым журналом (-g файл). Тогда всё, что устройство сказало при загрузке, оказывается в файле, и разбор идёт по тексту, а не по памяти.

Замеры и цифры

Что измерено Значение Как измерено
Ядро проверяемого хоста 6.1.0-54-amd64 uname -r
Модуль драйвера ark3116.ko modinfo ark3116
Алиасов устройств в драйвере 2 modinfo -F alias
Модулей USB-serial в ядре 53 ls /lib/modules/*/kernel/drivers/usb/serial/
Загруженных USB-serial модулей 0 lsmod
Конфигурация ядра CONFIG_USB_SERIAL_ARK3116=m /boot/config-$(uname -r)
Лицензия драйвера GPL, внутри дерева ядра modinfo
ARK3116: ключевые числа
ARK3116: идентификаторы, встроенный драйвер и замеры на живом ядре

Оговорка о границах измерения: проверялся один хост и одно ядро. На других дистрибутивах и версиях ядра набор usb-serial модулей отличается, а на самосборных ядрах драйвер может отсутствовать вовсе. Утверждение «драйвер встроен» относится к дистрибутивным ядрам, а не к любому ядру Linux.

Почему это круто

  • Драйвер уже стоит. В дистрибутивном ядре ark3116 есть как модуль, подписанный вместе с ядром: ничего скачивать и «устанавливать» не нужно.
  • Опознание по двум идентификаторам. 6547:0232 и 18EC:3118 — этого достаточно для инвентаризации и правил udev.
  • Стабильное имя порта. Одно правило udev убирает целый класс ошибок «записал не в то устройство».
  • Работает без прошивки. Чип не требует загрузки firmware при включении, поэтому не бывает «устройство есть, порта нет».
  • Дешёвый расходник. Для консольного кабеля, который теряется и ломается, это важнее характеристик.
  • Прозрачен для приложений. После /dev/ttyUSB0 работают все обычные инструменты: picocom, screen, minicom, pyserial.
  • История в upstream. Драйвер поддерживается в основном дереве ядра, а не в вендорском установщике, который перестал обновляться.
  • Диагностика по звеньям. Четыре шага lsusb → dmesg → /dev → права дают ответ за минуту.

Подводные камни

  • Уровни TTL не совпадают молча. Плата на 5 В, подключённая к порту 3,3 В, выводит порт из строя — и обычно это замечают уже после. Проверять по паспорту платы до подключения.
  • RS-232 и TTL — разные вещи. Без преобразователя уровней адаптер не заработает с настоящим COM-портом, а в худшем случае повредит его.
  • brltty перехватывает устройство. На части дистрибутивов служба для дисплеев Брайля забирает 6547:0232 себе, и порт не появляется. Лечится исключением в конфигурации brltty или отключением службы.
  • Группа dialout применяется после входа. Добавление в группу не действует на текущую сессию — нужен новый вход или newgrp dialout.
  • Порты меняются местами. Два одинаковых адаптера дают /dev/ttyUSB0 и /dev/ttyUSB1 в порядке, который не гарантирован; без правила udev скрипт может обратиться не к тому устройству.
  • Драйверы с сайтов-агрегаторов. Файл без подписи проверить нечем; для Linux он не нужен вовсе, а для Windows это единственный реальный риск заражения в этой задаче.
  • Клоны ведут себя иначе. Один и тот же VID/PID встречается у разных плат с разной обвязкой, поэтому «работает у коллеги» ничего не гарантирует.
  • Управление потоком по умолчанию выключено. Если оборудование требует RTS/CTS, а линия настроена без него, обмен будет терять байты без внятной ошибки.

Чек-лист внедрения

  1. Проверить идентификаторы: lsusb | grep -i 6547 — устройство должно быть видно как 6547:0232.
  2. Убедиться, что драйвер есть в ядре: modinfo ark3116.
  3. Посмотреть dmesg после подключения: драйвер должен привязаться и назвать порт.
  4. Проверить права: id, при необходимости добавить пользователя в dialout и перелогиниться.
  5. Задать стабильное имя правилом udev, если адаптеров больше одного.
  6. Настроить линию: скорость и формат по паспорту устройства, управление потоком осознанно.
  7. Сверить уровни и распиновку до первого подключения к оборудованию — это единственная ошибка, которая стоит денег.

Критерий «работает»: порт открывается без sudo, stty -F показывает заданную скорость, терминал отвечает на ввод, а после перезагрузки имя порта не изменилось.

FAQ

Нужно ли ставить драйвер ARK3116 в Linux?

Нет, если ядро дистрибутивное: драйвер ark3116 входит в него модулем. modinfo ark3116 покажет описание, автора и лицензию — это и есть доказательство, что он есть.

Как узнать, что передо мной именно ARK3116, а не другой переходник?

По паре идентификаторов в lsusb: 6547:0232 либо 18EC:3118. Название на корпусе и надпись на плате ничего не гарантируют — встречаются перемаркированные клоны.

Порт не появляется, хотя lsusb устройство видит. Что проверять?

Три вещи по порядку: загружен ли модуль (lsmod), что говорит dmesg, и не перехватила ли устройство служба brltty. Если драйвер привязался, а /dev/ttyUSB* нет, проблема в слое usb-serial, а не в железе.

Почему порт открывается только под root?

Потому что устройство принадлежит группе dialout с правами rw для группы. Добавление пользователя в группу действует только после нового входа в систему; проверяется командой id.

Можно ли использовать этот адаптер для настоящего RS-232?

Только если на плате есть преобразователь уровней. Сам чип работает с логическими уровнями TTL, а RS-232 — двухполярный сигнал; подключение «напрямую» опасно для оборудования.

Чем ARK3116 хуже FTDI FT232?

Исторически FTDI считался стабильнее, и в ядре он поддержан тем же способом (ftdi_sio). Разница в цене кратная, а для консольного кабеля, который таскают в кармане, дешёвый вариант часто разумнее. Выбирать стоит по задаче, а не по репутации чипа.

Что делать на Windows, если система не опознала устройство?

Сначала посмотреть VID/PID в свойствах неизвестного устройства и поискать драйвер по этому идентификатору у вендора оборудования, а не на сайте-агрегаторе. Файл без цифровой подписи лучше не запускать: проверить его происхождение нечем.

Итог

Старая заметка была полезна в 2010 году и опасна сегодня: она вела читателя скачивать драйвер там, где в Linux драйвер уже в ядре, а на Windows предлагала файлы неизвестного происхождения. Проверка на живом Debian 12 показывает простую картину: модуль ark3116 на месте, поддерживается в upstream, опознаёт устройство по двум парам идентификаторов и требует от администратора ровно трёх действий — убедиться в наличии модуля, дать права и настроить линию. Всё остальное — аккуратность с уровнями TTL и стабильные имена портов.

Цитата: Лучший драйвер для USB-UART — тот, что уже подписан вместе с ядром; всё, что нужно скачать отдельным файлом, требует отдельного доверия.

Связанные материалы

LLM Summary

  • Тема: ARK3116 — микросхема USB-UART от ArkMicroChips; статья переписана из заметки 2010 года, которая была каталогом драйверных сайтов.
  • Идентификаторы: Vendor ID 0x6547, Product ID 0x0232; второй набор 0x18EC:0x3118 присутствует в таблице драйвера.
  • Драйвер Linux: модуль ark3116 (CONFIG_USB_SERIAL_ARK3116=m), автор Bart Hartgers, лицензия GPL, intree: Y, зависимости usbserial и usbcore.
  • Проверка на живом хосте: Debian 12, ядро 6.1.0-54-amd64; модуль на месте, 53 модуля USB-serial в дереве, ни один не загружен без устройства.
  • Порядок диагностики: lsusb → dmesg → /dev/ttyUSB* → права группы dialout.
  • Настройка: stty -F /dev/ttyUSB0 115200 cs8 -cstopb -parenb -crtscts, затем picocom, screen или minicom; стабильное имя — правилом udev по VID/PID.
  • Отличия от RS-232: чип работает с уровнями TTL (5 В или 3,3 В в зависимости от платы), двухполярный RS-232 требует преобразователя уровней.
  • Риски: несовпадение уровней TTL выводит порт из строя; драйверы с сайтов-агрегаторов для Linux не нужны и опасны для Windows; служба brltty может перехватить устройство.
  • Ограничения: замер сделан на одном ядре и одном дистрибутиве; варианты ARK3116T и ARK3116S в статье не различаются — это требует проверки по документации производителя.

Промт для агента (установка и настройка)

Готовый промт для AI-агента: скопируйте блок целиком кнопкой и отдайте своему ассистенту. Готового AGENTS.md у темы нет — источник шагов: документация драйвера в дереве ядра Linux (drivers/usb/serial/ark3116.c) и страница uark(4) FreeBSD из раздела «Связанные материалы»; проверки взяты из разделов «Установка» и «Замеры и цифры».

Задача: подключить USB-UART адаптер на ARK3116 к Linux-хосту и настроить порт так, чтобы он работал без root и с постоянным именем.

Материалы:
- код драйвера в upstream: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/drivers/usb/serial/ark3116.c
- драйвер FreeBSD: https://man.freebsd.org/cgi/man.cgi?query=uark&sektion=4
- правило: драйвер для Linux из интернета не скачивать, он входит в дистрибутивное ядро

Шаг 1. Опознание устройства:
lsusb | grep -i 6547          # ожидается 6547:0232
lsusb | grep -i 18EC          # либо 18EC:3118

Шаг 2. Проверка драйвера:
modinfo ark3116 | head -6     # описание "USB ARK3116 serial/IrDA driver", GPL, intree: Y
grep -i ARK3116 /boot/config-$(uname -r)   # ожидается CONFIG_USB_SERIAL_ARK3116=m

Шаг 3. Подключение и проверка привязки:
dmesg | tail -20              # драйвер назвал порт
ls -l /dev/ttyUSB*            # появился /dev/ttyUSB0

Шаг 4. Права:
id                            # есть ли группа dialout
sudo usermod -aG dialout "$USER"   # затем новый вход в систему

Шаг 5. Постоянное имя (если адаптеров больше одного):
/etc/udev/rules.d/99-ark3116.rules:
SUBSYSTEM=="tty", ATTRS{idVendor}=="6547", ATTRS{idProduct}=="0232", SYMLINK+="ttyARK0"
sudo udevadm control --reload-rules && sudo udevadm trigger

Шаг 6. Параметры линии и проверка обмена:
stty -F /dev/ttyUSB0 115200 cs8 -cstopb -parenb -crtscts
picocom -b 115200 /dev/ttyUSB0
timeout 5 cat /dev/ttyUSB0    # после нажатия Enter на устройстве должны прийти байты

Запрещено:
- скачивать и устанавливать "драйвер ARK3116" для Linux: он уже в ядре, файл из поиска проверить нечем;
- подключать адаптер к порту оборудования, не сверив уровни TTL (5 В против 3,3 В) и распиновку;
- считать, что TTL-адаптер совместим с настоящим RS-232 без преобразователя уровней;
- проверять работу на машине с секретами, если есть подозрение на перехват устройства службой brltty;
- оставлять двум одинаковым адаптерам имена по умолчанию, если от них зависит скрипт.

Что считать успехом: lsusb показывает 6547:0232, modinfo находит ark3116, порт открывается без sudo, stty подтверждает скорость и формат линии, после перезагрузки имя порта не изменилось.