Как заменить серийный номер USB устройства в модуле hiddev (Linux)?

Имеется n-ое количество устройств, которые работают через модуль hiddev и имеют абсолютно идентичные аттрибуты:

idVendor 0xffaa

idProduct 0xffbb

iManufacturer X Noname manufacturer

iProduct 1 Noname product

iSerial 0


При этом софт не может их различить никаким образом, т.к. обращает внимание только на эти аттрибуты.


/proc/bus/usb/devices


T: Bus=01 Lev=01 Prnt=01 Port=00 Cnt=01 Dev#= 12 Spd=1.5 MxCh= 0

T: Bus=01 Lev=01 Prnt=01 Port=01 Cnt=02 Dev#= 13 Spd=1.5 MxCh= 0


Нужно сформировать серийник вида «bus+port», т.е. для первого устройства он будет выглядеть так: 0100, а для второго: 0101.


Подскажите, в какую сторону копать в hid-core.c и возможен ли вообще такой вариант подмены?
  • Вопрос задан
  • 3333 просмотра
Пригласить эксперта
Ответы на вопрос 4
@lesha_penguin
Копать лучше в сторону udev, если я не ошибаюсь, в нем можно указать правило по физическому размещению устройства. Тогда можно будет легко работать с ними по вменяемым именам, прописанным раз и навсегда в виде udev-правила.
Ответ написан
Комментировать
maaad
@maaad Автор вопроса
Правило не поможет: софту наплевать на udev.
Ответ написан
@miwa
Я в свое время игрался с несколькими одинаковыми сканерами штрих-кодов на одной машине. Решил все примерно таким конфигом в /etc/udev/rules.d/
KERNEL=="hidraw*", ACTION="add", \
ATTRS{idVendor}=="05e0", \
ATTRS{idProduct}=="0600", \
SYMLINK+="scaner1", MODE:="0666"

после чего обращался к нужному мне сканеру как к /dev/scaner1.
Если надо, могу посмотреть полные конфиги. Там по два сканера с разными серийными номерами описываются добавлением строчки ATTRS{iSerial}, ЕМНИП.
Ответ написан
Комментировать
maaad
@maaad Автор вопроса
Проблема в том, что софтина не обращает внимания на симлинки udev'а. Она самостоятельно опрашивает usb устройства и фильтрует их аттрибуты. Поэтому и вопрос поставлен именно про модификацию модуля.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы