Настройка COM-портов
COM-порт — это тип последовательного порта, который соответствует следующим дополнительным требованиям:
- Доступ к COM-порту осуществляется через экземпляр класса интерфейса устройства com-порта. Идентификатор GUID для этого класса GUID_DEVINTERFACE_COMPORT, который определен в ntddser.h.
- Для работы с COM-портом используется интерфейс, совместимый с UART 16550, определенный в ntddser.h.
- Чтобы обеспечить совместимость с большинством приложений, которые обращаются к COM-портам, следует назначить символьное имя ссылки, использующее стандартное соглашение об COM именовании , где — номер COM-порта (например, COM1). Если вы используете COM имя, необходимо получить номер COM-порта из базы данных COM-портов. Номера COM-портов следует использовать только с именами COM .
По умолчанию объединенная операция установщика класса для класса настройки устройств Ports и драйвера функции Serial настраивает устройство в качестве COM-порта.
Сведения о том, как установщик класса Ports и драйвер функции Serial создают интерфейс устройства COM-порта для COM-порта, см. в статье Внешнее именование COM-портов.
Совместная работа с нами на GitHub
Источник этого содержимого можно найти на GitHub, где также можно создавать и просматривать проблемы и запросы на вытягивание. Дополнительные сведения см. в нашем руководстве для участников.
Windows driver documentation
Программирование установки последовательных портов и COM-портов
В этом разделе описывается программирование традиционных COM-портов. Сведения о подключенных к USB-портах последовательных портов см. в разделе Драйвер последовательного usb (Usbser.sys)..
Для большинства устройств класс настройки устройств Порты и драйвер последовательной функции предоставляют функциональные возможности, необходимые для работы последовательных портов и COM-портов. Чтобы установить последовательные порты и COM-порты с помощью этих системных компонентов, выполните указанные ниже действия.
- Предоставьте INF-файл, в котором указаны класс настройки устройства Ports и драйвер функции Serial в качестве службы для порта.
- Чтобы настроить последовательный порт в качестве COM-порта, выполните требования, определенные в разделе Конфигурация COM-портов.
Дополнительные сведения об установке последовательных портов и COM-портов с помощью класса настройки устройства Порты и драйвера последовательной функции см. в следующих разделах:
Если вы выполняете пользовательскую установку COM-порта, необходимо соблюдать требования к COM-портам, которые определены в разделе Конфигурация COM-портов.
Совместная работа с нами на GitHub
Источник этого содержимого можно найти на GitHub, где также можно создавать и просматривать проблемы и запросы на вытягивание. Дополнительные сведения см. в нашем руководстве для участников.
Windows driver documentation
Очистка занятых COM портов в Windows

02.02.2022

itpro

PowerShell, Windows 10, Windows 7, Windows Server 2019

комментариев 26
Когда вы подключаете к компьютеру новое COM или некоторые USB устройства (например, USB модем, мобильный телефон, Bluetooth адаптер, конвертеров последовательных портов в USB и т.п.), Windows определяет его через механизм Plug-n-Play и назначит ему номер COM порта в диапазоне от 1 до 255 (COM1, COM2, COM3 и т.д.). При повторном подключении этого же устройств, ему назначается номер COM порта (Communication Port, или Serial port), зарезервированный за ним ранее. Новым устройствам выдается первый незанятый номер COM порта. Не редкость, когда внешние устройства при подключении создают сразу несколько COM портов (в моем случае после подключения адаптера Bluetooth, в системе появилось сразу 10 . новых COM портов).
Ряд приложений (как правило, довольно древних), способны адресовать только двухзначные номера COM портов, и отказываются работать с COM100 и выше. Или видят только COM1-COM9 устройства. Что делать, если подключенное устройство получило высокий номер COM порта? Можно ли сбросить нумерацию для зарезервированных COM портов и удалить назначенные порты?
Изменить номер COM порта устройства в Windows
В Windows можно вручную изменить номер COM порта, назначенный устройству. Предположим требуемый COM порт уже занят, и мы хотим его попробовать его освободить. Для этого:
- Откройте диспетчер устройств (Device Manager) командой devmgmt.msc;
- В меню выберите View->Show Hidden Devices;

- Затем разверните Ports (COM & LPT) и найдите в списке устройство;
- Перейдите на вкладку Port Settings и нажмите кнопку Advanced;
- Текущий номер COM порта, назначенный устройству указан в поле COMPortNumber;
- Чтобы изменить его, раскройте выпадающий список и выберите номер COMпорта, который хотите задать.

Но чаще всего изменить номер COM порт на другой не получится, так как все «низкие» COM порт уже используются (in use);


Однако такой способ позволяет освободить занятый COM порт не во всех случаях.
Вы можете вывести полный список занятых COM портов в Windows с помощью PowerShell:
Get-WMIObject Win32_SerialPort | Select-Object Name,DeviceID,Description
Можно определить номер COM порта для определённого устройства по его имени, например:
Get-WMIObject Win32_SerialPort | Where-Object < $_.Name -like "*Arduino*">|select name, deviceid
Или
Get-WMIObject Win32_SerialPort | Where-Object < $_.Name -like "*GPS*">|select name, deviceid
Определяем процесс, который использует COM в Windows
Вы не сможете освободить COM порт устройства, которое используется Windows или запущенной программой, процессом. Сначала вам нужно завершить процесс/программу, которая использует сейчас COM порт. Чтобы определить имя процесса, который использует COM порт понадобится утилита Process Explorer (https://docs.microsoft.com/en-gb/sysinternals/downloads/process-explorer).
Сначала нужно вывести имя службы, которая использует COM порт. Выполните команду PowerShell:
get-pnpdevice -class Ports -ea 0| Select Name, PNPDeviceID, Status, Service

Имя службы данного COM порта указано в столбце Service. Например, для COM2 это Serial. Теперь нужно запустить Process Explorer с правами администратора и выбрать в меню Find -> Find Handle or DLL. В строке Hangde or DLL substring введите значение Service, полученное ранее. В нашем примере это Serial .
Process Explorer должен показать процесс, который использует сейчас ваш COM порт. Чтобы освободить COM порт, завершите процесс или программу.

Сброс назначенных COM портов Windows через реестр
Информация об используемых COM портах хранится в ключе реестра CommDB в разделе HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\COM Name Arbiter
-
Откройте редактор реестра (regedit.exe) и перейдите в указанную ветку.
Важно! Настоятельно рекомендуем предварительно создать резервную копию данной ветки реестра (File -> Export). В том случае, если что-то пойдет не так, вы сможете вернуться к первоначальной конфигурации COM портов.

Значение параметра ComDB в двоичном формате определяет список COM портов, зарезервированных в системе. Каждый бит определяет состояние соответствующего порта (от 1 до 255). К примеру, если нам нужно оставить резервацию только для COM3, hex значение ComDB будет равно 04 (0000 0100);
Важно! Будьте предельно внимательными, ни в коем случае не добавьте в этот параметр дополнительные байт, иначе система может начать падать в BSOD.

Если нужно полностью сбросить все привязки COM, измените значение ключа ComDB на 0.

Примечание. В разделе HKEY_LOCAL_MACHINE\HARDWARE\DEVICEMAP\SERIALCOMM можно увидеть полный список COM портов, доступных в Windows.В разделе HKEY_LOCAL_MACHINE\HARDWARE\DEVICEMAP\SERIALCOMM можно увидеться список COM портов, подключенных к системе.

Также вы можете использовать следующие две бесплатные утилиты для очистки занятых (In Use) COM портов:

- COM Name ArbiterTool – утилита для освобождения занятых COM портов. Запустите утилиту с правами администратора, выберите COM порты, которые вы хотите освободить и нажмите Clear unused Reservationsи Remove non-present devices;
- Device Cleanup Tool – утилита используется для поиска в реестре информации о ранее подключенных устройств (в ветке HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum) и удаления неиспользуемых устройств и очистки резерваций COM портов.
Предыдущая статья Следующая статья
как определить номер com порта usb устройства
ставлю клиентам оборудование. возможно 2 типа подключений — через RS232 либо USB. В сопутствующем ПО необходимо прописать номер порта. Если подключение через RS232 — проблем никаких, все порты чаще всего подписаны на системнике, либо методом перебора, их как правило, не больше 5-и.
Но часто бывает что все физические comы заняты либо отсутствуют вовсе и приходится выполнять подключение через USB. В соответствии с технической документацией в этом случае в каталоге с ПО оборудования создаем символическую ссылку (драйвер) ttyS99 на /dev/ttyACM0. Как можно быстро узнать номер ком порта этого ttyACM0? Он определяется чаще всего как 9, но бывает какой-нибудь 61, 62 или вообще любой! начинаются танцы с бубном в виде бесконечного перебора.
xxxander
03.12.18 00:11:16 MSK
← 1 2 →
При помощи udev создавай симлинк при подключении. И это будет уже не безымянный USB ACM, а /dev/чтототам. Конечно, если у железяки свои VID/PID, а не используется какой-нибудь ширпотребный.
Как можно быстро узнать номер ком порта этого ttyACM0? Он определяется чаще всего как 9
Ты что-то попутал. Какой, нафиг, «номер ком-порта»? Это тебе не прошивка для игровых приставок! Какое устройство создалось, такое и надо указывать в подключении.
anonymous
( 03.12.18 00:25:57 MSK )
Ответ на: комментарий от anonymous 03.12.18 00:25:57 MSK
В сопутствующем ПО необходимо прописать номер порта
До меня дошло! «сопутствующее ПО» писал вантузоид, да еще и не на ЯП, а на какой-нибудь «си-диезине»? И там нет устройства, а вместо него «номер порта»? Тогда смотри в исходники этого шлака. Я вообще не представляю, какой логикой мог автор руководствоваться, чтобы «номер порта».
anonymous
( 03.12.18 00:27:38 MSK )
Ответ на: комментарий от anonymous 03.12.18 00:27:38 MSK
чтобы запустить аппарат, необходимо в каталоге с его ПО в конфигурационном файле .ini прописать номер com порта. строка так и называется comport=*, где * — номер от 1 до 99. на windows проблема решалась в диспетчере устройств во вкладке com порты — номер порта. на линукс я не знаю как определить поэтому и задал вопрос. что не так я спросил? аппарат не предназначен для USB поэтому прописывается символическая ссылка (драйвер), эмулирующий этот ком. прописывать номер всеравно надо
xxxander
( 03.12.18 00:42:06 MSK ) автор топика
Ответ на: комментарий от xxxander 03.12.18 00:42:06 MSK
проблема в том что одно и то же устройство с одним и тем же серийником, id, кодом или еще чем-то, на разных linux системах определяется под разным номером этого com. В основном это системы под ККТ, типо artix и проч. Нужен универсальный инструмент распознавания
xxxander
( 03.12.18 00:59:27 MSK ) автор топика
Ответ на: комментарий от xxxander 03.12.18 00:42:06 MSK
на линукс я не знаю как определить поэтому и задал вопрос. что не так я спросил?
Объясняю: спрашивать надо того олуха, который это говно написал! Потому что в линуксе нет понятия «номер порта».
прописывается символическая ссылка (драйвер), эмулирующий этот ком.
Как она выглядит и куда прописывается?
Блин, ну неужели ты вообще в линуксе ниже плинтуса?
anonymous
( 03.12.18 01:10:10 MSK )
Ответ на: комментарий от anonymous 03.12.18 01:10:10 MSK
ln -s /dev/ttyACM0 /ПОустройства/ttyS99
xxxander
( 03.12.18 01:17:12 MSK ) автор топика
Ответ на: комментарий от xxxander 03.12.18 01:17:12 MSK
ОК, теперь хоть понятно.
Как ты думаешь, что означает «ttyS99»? Какой номер «ком-порта»? Давай подскажу: /dev/ttyS0 — это «ком1».
anonymous
( 03.12.18 01:21:02 MSK )
Ответ на: комментарий от anonymous 03.12.18 01:21:02 MSK
«Потому что в линуксе нет понятия «номер порта». »
он есть в windows, возможно разрабы перенесли его в linux под тем же названием «для простоты». какой-то параметр существует точно
«Как ты думаешь, что означает «ttyS99»? Какой номер «ком-порта»? Давай подскажу: /dev/ttyS0 — это «ком1». »
по твоей логике ком100. но это бред. я писал уже — на разных linux системах везде пишется ttyS99 одинаково, но по факту методом подбора определяется как ком9, ком10, ком61
xxxander
( 03.12.18 01:29:51 MSK ) автор топика
Не номер портта, а имя устройства. Смотри, что выводится в dmesg при подключении девайса
ovax ★★★
( 03.12.18 01:44:59 MSK )
Ответ на: комментарий от ovax 03.12.18 01:44:59 MSK
[17819.727106] usb 2-1.5: New USB device found, idVendor=079b, idProduct=0028 [17819.727111] usb 2-1.5: New USB device strings: Mfr=0, Product=0, SerialNumber=0 [17819.727586] cdc_acm 2-1.5:1.0: ttyACM0: USB ACM device
это. чтобы запустить ‘это’ устройство, нужно в каталоге с его ПО в конфигурационном файле прописать comport=9. почему? почему если я поеду завтра в какой-нибудь леруомерлен со своим устройством, попробую воткнуть его им в ККТ, чтобы оно заработало у них, я должен буду у них в том же каталоге с ПО, прописать comport=61
xxxander
( 03.12.18 01:53:38 MSK ) автор топика
Ответ на: комментарий от xxxander 03.12.18 01:53:38 MSK
Особо суровый идиотизм. С этим вопросом — к разработчику.
ovax ★★★
( 03.12.18 02:19:17 MSK )
Ответ на: комментарий от ovax 03.12.18 02:19:17 MSK
Предположим номеров comпорт не существует и надписи на системниках рядом с разъёмами com1 com2 и т д это чушь, а разработчики написали бред. Все же я не знаю по другому как их обзывать, буду говорить номер компорт извините что мозолю вам глаза. Одно я могу утверждать на 100 процентов. Какой-то параметр компорта существует, потому что от него зависит работоспособность устройства, я просто не знаю, как его посмотреть, с этим и обратился к вам, прошаренным линуксоводам. Повторюсь, если устройство физически подключается по ком через разъём rs232, то решение сводится к осмотру системника и поиска надписи. Если же подключение выполняется по USB, приходится гадать, потому что это уже виртуальный компорт, но по моей практике, у него тоже есть свой номер.
“Блин, ну неужели ты вообще в линуксе ниже плинтуса?”
Да это так. Я в линуксе на уровне монтирования флешки под командой sudo. Ровно столько мне требуется для работы. И если честно, чем глубже я в него окунаюсь, тем больше меня выворачивает наизнанку
xxxander
( 03.12.18 08:54:36 MSK ) автор топика
Ответ на: комментарий от xxxander 03.12.18 08:54:36 MSK

Под этим номером разработчик мог понимать что угодно,напиши ему письмо.
jo_b1ack ★★★★★
( 03.12.18 09:31:30 MSK )
Ответ на: комментарий от anonymous 03.12.18 00:25:57 MSK
Конечно, если у железяки свои VID/PID, а не используется какой-нибудь ширпотребный.
Даже тут можно выйти из положения, если она одна. Либо привязаться к Bus, если разные разъёмы на разных.
AS ★★★★★
( 03.12.18 09:39:53 MSK )
Ответ на: комментарий от anonymous 03.12.18 00:27:38 MSK
Я вообще не представляю, какой логикой мог автор руководствоваться, чтобы «номер порта».
Писал под DOS в начале 90-ых?
AS ★★★★★
( 03.12.18 09:40:58 MSK )
Ответ на: комментарий от xxxander 03.12.18 00:59:27 MSK
Нужен универсальный инструмент распознавания
Какое слово непонятно в первом же ответе анонимуса? Он же написал: udev.
AS ★★★★★
( 03.12.18 09:42:10 MSK )
Ответ на: комментарий от xxxander 03.12.18 08:54:36 MSK
Если же подключение выполняется по USB, приходится гадать, потому что это уже виртуальный компорт, но по моей практике, у него тоже есть свой номер.
Разработчик, конечно, мог упороться и зацепиться за то, что показывает ls -dl /sys/dev/char/* | grep «char/188» , но мне кажется, что он, всё же, хочет /dev/ttyS, а этот симлинк ему можно сделать посредством udev.
AS ★★★★★
( 03.12.18 09:56:37 MSK )
Ответ на: комментарий от anonymous 03.12.18 01:10:10 MSK
Да ну (: вот прям нет?
Morin ★★★★
( 03.12.18 10:14:02 MSK )
ок давай наведу на мысль, про правило для udev тебя уже тут ткнули, это хорошее решение, так как привяжешь конкретную железяку к конкретному симлинку.
если надо быстро посмотреть то
dmesg | grep "USB UART"
смотришь на каком юсб болтается и уже запрашиваешь конкретный хвост, например
dmesg | grep "usb 7-2"
в выхлопе найдешь например ttyUSB4
естественно твоя прога должна понимать не только запись в конфиге вида COMx. Если она настолько тупа, то кроме udev у тебя нет вариантов
ну и естественно это может не работать на всех зоопарках дистра, увы универсального способа нет
Morin ★★★★
( 03.12.18 10:38:12 MSK )
Последнее исправление: Morin 03.12.18 10:39:45 MSK (всего исправлений: 1)
Ответ на: комментарий от xxxander 03.12.18 01:53:38 MSK
Спроси дебила, который этот софт писал!
anonymous
( 03.12.18 11:13:13 MSK )
Ответ на: комментарий от xxxander 03.12.18 08:54:36 MSK
чем глубже я в него окунаюсь, тем больше меня выворачивает наизнанку
Ну так раз ты — тупой геймер, не лезь, куда тебе не надо.
anonymous
( 03.12.18 11:14:05 MSK )

создаем символическую ссылку (драйвер) ttyS99 на /dev/ttyACM0
Символическая ссылка ≠ драйвер.
номер ком порта устройства, подключенного через usb?
У устройства подключенного по usb нет ком порта. Это драйвер юзбового ком адаптера при подключении устройства создаёт виртуальный ком порт.
Если ты хочешь писать в /dev/ttyACM0, то после создания симлинка ttyS99 тебе в твоей программе нужно указать порт 100. Но, емнип, оно у тебя не заработает, т.к. при подключении устройства, у тебя кроме ttyACM0 должен создаться ttyS*, номер которого тебе и нужно узнавать, если не хочешь копаться в правилах udev.
ttyACM0 — это не «ком порт», это юзбовый контроллер, который тебе ком порт добавляет.

Как посмотреть, какой из портов тебе нужен? Все ком порты — «файлы» в директории /sys/class/tty и /dev/serial Смотришь выхлоп ls -l /sys/class/tty и ls -l /dev/serial/by-path и сопоставляешь с тем, в какой USB разъём у тебя подключен адаптер. Как посмотреть куда адаптер воткнул, тебе уже Morin написал.
Я давно юзбовые адаптеры не видел, могу что-нибудь перепутать, если что.
А вообще, нормальный адаптер тебе бы /dev/ttyUSB0 создал, и не сношал мозг.
mogwai ★★★★
( 03.12.18 11:26:35 MSK )

Когдя использую более одного переходника USB-COM, то беру на разных чипах и оборудование вешаю на /dev/serial/by-id/. Если чипы одинаковые то надо делать udev правило, чтобы переходники мапились по серийнику, иначе будет путаница, но мне делать так лень)). Можно еще пробовать вешать на /dev/serial/by-path/, но я не пробовал.
einhander ★★★★★
( 03.12.18 11:46:33 MSK )
Последнее исправление: einhander 03.12.18 11:48:56 MSK (всего исправлений: 1)
Ответ на: комментарий от einhander 03.12.18 11:46:33 MSK
Спасибо всем буду пробовать сегодня
xxxander
( 03.12.18 13:08:16 MSK ) автор топика
Ответ на: комментарий от Morin 03.12.18 10:38:12 MSK
[ 1328.568927] usb 2-1.5: new full-speed USB device number 6 using ehci-pci [ 1328.677761] usb 2-1.5: config 1 interface 0 altsetting 0 endpoint 0x85 has an invalid bInterval 0, changing to 10 [ 1328.678720] usb 2-1.5: New USB device found, idVendor=11ca, idProduct=0219 [ 1328.678725] usb 2-1.5: New USB device strings: Mfr=1, Product=2, SerialNumber=3 [ 1328.678728] usb 2-1.5: Product: Trident USB Device 1.1 [ 1328.678731] usb 2-1.5: Manufacturer: VeriFone Inc [ 1328.678734] usb 2-1.5: SerialNumber: 0123456789ABCD
xxxander
( 03.12.18 17:21:35 MSK ) автор топика
Ответ на: комментарий от mogwai 03.12.18 11:26:35 MSK
добавляется только ttyACM0
xxxander
( 03.12.18 17:22:11 MSK ) автор топика
Ответ на: комментарий от Morin 03.12.18 10:38:12 MSK
то есть. я должен создать правило udev, по которому моя система запомнит мое устройство, например, по серийнику, и будет автоматом при его подключении привязывать к какому-нибудь порту, пусть будет 50, т е ttyS50, если я все правильно понаял. Осталось разобраться как создавать эти udev правила )
xxxander
( 03.12.18 17:40:46 MSK ) автор топика
Ответ на: комментарий от xxxander 03.12.18 17:40:46 MSK
в /etc/udev/rules.d создать файл 90-VeriFone.rules с таким содержанием
ACTION=="add", ATTRS=="11ca", ATTRS=="0219", MODE="0666" SUBSYSTEM=="tty", ATTRS=="11ca", ATTRS=="0219", ATTRS=="0123456789ABCD", SYMLINK+="COM50"
писал по памяти, попробуй, если что-то не выйдет гугли
Morin ★★★★
( 03.12.18 17:57:11 MSK )
Ответ на: комментарий от Morin 03.12.18 17:57:11 MSK
xxxander
( 03.12.18 18:06:49 MSK ) автор топика
Ответ на: комментарий от Morin 03.12.18 17:57:11 MSK
окей. создал правило. в папке dev создается файл ссылка @COM50 ссылающийся на ttyACM0 по типу того что я создавал вручную в папке с ПО только с названием ttyS99. Как мне это поможет в определении компорта?
кто-то писал здесь про систему DOS он прав, это ПО писали в т ч для него, т к есть соответствующая инструкция. если я наберу команду cat /proc/tty/driver/serial, выдаст такой список 0: uart:unknown port:000003F8 irq:4 1: uart:unknown port:000002F8 irq:3 2: uart:unknown port:000003E8 irq:4 3: uart:unknown port:000002E8 irq:3 4: uart:unknown port:00000000 irq:0 5: uart:unknown port:00000000 irq:0 6: uart:unknown port:00000000 irq:0 7: uart:unknown port:00000000 irq:0 8: uart:unknown port:00000000 irq:0 9: uart:unknown port:00000000 irq:0 10: uart:unknown port:00000000 irq:0 11: uart:unknown port:00000000 irq:0 12: uart:unknown port:00000000 irq:0 13: uart:unknown port:00000000 irq:0 14: uart:unknown port:00000000 irq:0 15: uart:unknown port:00000000 irq:03E8 16: uart:unknown port:00000000 irq:0 17: uart:unknown port:00000000 irq:0 18: uart:unknown port:00000000 irq:0 19: uart:unknown port:00000000 irq:0 20: uart:unknown port:00000000 irq:0 21: uart:unknown port:00000000 irq:0 22: uart:unknown port:00000000 irq:0 23: uart:unknown port:00000000 irq:0 24: uart:unknown port:00000000 irq:0 25: uart:unknown port:00000000 irq:0 26: uart:unknown port:00000000 irq:0 27: uart:unknown port:00000000 irq:0 28: uart:unknown port:00000000 irq:0 29: uart:unknown port:00000000 irq:0 30: uart:unknown port:00000000 irq:0 31: uart:unknown port:00000000 irq:0
так вот в системе DOS это значило бы, что
3F8 это COM1 2F8 это COM2 3E8 это COM3 2E8 это COM4
не знаю как это может помочь просто наткнулся на соответствие
xxxander
( 03.12.18 19:29:04 MSK ) автор топика
Ответ на: комментарий от xxxander 03.12.18 19:29:04 MSK
полагаю что надо искать параметр устройства типо 3F8, потом расшифровать его
xxxander
( 03.12.18 19:34:45 MSK ) автор топика
Ответ на: комментарий от xxxander 03.12.18 19:29:04 MSK
А порт теперь не 16-м стал?
anonymous
( 03.12.18 19:35:55 MSK )
Ответ на: комментарий от anonymous 03.12.18 19:35:55 MSK
xxxander
( 03.12.18 19:46:26 MSK ) автор топика
Ответ на: комментарий от xxxander 03.12.18 19:46:26 MSK
Ищи быдлокодера, который это говно написал.
Что это за утилита, кстати? Может, за то время, что ты ищешь решения, проще было с нуля ее переписать?
anonymous
( 03.12.18 20:05:57 MSK )
Ответ на: комментарий от anonymous 03.12.18 20:05:57 MSK
банковское по. устройство — терминал эквайринг
xxxander
( 03.12.18 20:52:56 MSK ) автор топика
Ответ на: комментарий от xxxander 03.12.18 19:29:04 MSK
ну так и обращайся к нему как com50, в какой порт его не ткни для него всегда будет именно этот симлинк, привязанный к vid pid serial и всегда будет трактоваться однозначно на машине с подобным udev правилом
anonymous
( 03.12.18 21:13:07 MSK )
Ответ на: комментарий от anonymous 03.12.18 21:13:07 MSK
Ты невнимательно читал: ПО для этой фигни писал какой-то мудак, поэтому «номер порта» у него какой-то рандомный получается.
А ТС не въезжает не только в линукс, но и в это говноПО. И, похоже, у него нет ни исходников, чтобы сделать нормально, ни того урода рядом, чтобы ему морду набить!
anonymous
( 03.12.18 21:35:58 MSK )
Ответ на: комментарий от anonymous 03.12.18 21:35:58 MSK
да похрен какой у него номер под капотом, работать можно через симлинк. и грубо говоря линукс сам еще тот рандом в нумерации и потому кроме udev и нет нормального способа. пусть пропишет в конфиг симлинк, если надо что-то специфичное вроде «фыва30» то просто заменить в правиле com50 на нужный фыва
anonymous
( 03.12.18 21:43:18 MSK )
Ответ на: комментарий от anonymous 03.12.18 21:35:58 MSK
да не, перечитал еще раз, порт указывается в конфиге софтины, тут походу тс в надмозга играет вместо того чтоб сесть и почитать
anonymous
( 03.12.18 21:54:13 MSK )
Ответ на: комментарий от anonymous 03.12.18 21:35:58 MSK
ну собственно беглый гуглинг по этим терминалам и привел меня к ответу в составе пакета есть сшаник в котором прописан порт, собственно не вижу драмы заглянуть в него и написать хоть удев правило, хоть симлинк руками, хоть сшаник переписать
anonymous
( 03.12.18 22:04:22 MSK )
Ответ на: комментарий от anonymous 03.12.18 21:43:18 MSK
всем спасибо кто помогал. в общем разобрался нашелся способ через udev. прога действительно понимает конкретный фыва, а именно ttyS*, поэтому создаем правило ссылку на нее с любым номером (что крайне удобно — можно не гадать).
Я так понял проблема с определением была конкретно для моей сборки linux (у меня ubuntu). В гугле находил инструкцию, что люди определяют порт через команду ls -la /dev/ttyS* -выводит список всех ttyS, в стандартных случаях это все физические комы, ttyS0-ttyS3 и после подключения добавляется новый типо ttyS61, откуда сразу определяем номер. НО у меня же ИЗНАЧАЛЬНО существовало 60+ ttyS* под всевозможными номерами, и этот способ не работал. Проблема решилась УДАЛЕНИЕМ под правами root конкретного ttyS* из папки /dev/, на который создали правило, после этого применяем правило снова sudo udevadm trigger, после этого все работает.
Я понимаю что можно наверняка настроить, чтобы все было автоматически, легко и быстро, но меня это уже не интересует) Есть только пару сопутствующих вопросов. Я заметил, что если после перезагрузки подключить сначала флешку, потом устройство, оно будет уже определяться как ttyACM1, а не ttyACM0. на символическую ссылку это не влияет — она так же создается, только на ttyACM1. Но вот прога перестает запускаться. Почему? я думаю тут уже из-за ПО что то криво написано. Вопрос номер 2. Имеет ли значение расположения этой ссылки в linux? Имеется ввиду каталог. Вопрос 3. Я уже писал здесь что создавал ссылку в соответствии с инструкцией. Только вручную а не с помощью правила. Выглядела она @ttyS99 на файл ttyACM0. Это не одно и тоже, что я создал с помощью udev? описание одинаковое «/dev/ttyACM0», только название разное
xxxander
( 04.12.18 08:15:17 MSK ) автор топика
Ответ на: комментарий от xxxander 04.12.18 08:15:17 MSK
«Это не одно и тоже, что я создал с помощью udev? описание одинаковое «/dev/ttyACM0», только название разное» помимо тогда что система его запоминает по серийнику
xxxander
( 04.12.18 09:01:25 MSK ) автор топика
Ответ на: комментарий от xxxander 04.12.18 08:15:17 MSK
Да залезь же уже в скрипты программы, я ж вечером тебе писал, если не работает с ttyACM1, то в конфиге скорее всего захардкожено ttyACM0. Найди где оно, замени на что-то вменяемое например ttyVeriFone. создай udev правило и живи спокойно.
Morin ★★★★
( 04.12.18 09:02:44 MSK )

lsusb
burato ★★★★★
( 04.12.18 10:09:04 MSK )
Ответ на: комментарий от Morin 04.12.18 09:02:44 MSK
По поводу ковыряния в ПО в поисках ACM0 и его редактирования. Мне не удалось его найти. Одни файлы закодированы и при попытке открыть выдают кракозябры, другие слишком длинные, и поиск по ним с помощью поисковых команд по коду “ACM” не дал результатов. В прочем, это уже не имеет значения. А вообще служба безопасности запрещает там лазить, тем более что то менять
xxxander
( 04.12.18 11:48:04 MSK ) автор топика
Ответ на: комментарий от xxxander 04.12.18 11:48:04 MSK
тогда пинай техпо, пусть исправляют, т.к. ACM0 может быть занят, а его удаление может привести к нерабочему состоянию чего-то еще на рабочем месте.
Morin ★★★★
( 04.12.18 11:53:02 MSK )
Ответ на: комментарий от xxxander 04.12.18 11:48:04 MSK
В случае с ACM0 и бубунтой все просто: в бубунте при втыкании флешки запускается какой-то демон, который пытается определить, не модем ли это случаем. Ну и на всякий случай эта дрянь создает устройство ACMx.
На SO поищи, как избавиться от такого поведения. Там то ли ненужный networkmanager убить нужно, то ли modemd (кажись, второе, но первое тоже лучше не запускать, оно не нужно).
Ну или нормальный линукс поставь, а не это говно.
anonymous
( 04.12.18 11:56:07 MSK )
Ответ на: комментарий от Morin 04.12.18 11:53:02 MSK
Его «техпо» про modemd и прочее вредительство педераста-поцтеринга, похоже, не слыхало!
anonymous
( 04.12.18 11:57:01 MSK )
Ответ на: комментарий от anonymous 04.12.18 11:57:01 MSK
ну ты-то тоже походу про терминалы на модеме не слышал, да да, там такое сплошь и рядом, кто тебе сказал, что modemd можно безболезненно грохнуть? На кой хрен падтерминал прикидывается модемом уже отдельный разговор.
Morin ★★★★
( 04.12.18 12:02:04 MSK )
Ответ на: комментарий от Morin 04.12.18 12:02:04 MSK
кто тебе сказал, что modemd можно безболезненно грохнуть?
Я тебе сказал. Это говно не нужно, т.к. и без него все работает прекрасно.
Ты, похоже, тоже нифига линуксом не пользуешься, как и ТС.