LINUX.ORG.RU

Как правильно создать ссылку на GPS-приемник

 ,


0

1

Добрый день, уважаемые дамы и господа, постараюсь вкратце изложить суть проблемы: имеется китайский gps-приемник GNSS803G, который в dmesg`е представляется U-blox 5 и создает устройство /dev/ttyACM0 и есть некое ПО которому для работы требуется устройство /dev/gps0, при создание симлинка: ln -s /dev/ttyACM0 /dev/gps0 все прекрасно работает до момента перезагрузки и возникает вопрос - чтобы устройство определялось как gps0 нужно создать правило udev?


чтобы устройство определялось как gps0 нужно создать правило udev?

Да.

и есть некое ПО которому для работы требуется устройство /dev/gps0

Зашито жестко и не меняется?

Zubok ★★★★★ ()
Последнее исправление: Zubok (всего исправлений: 1)

чтобы устройство определялось как gps0 нужно создать правило udev

Да, но если там просто конвертер COM->USB, то правило может зацепить другие девайсы на этом чипе.

создает устройство /dev/ttyACM0

Все правильно делает.

ПО которому для работы требуется устройство /dev/gps0

Должно настраиваться. Если нет то это повод поругаться в сапорт\сделать патч.

anonymous ()
Ответ на: комментарий от anonymous

Да, но если там просто конвертер COM->USB, то правило может зацепить другие девайсы на этом чипе.

Думаю это не страшно т.к. к хосту подключается только одно USB-устройство

Должно настраиваться. Если нет то это повод поругаться в сапорт\сделать патч.

Не совсем уверен, но вроде правки можно внести в конфиг

И тогда вопрос, так как не очень силен в линуксе в плане подключения устройств, как правильно написать udev-правило?

midwy ()
Ответ на: комментарий от sleeply4cat

еще одна глупость)

ид производителя, ид устройства, серийник устройства. только так можно однозначно идентифицировать железяку.

тех кто прошивает чужие серийники, найти и покарать, можно анально, вдруг им понравится

anonymous ()
Ответ на: комментарий от anonymous

О, очередной анон в блистающих доспехах, никогда не нюхавший китайского железа. Примерно все девайсы с программным USB (USBasp, например) идут с одним серийником. Примерно все беспроводные сканеры идут с одним MAC адресом. Я хрен его знает, что с трекерами, у меня такой только один, но не удивлюсь, узнав, что и у них всё с этим плохо.

sleeply4cat ()
Последнее исправление: sleeply4cat (всего исправлений: 1)
Ответ на: комментарий от sleeply4cat

нехрен покупать китайский нонейм. прекрасно нюхал и выкинул на помойку. А если устройства два, а если железо собирают и разбирают на месте, а если вообще используют разные ноуты или топы но с одной обвязкой железа?

для наколенного хобби за ради бога, хоть саморезом прикручивайте. А вот что-то чем будут пользоваться люди, а не вы любимый, соизвольте выбрать нормальное железо и написать нормальные конфиги, где не надо подпрыгивать с бубном, если кто-то в другой порт юзб воткнул

anonymous ()

Господа, все таки прошу помощи в написании правила или хотя бы на пример какой-нибудь натолкните, дистриб centos используется если это важно

midwy ()
Ответ на: комментарий от sleeply4cat

у тебя ошибка в днк, уж извини

как твой надмозг собрался разбирать железо с одинаковыми серийниками одному ктулху известно.

Давай, прояви рвение, условие совсем простенькое, шнуров два, усб порта произвольные.

Валяй, жду udev правило

anonymous ()
Ответ на: комментарий от anonymous

выбрать нормальное железо и написать нормальные конфиги, где не надо подпрыгивать с бубном, если кто-то в другой порт юзб воткнул

Ага, написал в конфиге /dev/ttyACM0, а пользователь подключил к ноуту сначала свою старенькую нокию, чтобы в интернет с неё выйти, /dev/ttyACM0 оказался занят, и GPS-приёмник сел на /dev/ttyACM1. Удачной отладки!

Нет, тут правило udev с созданием симлинка понадёжнее будет.

i-rinat ★★★★★ ()
Ответ на: комментарий от i-rinat

к этому и клонил, ок допишу, к сожалению в линуксах нет способа кроме udev однозначно идентифицировать железо, а потому в поставку софта, должно входить правило для него

а так да, все по делу

anonymous ()
Ответ на: комментарий от anonymous

в линуксах нет способа кроме udev однозначно идентифицировать железо

Если сам пишешь софт, то можно гулять по /sys и /dev, сопоставляя устройства с уже сохранёнными. В зависимости от ситуации привязываться либо к порту, в который устройство воткнуто, либо сохранять какие-то косвенно-идентифицирующие данные устройства и перебирать, ища совпадения.

Вроде бы, пользовательским приложениям такое не запрещается. На чтение иерархии доступ есть у всех.

i-rinat ★★★★★ ()
Ответ на: комментарий от i-rinat

там не все так однозначно насколько я помню, точнее сказать дистроспецифично, в этом основная загвоздка. по счастью юдев есть практически везде. Ладно, баталия ни к чему, если кто-то знает универсальный способ на все дистры, вэлкам, мне есть куда применить

anonymous ()
Ответ на: комментарий от imul

Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 002 Device 006: ID 1546:01a8 U-Blox AG [u-blox 8]
Bus 002 Device 003: ID 0e0f:0002 VMware, Inc. Virtual USB Hub
Bus 002 Device 002: ID 0e0f:0003 VMware, Inc. Virtual Mouse
Bus 002 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub

midwy ()
Ответ на: комментарий от midwy
udevadmin -a -n /dev/ttyACM0 | grep '{serial}' | head -n1

в ответ должен получить серийник

ACTION=="add", SUBSYSTEM=="tty", ATTRS{idVendor}=="1546", ATTRS{idProduct}=="01a8", ATTRS{serial}=="тут твой серийник", SYMLINK+="gps0"

ну собственно как-то так

anonymous ()
Ответ на: комментарий от midwy

Сделай файл /etc/udev/rules.d/90-gps.rules

С таким содержимым:

ACTION=="add", KERNEL=="ttyACM[0-9]*", SUBSYSTEM=="tty", SUBSYSTEMS=="usb", ENV{ID_VENDOR_ID}=="1546", ENV{ID_MODEL_ID}=="01a8", SYMLINK+="gps0", GROUP="uucp", MODE="0660"

GROUP="uucp"
<-- вместо uucp подставь другую группу, ту с которой запускается программа читающая из /dev/gps0

Потом сделай
udevadm control --reload
И воткни приёмник в usb.

Насчёт серийника не совсем понятно, зачем это тебе. Для другого приёмника придётся же тогда менять правило.

PS: посмотрел спеки, поддержка nmea есть, так что после tail -f /dev/gps0 увидишь gps данные в текстовом виде раз в секунду (если не заданы другие настройки).

imul ★★★★★ ()
Последнее исправление: imul (всего исправлений: 3)
Ответ на: комментарий от anonymous

тех кто прошивает чужие серийники, найти и покарать

значительная часть китайдевайсов может иметь одинаковые

ид производителя, ид устройства, серийник устройства

и это они не специально... просто культура производства такая (конечно, в основном ноунейм-производители, но всё же нарваться на такую «свинью» не сложно)

anymouze ()
Ответ на: комментарий от midwy

Тебя же просили

 ls /dev/ttyACM*
# ИЛИ
# мой вариант по-информативней будет :)
ls -l /dev/ttyACM*

Взгляд с другой стороны
ПО загружается автоматически или «ручками»? Сделать алиас/ярлык на запуск ПО с предварительным созданием линка не вариант?

anymouze ()
Последнее исправление: anymouze (всего исправлений: 1)