- Конфигурация serial port,
eRIC, 20:26 , 20-Июн-15 (1)>[оверквотинг удален] > echoctl echoke > На посыл в порт 'TEST\n' должен получать ответ 'TEST' > Отсылаю в порт: echo 'TEST' > /dev/ttyUSB1 > В ответ тишина... > Пробовал echo -n -e '\x54\x45\x53\x54\x0A' > /dev/ttyUSB1 > В ответ тишина... > Ответ ловлю hexdump -C /dev/ttyUSB1 на другой консоли. Под виндой работает исправно, > присылает ответ 'TEST' > Какие параметры покрутить stty, чтоб настройки были "зеркальные" винде? > Заранее спасибо.#ls -al /dev/ttyUSB* #chmod 666 /dev/ttyUSB1 или #chmod 666 /dev/ttyUSB1 пробовали через minicom -s подключится или через GTKterm?
- Конфигурация serial port,
anastigmat, 13:19 , 21-Июн-15 (2)> #ls -al /dev/ttyUSB* > #chmod 666 /dev/ttyUSB1 или #chmod 666 /dev/ttyUSB1 > пробовали через minicom -s подключится или через GTKterm?Пользователь в группе dialout. Пробовал и под рутом. Но chmod сделал, попробовал - проблема не решилась... #ls -la /dev/ttyUSB1 crw-rw---- 1 root dialout 188, 1 июн 21 11:55 /dev/ttyUSB1 #chmod 666 /dev/ttyUSB1 #ls -la /dev/ttyUSB1 crw-rw-rw- 1 root dialout 188, 1 июн 21 11:55 /dev/ttyUSB1 Миником пробовал, ГТКтерм нет. Обнаружил новую проблему. #dmesg | grep 'usb 6-3' [80071.025171] usb 6-3: USB disconnect, device number 27 [80071.292060] usb 6-3: new full-speed USB device number 28 using ohci_hcd [80071.461077] usb 6-3: New USB device found, idVendor=10c4, idProduct=ea60 [80071.461088] usb 6-3: New USB device strings: Mfr=1, Product=2, SerialNumber=3 [80071.461097] usb 6-3: Product: CP2102 USB to UART Bridge Controller [80071.461105] usb 6-3: Manufacturer: Silicon Labs [80071.461112] usb 6-3: SerialNumber: 0001 [80071.604057] usb 6-3: reset full-speed USB device number 28 using ohci_hcd [80071.767439] usb 6-3: cp210x converter now attached to ttyUSB1 И таких переподключений 28, как видно...
- Конфигурация serial port,
anastigmat, 14:35 , 21-Июн-15 (3)update.Проверил на другом компе. [ 0.000000] Linux version 3.2.0-4-amd64 (debian-kernel@lists.debian.org) (gcc version 4.6.3 (Debian 4.6.3-14) ) #1 SMP Debian 3.2.65-1 # dmesg | grep -E "(usb|cp210x|ttyUSB0)" [ 207.725854] usb 3-4: new full-speed USB device number 6 using xhci_hcd [ 207.743603] usb 3-4: New USB device found, idVendor=10c4, idProduct=ea60 [ 207.743612] usb 3-4: New USB device strings: Mfr=1, Product=2, SerialNumber=3 [ 207.743617] usb 3-4: Product: CP2102 USB to UART Bridge Controller [ 207.743622] usb 3-4: Manufacturer: Silicon Labs [ 207.743626] usb 3-4: SerialNumber: 0001 [ 207.790922] usbcore: registered new interface driver usbserial [ 207.790968] usbcore: registered new interface driver usbserial_generic [ 207.790970] usbserial: USB Serial Driver core [ 207.799749] USB Serial support registered for cp210x [ 207.799763] cp210x 3-4:1.0: cp210x converter detected [ 207.965746] usb 3-4: reset full-speed USB device number 6 using xhci_hcd [ 207.983071] usb 3-4: cp210x converter now attached to ttyUSB0 [ 207.983108] usbcore: registered new interface driver cp210x [ 207.983113] cp210x: v0.09:Silicon Labs CP210x RS232 serial adaptor driver # stty -a -F /dev/ttyUSB0 speed 19200 baud; rows 24; columns 80; line = 0; intr = ^C; quit = ^\; erase = ^?; kill = ^U; eof = ^D; eol = <undef>; eol2 = <undef>; swtch = <undef>; start = ^Q; stop = ^S; susp = ^Z; rprnt = ^R; werase = ^W; lnext = ^V; flush = ^O; min = 1; time = 0; -parenb -parodd cs8 hupcl -cstopb cread clocal -crtscts -ignbrk -brkint -ignpar -parmrk -inpck -istrip -inlcr -igncr -icrnl -ixon -ixoff -iuclc -ixany -imaxbel -iutf8 -opost -olcuc -ocrnl -onlcr -onocr -onlret -ofill -ofdel nl0 cr0 tab0 bs0 vt0 ff0 -isig -icanon -iexten -echo -echoe -echok -echonl -noflsh -xcase -tostop -echoprt -echoctl -echoke # ls -la /dev/ttyUSB0 crw-rw---- 1 root tty 188, 0 Июн 21 14:24 /dev/ttyUSB0 # chmod 666 /dev/ttyUSB0 # ls -la /dev/ttyUSB0 crw-rw-rw- 1 root tty 188, 0 Июн 21 14:28 /dev/ttyUSB0 На echo откликается, hexdump считывает, даже какое-то время работает. Потом hexdump прерывается, возвращается в командную строку... при попытке:
$ hexdump -C /dev/ttyUSB0 hexdump: /dev/ttyUSB0: Отказано в доступе $ ls -la /dev/ttyUSB0 crw-rw---- 1 root tty 188, 0 Июн 21 14:32 /dev/ttyUSB0 dmesg никаких новых событий не показывает. Кто(что) меняет атрибуты ttyUSB0? Куда копать?
- Конфигурация serial port,
eRIC, 15:33 , 21-Июн-15 (4)> На echo откликается, hexdump считывает, даже какое-то время работает. Потом hexdump прерывается, > возвращается в командную строку... > при попытке: > $ hexdump -C /dev/ttyUSB0 > hexdump: /dev/ttyUSB0: Отказано в доступе > $ ls -la /dev/ttyUSB0 > crw-rw---- 1 root tty 188, 0 Июн 21 14:32 /dev/ttyUSB0 > dmesg никаких новых событий не показывает. Кто(что) меняет атрибуты ttyUSB0? Куда копать?все действия и считывание с утройства под root выполняете? скорее всего после переподключения, права теряются. попробуйте создать правило для UDEV типа: # touch /etc/udev/rules.d/60-ttyUSB.rules # (прописать в нем правило для ttyUSB* устройств, подставив свою группу и права 0666 или 0777) KERNEL=="ttyUSB[0-9]*",NAME="tty/USB%n",SYMLINK+="%k",GROUP="tty",MODE="0666"
- Конфигурация serial port,
anastigmat, 15:52 , 21-Июн-15 (5)> все действия и считывание с утройства под root выполняете? > скорее всего после переподключения, права теряются. попробуйте создать правило для UDEV > типа: > # touch /etc/udev/rules.d/60-ttyUSB.rules > # (прописать в нем правило для ttyUSB* устройств, подставив свою группу и > права 0666 или 0777) > KERNEL=="ttyUSB[0-9]*",NAME="tty/USB%n",SYMLINK+="%k",GROUP="tty",MODE="0666" В том то и дело, что права поменялись без переподключения. По крайней мере dmesg ничего о переподключении не указал. Прямо во время считывания с порта hexdump`ом. Считывание прекратилось, hexdump остановился, все вернулось в командную, по ls показал новые права. Выполнял от простого пользователя, пользователь в группе tty. Под рутом тоже гонял. Проблем меньше, хотя бы с правами, но все равно нестабильно "отрабатывает" ttyUSB. Те команды, что под виндой работали исправно, под дебианом или через раз срабатывают или вообще не срабатывают. Такое впечатление, что каки либо символы или недопосылает в порт или игнорирует на приеме из порта. Ушел читать про udev. Спасибо за участие.
- Конфигурация serial port,
Аноним, 06:28 , 24-Июн-15 (7)Некоторые посказки:> равно нестабильно "отрабатывает" ttyUSB. 1. Работать с uart-ами через echo - достаточно проблемное начинание. И там довольно много грабель. Потому что файл девайса, конечно, файл. Но есть нюансы. Напишите какую-нибудь простенькую программу, шелл неважно работает с произвольными бинарными данными и спецсимволами. А чтение из UART имеет некоторую специфику. 2. Анализировать состояние порта логично какой-нибудь более специализированой программой. Скажем jpnevulator. Он дотошно показывает что и как с конкретным портом. Может даже состояния линий flow control и прочее. Поищите в репах по словам типа RS232 или serial. 3. У дебиана таки древнее ядро. И как оно там поддерживает этот конвертор - отдельный вопрос. Ядру 3.2 стукнул не один год, если что. 4. Простой тест работы UART: замкнуть RX и TX и послать что-нибудь. Из-за соединения линий - должно приехать назад то что вы ввели. Удобно делать в терминалке типа picocom (тоже есть в репах). Главное при этом убедиться что терминал не делает локальное эхо. Популярный minicom использовать не советую, если у вас на порту не модем - очень уж minicom переклинен на диалапных модемах. Это сильно мешает во всех остальных случаях. > Те команды, что под виндой работали исправно, Вообще не аргумент. COM порт - хоть и файл, но имеет некие тонкие особенности, отличающие его от файлов в файловой системе. И эти особенности в винде и линухе разные. > Ушел читать про udev. Там все просто: с одной стороны рулес по которому делается совпадение при событии (например, "добавился девайс", пример вам привели). С этой стороны выражения - сравнеия, позволяющие отфильтровать нужные девайсы и нужные действия по этому поводу. С другой стороны выражения - что делать при наступлении события. Присвоения прав, вызов программ, создание симлинков, или что там еще. Эти выражения - сравнения (==) и присвоения в си-подобном стиле, "=" (присвоить, т.е. выставить параметр в это значение) или += (добавить к тому что было раньше еще и это).
- Конфигурация serial port,
anastigmat, 10:18 , 24-Июн-15 (9)> Некоторые посказки: > 2. Анализировать состояние порта логично какой-нибудь более специализированой > рограммой. Скажем jpnevulator. Нашел - установил - буду пробовать. > 3. У дебиана таки древнее ядро. К сожалению систему не могу выбирать. > 4. Простой тест работы UART: замкнуть RX и TX и послать что-нибудь. Если ничего не поможет, то так и сделаю. >> Те команды, что под виндой работали исправно, > Вообще не аргумент.
Не столько как аргумент, мне просто нужно сделать рабочее приложение по дебианом. Под виндой сделал за пару часов, а тут борюсь уже пару недель. То что девайс работает - это точно, затык именно в линухе. >> Ушел читать про udev. > Там все просто:
Вообще спасибо за советы! Очень путные!
- Конфигурация serial port,
Аноним, 07:07 , 26-Июн-15 (10)> Нашел - установил - буду пробовать.Достаточно полезная штука для изучения что вообще происходит. Может показывать не только данные, но и управляющие сигналы и их изменения. И кстати вот еще какой момент: безбашенным echo и прочим - вы могли ... загадить себе файл девайса. Дело в том что /dev/ttyUSB0 - не только девайс, но и некий СПЕЦИАЛЬНЫЙ файл, реально существующий в файловой системе на диске. Как часть иерархии ФС. А ваше "echo" и прочие "обычные" утилиты - не в курсе что файл СПЕЦИАЛЬНЫЙ. И могут, натурально, снести его куда подальше и создать на месте /dev/ttyUSB ... обычный файл, в который запишут тот же текст из echo. Файловой системе все-равно. Просите нормальный файл по этому пути - сделаем нормальный, значит. Единственная проблема: этот файл ... не будет иметь никакого отношения к UART-ам и вас ждет много интересных открытий. Когда вы будете пытаться читать обычный текстовичок как якобы UART и внезапно обнаружите что творится какая-то фигня. Если терминалки и прочие jpnevulator "глючат" и вопят что не удалось получить статус модемных линий и что там еще - это оно. У простого текстового файла нет модемных линий, IOCTL завалится с ошибкой. Не надо эхать в спецфайлы, это источник грабель. С файлами в /dev вообще стоит поаккуратнее. Workaround такой ситуации, если это она: 1) Удаляем кривой файл - от рута: rm /dev/ttyUSB0 2) отключите адаптер на CP2102 от компьютера. 3) переподключите адаптер. 4) Убедитесь что /dev/ttyUSB0 пересоздался (таким как изначально задуман). 5) Больше не эхайте в спецфайлы! А еще, для понимания того что реально происходит в плане системных вызовов - есть хотя-бы strace. Покажет какие системные вызовы были и чем закончились. Может навести на мысли. Если оно отлупляет нечто типа inappropriate IOCTL for device, это хорошая подсказка что идут "неожиданные" файловые операции. > К сожалению систему не могу выбирать. Ну так проверьте что ваш UART для начала работает как надо. CP210x древние и возможно нормально работают даже в этом дебиане. Как-то примерно так: 1) picocom /dev/ttyUSB0 (При старте напишет параметры порта, если все ок. Возможно надо будет еще указать правильный baud rate, т.к. не факт что дефолтный - такой какой вам надо) 2) Напечатайте что вы там хотели. Посмотрите приехал ли ответ от вашего девайса. Если есть какие-то непонятки, делаем тот самый тест UART с замыканием линий: запускаем picocom, CP2102 - не подключен ни к чему. Печатаем. Убеждаемся что ничего не печатается (локального эха нет). Соединяем TX и RX вашего CP2102. Проверяем что теперь - печатается (т.е. то что шлется в TX, прилетает назад по RX). Если это так - ок, порт работает и дело в чем-то другом (baud rate, flow control, кривая работа с портом, ...). Если не ок - напишет в чем проблема. Если не рабтает даже picocom, простой как 5 копеек, то у вас таки проблемы системного характера. > Если ничего не поможет, то так и сделаю. Это имеет смысл сделать одной из первых вещей - позволяет понять насколько работает UART, в обе стороны. Если этот тест не прошел - у вас что-то не так и остальное работать и подавно не будет. > Под виндой сделал за пару часов, а тут борюсь уже пару недель. Как я уже сказал, винда и линукс - разные вещи. И есть некоторые нюансы. Поэтому если вы будете лезть с виндовым бэкграундом в линух - будете получать граблями по лбу. Примите как данность: Linux - это не еще один вариант винды. Это другая система. И у него свои особенности. Вот файлы девайсов - в том числе. Не стоит в них лишний раз соваться general purpose утилитами, особенно от рута, без четкого понимания последствий. > То что девайс работает - это точно, затык именно в линухе. ИМХО затык в том что вы пытаетесь применять виндовый бэкграунд к линуху. А это чревато интересными обломами. Чтобы работать с системой - надо ее все-таки знать. А чтобы подсмотреть как работать с UART в Linux в явно работающих программах, в дебиане и прочих убунтах есть фирменный чит: apt-get source <какая-нибудь программа работающая с UART>. Желательно маленькая, чтобы разбираться поменьше было. Например, stm32flash (прошивалка STM32 по UART). Или тот же picocom (но он работает с текстовыми данными и не лучшим образом, это отдельный случай и его я не порекомендую). Получите сорц программы, при том - заведомо более-менее рабочей. Позволит посмотеть "а как это делали другие". Вообще, пакетный менеджер и открытый софт - штука хорошая. В винде такой чит не получится, хоть там что. > Вообще спасибо за советы! Очень путные! Ну еще бы - я по таким грабелькам уже попрыгал :). А еще - за неделю можно было бы задолбаться и накормить поисковик очевидными кейвордами. И в первых строках найти что-то типа http://tldp.org/HOWTO/Serial-Programming-HOWTO/index.html - с рассказом что есть UART и с какого бока к нему заходить. Кстати говоря, даже в винде с UART есть свои бестолковости, особенности и грабли. Самая очевидная грабля с которой я столкнулся: винда врет про успех установки baud rate, каким бы он ни был, даже бредовым. Это вынуждает городить нефиговые костыли иной раз. В линухе соотв. вызовы честно отлупляют статус: если порт такой baud не умеет - выставить его и не дадут, собственно.
- Конфигурация serial port,
anastigmat, 10:18 , 26-Июн-15 (11) +1 Начну с конца: Спасибо! Все заработало! Далее по пунктам.> И кстати вот еще какой момент: безбашенным echo и прочим - вы > могли ... загадить себе файл девайса. Благо обошлось без этого. > 5) Больше не эхайте в спецфайлы! Полностью согласен. И не читайте всякими hexdum`пами и cat`ами и иже с ними. Особенно миникомами. Действительно уйму времени угробил, пока понял, что не все они "читают". > А еще, для понимания того что реально происходит в плане системных вызовов > - есть хотя-бы strace. "Опустился" уже в какой-то момен и до неё. Но полностью применить её мощь не позволило недостаточность моих знаний. > Если есть какие-то непонятки, делаем тот самый тест UART с замыканием линий:
[...] > Это имеет смысл сделать одной из первых вещей Это было сделать не тривиально: UART бридж на основе CP210x физически спрятан (впаян) внутри устройства, а не классический кабель-переходник, а разбираться в схемотехнике самого устройства у меня знаний не хватает. >> Под виндой сделал за пару часов, а тут борюсь уже пару недель. > Как я уже сказал, винда и линукс - разные вещи. И есть > некоторые нюансы. Поэтому если вы будете лезть с виндовым бэкграундом в > линух - будете получать граблями по лбу.
Согласен, но с чего-то начинать нужно. > Чтобы работать с системой - надо > ее все-таки знать. Очень надеялся, что переслать пару байт возможно без глубокого (относительно) изучения всей системы. Но нет... > А чтобы подсмотреть как работать с UART в Linux в явно работающих > программах, в дебиане и прочих убунтах есть фирменный чит: apt-get source > <какая-нибудь программа работающая с UART>. Это действительно так. И я так и поступил. Правда влез в stty. > Или тот же picocom > (но он работает с текстовыми данными и не лучшим образом, это > отдельный случай и его я не порекомендую). И тут можно "плохому" научиться)) Так что не все сорсы одинакого полезны? >> Вообще спасибо за советы! Очень путные! > Ну еще бы - я по таким грабелькам уже попрыгал :). Уже тоже имееться своя узкая тропинка, усыпаная грабельками... > А еще - за неделю можно было бы задолбаться и накормить поисковик > очевидными кейвордами. И в первых строках найти что-то типа http://tldp.org/HOWTO/Serial-Programming-HOWTO/index.html Это было одно из первых, что я прочитал. Только без *никсового бекграунда это очень тяжело воспринимается снаскоку. Это теперь я вижу, перечитывая, как все _почти_ очевидно)) И да, работаю в режиме "многозадачности" и конечно чистого времени на эту проблему не пара недель. Просто когда вижу, что мысли начали заходить в тупик, переключался на другую задачу, где "бери лопату и кидай")) Ну а как решил: взял в руки что потяжелее, c++ например. Так отконфигурил, вот кусок кода: tcgetattr(port.fd, &port.config_old); port.config_new=port.config_old; port.config_new.c_oflag = 0; port.config_new.c_iflag=0; port.config_new.c_cflag=CS8|CREAD|CLOCAL; port.config_new.c_lflag=0; cfsetispeed(&port.config_new, B19200); cfsetospeed(&port.config_new, B19200); if(tcsetattr(port.fd, TCSAFLUSH,&port.config_new)!=0) { cout<<"tcsetattr() failed."<<endl; return (-1); } Ну а потом select в руки и read. И все заработало. Параллельно большое спасибо за udev! Так как и сам девайс не подарок. Как оказалось переодически отваливался от компьютера, и премонтировался под разными /dev/ttyUSB#. grep показал, что "USB port nn disabled by hub (EMI?)". Причину EMI искать в устройстве-компе не стал, провода точно хорошие, а внутрь устройства лезть не буду. Прописал в рулезах и теперь постоянно поднимается симлинк с постоянным именем для девайса. Только в удев_рулёзе так и смог команду RUN заставить работать... Пробовал и RUN+="_команда_" и RUN{"_команда_"} все равно не исполняется. Но это уже мелочи. Еще раз, всем огромное спасибо!
- Конфигурация serial port,
Аноним, 12:09 , 28-Июн-15 (12)> Спасибо! Все заработало!Отлично :) > Благо обошлось без этого. Но запомнить этот момент не лишне. Я так как-то долго прыгал по грабелькам. А потом заметил что файл девайса оказывается вовсе и не файл девайса, а уже обычный файл. > Полностью согласен. И не читайте всякими hexdum`пами и cat`ами и иже с ними. Ну это все-таки не совсем обычный файл. Там буферизация, настройки таймаутов, потенциально - процессинг ввода. И какие настройки по дефолту и насколько это то что вы хотели - отдельный вопрос. И в разных системах все это по разному. > Особенно миникомами. Он переклинен на диалапных модемах. Терминалка для обзвона BBS-ок. Остальное там - "можно, но сложно". > Действительно уйму времени угробил, пока понял, что не все они "читают". Миником ожидает модем. А обычные утили - обычные файлы. Попытки кормить софт не тем чем он ожидал - ни к чему хорошему не ведут. > мощь не позволило недостаточность моих знаний. Да там все достаточно просто. Хотя спама может быть многовато. Можно обрубить лишнее, встроенным фильтром или просто каким-нибудь редиректом в grep. > Это было сделать не тривиально: UART бридж на основе CP210x физически спрятан Извиняюсь, невнимательно читал что у вас погодная станция. Думал что кабель все-таки отдельно. А с отдельными кабелями бывает много грабель в электрическом уровне, вот я "по инерции" и посоветовал. > схемотехнике самого устройства у меня знаний не хватает. На самом деле это не так уж сложно, в том плане что найти надо этот самый CP2102 и посмотреть куда идут его лапки TX и RX (даташит на CP210x - общедоступен). Скорее всего к процу этой штуки, на его UART. В лучшем случае могут быть контактные площадки или даже разъем с UART-ом. Но разбирать готовый девайс и правда как-то не очень. >> Поэтому если вы будете лезть с виндовым бэкграундом в >> линух - будете получать граблями по лбу. > Согласен, но с чего-то начинать нужно. На самом деле я сам когда-то прогрмамил компорты в винде. А теперь в линухе. Они не настолько уж разные. Но отличия все-таки есть. И желание срезать угол на предыдущих знаниях может сыграть дурную шутку иной раз. > Очень надеялся, что переслать пару байт возможно без глубокого (относительно) изучения > всей системы. Но нет... Ну это на самом деле нечто типа random. Может и получится, в зависимости от. Параметры порта - можно выставить утилитой типа setserial, например. Но изначально ее может в системе и не быть. И мне кажется надежнее явно впрогрмамить заведомо правильные настройки порта и проверять статус операций. Так по крайней мере в случае чего - понятно что не так. > Это действительно так. И я так и поступил. Правда влез в stty. Да не принципиально в кого именно, единственное что всякие "терминалы" и т.п. - могут использовать "канонический" процессинг текста, а насколько вы хотели это при работе с произвольным девайсом - отдельный вопрос. > И тут можно "плохому" научиться)) Так что не все сорсы одинакого полезны? Как написано в том мануале на который я сослался, есть канонический ввод, ориентированый сугубо на построение терминалок. И есть неканонический, где система не пытается умничать и делать строки из того что строками может и не являться. По понятным причинам, с произвольными данными работать надо в неканоническом режиме. Если этот момент упустить - можно удивляться тому что данные "портятся". > Уже тоже имееться своя узкая тропинка, усыпаная грабельками... Да на самом деле там не все так страшно, особенно если подсмотреть у кого-нибудь заведомо работающего как это делать. > Это было одно из первых, что я прочитал. Даже так? Про это можно было бы упомянуть :) > Только без *никсового бекграунда это очень тяжело воспринимается снаскоку. Я бы не сказал что я - такой уж крутой *никсовый программер. Там вроде все достаточно логично написано и не то чтобы мне требовался при чтении этого какой-то бэкграунд. > И да, работаю в режиме "многозадачности" и конечно чистого времени на эту > проблему не пара недель. Просто когда вижу, что мысли начали заходить > в тупик, переключался на другую задачу, где "бери лопату и кидай")) А, ну понятно :). А я то удивлялся - как за 2 недели можно не найти тот how to и что там в нем 2 недели читать. Я то в него более-менее въехал ну может часа за 2. > взял в руки что потяжелее, c++ например. Так отконфигурил, вот кусок кода: ... > Ну а потом select в руки и read. И все заработало. Ну вот я тоже как-то так предпочитаю :). Там ничего особо страшного. > Параллельно большое спасибо за udev! Так как и сам девайс не подарок. > Как оказалось переодически отваливался от компьютера, Вот это уже может быть глюками старого ядра. Как бы там ни клялись про стабильность фанаты дебиана, мне ядра до 3.10 в плане работы usb не очень нравятся. На самом деле, чипы и чипсеты в мамках - достаточно бажные. А драйвера наполовину состоят из "quirks" и воркэраундов глюков чипов. Одна из причин по которым я не люблю старые ядра - чем новее ядро тем о большем количестве нестандартных закидонов чипов оно знает и знает как правильно выходить из таких штопоров или вообще не допускать их. > и премонтировался под разными /dev/ttyUSB#. Ну да, если ttyUSB0 уже занят, очередной адаптер сядет на ttyUSB1, и так далее. > grep показал, что "USB port nn disabled by hub (EMI?)". Причину > EMI искать в устройстве-компе не стал, провода точно хорошие, Тогда может быть это какие-то глюки чипа или чипсета а относительно старый кернел не все воркэраунды содержал. С другой стороны, качество проводов для usb на глаз прикинуть тоже нелегко. Это скоростная дифференциальная пара, там волновое сопротивление роялит и прочие отражения сигнала. На глаз это проверить не то чтобы просто. > симлинк с постоянным именем для девайса. Вариант. Заодно можно какое-то более логичное название девайса дать. Скажем /dev/weatherstation. Из недостатков: прога будет по идее сталкиваться с ошибками чтения когда девайс отпал. Но если написать там переоткрытие порта - работать по идее будет. Хоть это и костыль и по хорошему так быть не должно. > Только в удев_рулёзе так и смог команду RUN заставить работать... Я в правилах обычно пользуюсь чем-то типа: RUN+="/usr/bin/program %k" (отдает /usr/bin/program как argv[1] параметр %k, который "название девайса по мнению ядра"). Да, там надо указывать ПОЛНЫЙ путь к программе. И там не будут работать всякие фичности шелла типа перенаправлений или раскрытия wildcard, насколько я помню. Это просто выполнение программы а не шелл. Но можно передать кучу параметров и прочая. Путь к программе - ***обязательно*** полный. А примеры подсмотреть можно в системных правилах, их немеряно в каком-нибудь /lib/udev/rules.d/ :) > все равно не исполняется. Странно, у меня исполняется. Например, на нотике я делаю как-то так: SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", KERNEL=="wlan*", RUN+="/usr/bin/macchanger -r %k" Этот рулес при появлении сетевого устройства "wlan*" в системе - запускает программу macchanger, которая ставит на указанном интерфейсе (%k - имя девайса по версии ядра) рандомный MAC. Небольшой подарок любителям слежки за перемещениями людей через отслеживание MAC в периодических probe requests :P. Или "как запилить это более честно чем apple" :) > Еще раз, всем огромное спасибо! Да не за что - приятно помочь сообразительному человеку.
- Конфигурация serial port,
kostya_from_berdsk, 12:42 , 23-Июн-15 (6)> Под виндой работает исправно, > присылает ответ 'TEST' > Какие параметры покрутить stty, чтоб настройки были "зеркальные" винде? > Заранее спасибо.В винде кодировка CP1551, строки обычно заканчиваются кодами 10,13 возврат каретки, перевод строки. С портом в дебиане Вы работаете в UTF-8 и строки заканчиваются только возврат каретки https://ru.wikipedia.org/wiki/п÷п╣я─п╣п╡п╬п╢_я│я┌я─п╬п╨п╦
- Конфигурация serial port,
Аноним, 06:30 , 24-Июн-15 (8)А еще может быть например flow contorl не соответствующий действительности. Скажем если по дефолту аппаратный, но сигналы никто не дергает - передача встрянет навечно, т.к. ожидаемые изменения сигналов никогда не приедут.
|