LINUX.ORG.RU
решено ФорумAdmin

udev+ttyACM

 , , ,


0

1

Салют, ЛОР!

Есть два стула 3G-модема одной марки.
Назовем их #А и #B. #A - намертво привинчен, #B - опционально подключаем.
В системе определяются по 7 портов на модем: с ttyACM0 по ttyACM6 и с ttyACM7 по ttyACM13.
Если #B воткнут перед стартом системы, то ttyACM0-ttyACM6 принадлежат #B. Если не воткнут, то это порты модема #А.

Но вот незадача, моя маленькая утилитка должна работать только с #A. Каким образом через udev(или каким иным путем) переименовать эти 14 портов, чтобы они были привязаны к конкретному девайсу?

Заранее благодарствую!

По идее у них серийный номер различаться должен, но может быть и 123456789AB у всех.

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

Вот вывод инфо:

root@test001:/# udevadm info -a -n /dev/ttyACM0

  looking at device '/devices/soc0/80080000.ahb/80090000.usb/ci_hdrc.1/usb2/2-1/2-1:1.0/tty/ttyACM0':
    KERNEL=="ttyACM0"
    SUBSYSTEM=="tty"
    DRIVER==""

  looking at parent device '/devices/soc0/80080000.ahb/80090000.usb/ci_hdrc.1/usb2/2-1/2-1:1.0':
    KERNELS=="2-1:1.0"
    SUBSYSTEMS=="usb"
    DRIVERS=="cdc_acm"
    ATTRS{bInterfaceClass}=="02"
    ATTRS{iad_bFunctionClass}=="02"
    ATTRS{bmCapabilities}=="7"
    ATTRS{iad_bFirstInterface}=="00"
    ATTRS{bInterfaceSubClass}=="02"
    ATTRS{bInterfaceProtocol}=="01"
    ATTRS{bNumEndpoints}=="01"
    ATTRS{iad_bFunctionSubClass}=="02"
    ATTRS{iad_bFunctionProtocol}=="01"
    ATTRS{supports_autosuspend}=="1"
    ATTRS{iad_bInterfaceCount}=="02"
    ATTRS{bAlternateSetting}==" 0"
    ATTRS{bInterfaceNumber}=="00"
    ATTRS{interface}=="EHx"

  looking at parent device '/devices/soc0/80080000.ahb/80090000.usb/ci_hdrc.1/usb2/2-1':
    KERNELS=="2-1"
    SUBSYSTEMS=="usb"
    DRIVERS=="usb"
    ATTRS{bDeviceSubClass}=="02"
    ATTRS{bDeviceProtocol}=="01"
    ATTRS{devpath}=="1"
    ATTRS{idVendor}=="1e2d"
    ATTRS{speed}=="480"
    ATTRS{bNumInterfaces}=="15"
    ATTRS{bConfigurationValue}=="1"
    ATTRS{bMaxPacketSize0}=="64"
    ATTRS{busnum}=="2"
    ATTRS{devnum}=="2"
    ATTRS{configuration}==""
    ATTRS{bMaxPower}=="100mA"
    ATTRS{authorized}=="1"
    ATTRS{bmAttributes}=="e0"
    ATTRS{bNumConfigurations}=="1"
    ATTRS{maxchild}=="0"
    ATTRS{bcdDevice}=="1730"
    ATTRS{avoid_reset_quirk}=="0"
    ATTRS{quirks}=="0x0"
    ATTRS{version}==" 2.00"
    ATTRS{urbnum}=="10383"
    ATTRS{ltm_capable}=="no"
    ATTRS{manufacturer}=="Cinterion Wireless Modules"
    ATTRS{removable}=="unknown"
    ATTRS{idProduct}=="0058"
    ATTRS{bDeviceClass}=="ef"
    ATTRS{product}=="EHx"
...

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

в правила udev вписываешь, если подсистема usb(SUBSYSTEMS==«usb») то сменить имя на другое(к примеру USBttyACM0).

Подробности описания правил в udev в инете полно.

anonymous
()

Может быть, написать скрипт, который ищет модем с определённым серийником, и передаёт его в качестве параметра твоей утилитке?

Black_Shadow ★★★★★
()

Посмотри в выхлопах AT команд что-нибудь уникальное и разбери утилитой.

ilovewindows ★★★★★
()
Ответ на: комментарий от vgovseychuk

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

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

Усё! Заработало. Фильтрую по родительскому зрачению KERNEL:

SUBSYSTEM=="tty" KERNELS=="2-1:1.0" SYMLINK+="EHS5-0"
SUBSYSTEM=="tty" KERNELS=="2-1:1.2" SYMLINK+="EHS5-1"
SUBSYSTEM=="tty" KERNELS=="2-1:1.4" SYMLINK+="EHS5-2"
SUBSYSTEM=="tty" KERNELS=="2-1:1.6" SYMLINK+="EHS5-3"
SUBSYSTEM=="tty" KERNELS=="2-1:1.8" SYMLINK+="EHS5-4"
SUBSYSTEM=="tty" KERNELS=="2-1:1.10" SYMLINK+="EHS5-5"
SUBSYSTEM=="tty" KERNELS=="2-1:1.12" SYMLINK+="EHS5-6"

Всем спасибо!

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

P.S на этой шине usb больше ничего не висит, так что могу себе позволить не париться с уточнением фильтра.

vgovseychuk
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.