Linux имя com порта
Как получить список доступных системе COM портов в Linux? Раньше искал в /dev файлы типа ttyS*, но что-то тут не так. На моем компе имеется один физический компорт. В /dev есть 4 порта (ttyS0, ttyS1, ttyS2, ttyS3). Но, например когда пытаюсь добавить в систему принтер, визард просит выбрать порт и показывает только ОДИН доступный компорт. Всё правильно, порт всего один. Хотя в девах их 4, в визарде только 1. На другом компе физически есть 1 компорт, а в /dev их аш 5. Как из кода в Linux-e можно получить список доступных компортов? или как проверить все ttyS0, ttyS1, ttyS2, ttyS3 и найти среди них рабочий(е)(реальный(е))?
Оглавление |
|
Сообщения по теме | [Сортировка по времени | RSS] |
1. «Как получить список доступных системе COM портов? « | + / – | |
Сообщение от ACCA | ||
Высказать мнение | Ответить | Правка | ^ | Наверх | Cообщить модератору |
2. «Как получить список доступных системе COM портов? « | + / – | |
Сообщение от juvf | ||
Спасибо. Таким образом смог выделить из всех ttyS* только рабочие. А можно подобным образом получить инфу о портах типа ttyUSB*? Или достаточно по наличию в /dev/ttyUSB0 определить, что такой порт доступен системе? | ||
Высказать мнение | Ответить | Правка | ^ | Наверх | Cообщить модератору |
3. «Как получить список доступных системе COM портов? « | + / – | |
Сообщение от ACCA | ||
Смотря откуда этот /dev/ttyUSB* взялся. Если его udev или ещё какой hal сделал — почти достаточно. Посмотри, что такое /dev. Если udev filesystem, то скорее всего можно — /dev/ttyUSB* создаются и убираются динамически, если udev скрипт не глюканул. Сделай `lshal’, почитаешь много интересного про ttyUSB. dmesg | grep ttyUSB тоже поможет. Источник Определение номера подключенного COM портаДля правильного подключения оборудования, необходимо определить номер COM порта. Проверка проводится при условии, что сервер полностью развернут, и работает заведомо правильно. WindowsДля определения номера COM порта на ОС Windows необходимо:
8. После того, как номер COM-порта определен его необходимо указать в схеме SCADA, для устройства, подключенного многожильным кабелем. LinuxДля определения номера COM порта на ОС Linux необходимо:
4. После выполнения команды отобразится список всех доступных COM-портов dev/ttyS0 — первый COM порт /dev/ttyS1 — второй COM порт /dev/ttyUSB0 — специальный кабель-переходник из USB в COM (Gembird UAS111) 5. Установить программу minicom. Для этого вводим следующую команду: 6. Найти многожильный кабель в оплётке длиной 4-6 см. 7. Соединить 2 и 3 выводы COM порта перемычкой из кусочка многожильного провода. Оплётка будет удерживать провод на контактах, а металлические жилы внутри будут проводниками. 8. Настроить программу minicom. Для этого вводим следующую команду: 9. Выбрать «Настройка последовательного порта» 10. Нажимая А поочередно выбираем порты (если используется кабель-переходник из USB в COM то выбрать /dev/ttyUSB0) 11. Отключить аппаратное управление потоком, нажав «F» 12. Выйти из настроек нажав «Enter» 13. Сохранить настройки по умолчанию «Сохранить настройки как dfl» 14. Выйти из minicom 15. Запустить minicom выполнив команду: 16. Нажать на любую клавишу на клавиатуре В случае, если символы не вводятся с клавиатуры, необходимо вернуться к пункту 10, и выбрать другой COM-порт Если вводимые символы отображаются — значит COM-порт определен верно 17. После того, как номер COM-порта определен его необходимо указать в схеме SCADA, для устройства, подключенного многожильным кабелем. Источник Заметки о Linux, электронике, радиолюбительствеЛичный блог Вадима Кузнецова, RA3XDH воскресенье, 27 июля 2014 г.Работа с последовательным портом из консоли LinuxВ предыдущем посте было показано как запустить UART на отладочной плате Launchpad для MSP430. Теперь рассмотрим как общаться с платой при помощи средств командной строки Linux. Используется плата с прошивкой из предыдущего поста. Для подробностей — см. под кат Как известно, все устройства последовательных портов представлены файлами устройств в каталоге /dev.Через эти файлы и происходит общение ОС Linux с внешним устройством на последовательном порту. Чтобы передать что-то на внешнее устройство нужно записать данные в файл устройства, а чтобы считать информацию из устройства — прочитать данные из файла устройства. Это можно делать при помощи команд cat и echo так же как для обычных файлов на диске. Или внутри программы на С при помощи вызовов ioctl(), read() и write() или библиотеки termios. Физическим последовательным портам RS232, к которым подключались диалапные модемы на старых компьютерах, соответствуют файлы устройств /dev/ttyS*, начиная с /dev/ttyS0. Виртуальным последовательным портам, которые создаются различными конвертерами USB UART соответствуют файлы устройств /dev/ttyUSB* и /dev/ttyACM*. Ядро Linux автоматически разпознаёт подключенное устройство, загружает для него драйвер и создаёт файл устройства. Вручную устанавливать драйвер, как в ОС Windows не требуется. Например, если подключить к USB преобразователь USB UART FT232, то создаётся файл устройства /dev/ttyUSB0, с которым можно работать также как и с обычным последовательным портом. На плате Launcpad находится микросхема TUSB3410, которая тоже представляет собой конвертер USB UART. Если подключить её к USB, то создаётся файл устройства /dev/ttyACM0. Чтобы общаться с платой нужно что-либо писать/читать с этого файла. Чтобы пользователь мог читать или писать в файл устройства последовательного порта, его нужно добавить в группу dialout. Иначе работать с последовательным портом сможет только администратор root. Простейшим приложением с графическим интерфейсом, которое работает с последовательным портом, является CuteCOM. Он обычно уже есть в вашем дистрибутиве Linux. Его можно установить из репозиториев. При помощи CuteCOM мы работали с платой в предыдущем посте. Выглядит CuteCOM вот так: Работать с ним крайне просто. Указываем нужное устройство, если его нет в списке, то его можно впечатать вручную. Затем указываем скорость и параметры и нажимаем OpenDevice. В окне видим данные, которые пришли от устройства. В поле ввода в нижней части можем печать строку символов, которые предаются на устройство. Чтобы передать данный нажимаем Enter и смотрим ответ устройства в окне. Теперь рассмотрим как работать с COM-портом из командной строки. Для этого служат три команды: stty, cat и echo. Команда stty устанавливает параметры и скорость COM-порта. Её формат: stty -F $ stty 9600 -F /dev/ttyACM0 raw -echo Теперь в той же консоли нужно набрать $ cat /dev/ttyACM0 Теперь нажимаем на плате RESET и видим, что в консоди напечатался текст. Чтобы передать в плату данные, в другой консоли нужно использовать команду echo и перенаправление вывода в файл устройства. Наберём в другой консоли: $ echo "1">/dev/ttyACM0 В итоге должно получиться так: Чтобы увидеть 16-ричные коды данных, приходящих от устройства, нужно использовать команду hexdump: $ cat /dev/ttyACM0|hexdump -C Чтобы иметь вывод данных от устройство на экран и в текстовый файл нужно использовать tee: Источник как определить номер com порта usb устройствакак определить номер ком порта устройства, подключенного через usb? по типу диспетчер устройств в windows ставлю клиентам оборудование. возможно 2 типа подключений — через RS232 либо USB. В сопутствующем ПО необходимо прописать номер порта. Если подключение через RS232 — проблем никаких, все порты чаще всего подписаны на системнике, либо методом перебора, их как правило, не больше 5-и. Но часто бывает что все физические comы заняты либо отсутствуют вовсе и приходится выполнять подключение через USB. В соответствии с технической документацией в этом случае в каталоге с ПО оборудования создаем символическую ссылку (драйвер) ttyS99 на /dev/ttyACM0. Как можно быстро узнать номер ком порта этого ttyACM0? Он определяется чаще всего как 9, но бывает какой-нибудь 61, 62 или вообще любой! начинаются танцы с бубном в виде бесконечного перебора. При помощи udev создавай симлинк при подключении. И это будет уже не безымянный USB ACM, а /dev/чтототам. Конечно, если у железяки свои VID/PID, а не используется какой-нибудь ширпотребный.
Ты что-то попутал. Какой, нафиг, «номер ком-порта»? Это тебе не прошивка для игровых приставок! Какое устройство создалось, такое и надо указывать в подключении.
До меня дошло! «сопутствующее ПО» писал вантузоид, да еще и не на ЯП, а на какой-нибудь «си-диезине»? И там нет устройства, а вместо него «номер порта»? Тогда смотри в исходники этого шлака. Я вообще не представляю, какой логикой мог автор руководствоваться, чтобы «номер порта». чтобы запустить аппарат, необходимо в каталоге с его ПО в конфигурационном файле .ini прописать номер com порта. строка так и называется comport=*, где * — номер от 1 до 99. на windows проблема решалась в диспетчере устройств во вкладке com порты — номер порта. на линукс я не знаю как определить поэтому и задал вопрос. что не так я спросил? аппарат не предназначен для USB поэтому прописывается символическая ссылка (драйвер), эмулирующий этот ком. прописывать номер всеравно надо проблема в том что одно и то же устройство с одним и тем же серийником, id, кодом или еще чем-то, на разных linux системах определяется под разным номером этого com. В основном это системы под ККТ, типо artix и проч. Нужен универсальный инструмент распознавания
Объясняю: спрашивать надо того олуха, который это говно написал! Потому что в линуксе нет понятия «номер порта».
Как она выглядит и куда прописывается? Блин, ну неужели ты вообще в линуксе ниже плинтуса? ln -s /dev/ttyACM0 /ПОустройства/ttyS99 ОК, теперь хоть понятно. Как ты думаешь, что означает «ttyS99»? Какой номер «ком-порта»? Давай подскажу: /dev/ttyS0 — это «ком1». «Потому что в линуксе нет понятия «номер порта». » он есть в windows, возможно разрабы перенесли его в linux под тем же названием «для простоты». какой-то параметр существует точно «Как ты думаешь, что означает «ttyS99»? Какой номер «ком-порта»? Давай подскажу: /dev/ttyS0 — это «ком1». » по твоей логике ком100. но это бред. я писал уже — на разных linux системах везде пишется ttyS99 одинаково, но по факту методом подбора определяется как ком9, ком10, ком61 Не номер портта, а имя устройства. Смотри, что выводится в dmesg при подключении девайса [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 Особо суровый идиотизм. С этим вопросом — к разработчику. Предположим номеров comпорт не существует и надписи на системниках рядом с разъёмами com1 com2 и т д это чушь, а разработчики написали бред. Все же я не знаю по другому как их обзывать, буду говорить номер компорт извините что мозолю вам глаза. Одно я могу утверждать на 100 процентов. Какой-то параметр компорта существует, потому что от него зависит работоспособность устройства, я просто не знаю, как его посмотреть, с этим и обратился к вам, прошаренным линуксоводам. Повторюсь, если устройство физически подключается по ком через разъём rs232, то решение сводится к осмотру системника и поиска надписи. Если же подключение выполняется по USB, приходится гадать, потому что это уже виртуальный компорт, но по моей практике, у него тоже есть свой номер. “Блин, ну неужели ты вообще в линуксе ниже плинтуса?” Да это так. Я в линуксе на уровне монтирования флешки под командой sudo. Ровно столько мне требуется для работы. И если честно, чем глубже я в него окунаюсь, тем больше меня выворачивает наизнанку Под этим номером разработчик мог понимать что угодно,напиши ему письмо.
Даже тут можно выйти из положения, если она одна. Либо привязаться к Bus, если разные разъёмы на разных.
Писал под DOS в начале 90-ых?
Какое слово непонятно в первом же ответе анонимуса? Он же написал: udev.
Разработчик, конечно, мог упороться и зацепиться за то, что показывает ls -dl /sys/dev/char/* | grep «char/188» , но мне кажется, что он, всё же, хочет /dev/ttyS , а этот симлинк ему можно сделать посредством udev. Да ну (: вот прям нет? ок давай наведу на мысль, про правило для udev тебя уже тут ткнули, это хорошее решение, так как привяжешь конкретную железяку к конкретному симлинку. если надо быстро посмотреть то естественно твоя прога должна понимать не только запись в конфиге вида COMx. Если она настолько тупа, то кроме udev у тебя нет вариантов ну и естественно это может не работать на всех зоопарках дистра, увы универсального способа нет Спроси дебила, который этот софт писал!
Ну так раз ты — тупой геймер, не лезь, куда тебе не надо.
Символическая ссылка ≠ драйвер.
У устройства подключенного по 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 разъём у тебя подключен адаптер. Как посмотреть куда адаптер воткнул, тебе уже Я давно юзбовые адаптеры не видел, могу что-нибудь перепутать, если что. Когдя использую более одного переходника USB-COM, то беру на разных чипах и оборудование вешаю на /dev/serial/by-id/ . Если чипы одинаковые то надо делать udev правило, чтобы переходники мапились по серийнику, иначе будет путаница, но мне делать так лень)). Можно еще пробовать вешать на /dev/serial/by-path/, но я не пробовал. Спасибо всем буду пробовать сегодня [ 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 добавляется только ttyACM0 то есть. я должен создать правило udev, по которому моя система запомнит мое устройство, например, по серийнику, и будет автоматом при его подключении привязывать к какому-нибудь порту, пусть будет 50, т е ttyS50, если я все правильно понаял. Осталось разобраться как создавать эти udev правила ) в /etc/udev/rules.d создать файл 90-VeriFone.rules с таким содержанием писал по памяти, попробуй, если что-то не выйдет гугли окей. создал правило. в папке 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 не знаю как это может помочь просто наткнулся на соответствие полагаю что надо искать параметр устройства типо 3F8, потом расшифровать его А порт теперь не 16-м стал? Ищи быдлокодера, который это говно написал. Что это за утилита, кстати? Может, за то время, что ты ищешь решения, проще было с нуля ее переписать? банковское по. устройство — терминал эквайринг ну так и обращайся к нему как com50, в какой порт его не ткни для него всегда будет именно этот симлинк, привязанный к vid pid serial и всегда будет трактоваться однозначно на машине с подобным udev правилом Ты невнимательно читал: ПО для этой фигни писал какой-то мудак, поэтому «номер порта» у него какой-то рандомный получается. А ТС не въезжает не только в линукс, но и в это говноПО. И, похоже, у него нет ни исходников, чтобы сделать нормально, ни того урода рядом, чтобы ему морду набить! да похрен какой у него номер под капотом, работать можно через симлинк. и грубо говоря линукс сам еще тот рандом в нумерации и потому кроме udev и нет нормального способа. пусть пропишет в конфиг симлинк, если надо что-то специфичное вроде «фыва30» то просто заменить в правиле com50 на нужный фыва да не, перечитал еще раз, порт указывается в конфиге софтины, тут походу тс в надмозга играет вместо того чтоб сесть и почитать ну собственно беглый гуглинг по этим терминалам и привел меня к ответу в составе пакета есть сшаник в котором прописан порт, собственно не вижу драмы заглянуть в него и написать хоть удев правило, хоть симлинк руками, хоть сшаник переписать всем спасибо кто помогал. в общем разобрался нашелся способ через 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», только название разное «Это не одно и тоже, что я создал с помощью udev? описание одинаковое «/dev/ttyACM0», только название разное» помимо тогда что система его запоминает по серийнику Да залезь же уже в скрипты программы, я ж вечером тебе писал, если не работает с ttyACM1, то в конфиге скорее всего захардкожено ttyACM0. Найди где оно, замени на что-то вменяемое например ttyVeriFone. создай udev правило и живи спокойно. По поводу ковыряния в ПО в поисках ACM0 и его редактирования. Мне не удалось его найти. Одни файлы закодированы и при попытке открыть выдают кракозябры, другие слишком длинные, и поиск по ним с помощью поисковых команд по коду “ACM” не дал результатов. В прочем, это уже не имеет значения. А вообще служба безопасности запрещает там лазить, тем более что то менять тогда пинай техпо, пусть исправляют, т.к. ACM0 может быть занят, а его удаление может привести к нерабочему состоянию чего-то еще на рабочем месте. В случае с ACM0 и бубунтой все просто: в бубунте при втыкании флешки запускается какой-то демон, который пытается определить, не модем ли это случаем. Ну и на всякий случай эта дрянь создает устройство ACMx. На SO поищи, как избавиться от такого поведения. Там то ли ненужный networkmanager убить нужно, то ли modemd (кажись, второе, но первое тоже лучше не запускать, оно не нужно). Ну или нормальный линукс поставь, а не это говно. Его «техпо» про modemd и прочее вредительство педераста-поцтеринга, похоже, не слыхало! ну ты-то тоже походу про терминалы на модеме не слышал, да да, там такое сплошь и рядом, кто тебе сказал, что modemd можно безболезненно грохнуть? На кой хрен падтерминал прикидывается модемом уже отдельный разговор.
Я тебе сказал. Это говно не нужно, т.к. и без него все работает прекрасно. Ты, похоже, тоже нифига линуксом не пользуешься, как и ТС. Источник |