Хотя с вашей точки зрения вы только что подключили одно устройство к вашему компьютеру, ядро Linux имеет более сложное представление о том, что происходит.Ядро отслеживает иерархию устройств, каждое из которых имеет свои собственные атрибуты, драйверы и дочерние устройства.Корнем иерархии обычно является какое-то корневое устройство, представляющее ваш ЦП, которое затем подключается (возможно, косвенно) к устройству контроллера USB, которое подключается к «корневому концентратору», который затем подключается к физическому USB-устройству, которое вы используете.подключен, что, в свою очередь, может иметь дочерние устройства для каждой функции / интерфейса, предоставляемой устройством USB.
Вы можете запустить man udevadm
, чтобы узнать больше о действиях команды.Там написано:
-a, --attribute-walk
Print all sysfs properties of the specified device that can be used
in udev rules to match the specified device. It prints all devices
along the chain, up to the root of sysfs that can be used in udev
rules.
Итак, есть эта цепочка устройств, начиная с ttyACM0 (функция вашего USB-устройства) и заканчивая физическим USB-устройством, затем корневым концентратором, а затем USB-портом.контроллер, пока он не достигнет корня иерархии.Опция --attribute-walk
проходит по этой цепочке и распечатывает атрибуты каждого из устройств по пути.
Вы передаете вывод этой команды в grep
, поэтому вы не видите полный вывод, ичто это, наверное, почему ты запутался.Полный вывод команды на самом деле очень информативен: она выводит хороший абзац, объясняющий, что она делает, и есть полезные предложения, чтобы прояснить ее при переходе от печати атрибутов одного устройства к печати атрибута его родителя.Вот некоторые из выводов, которые я получаю при проверке устройства USB на моем Raspberry Pi:
$ udevadm info --name=sda2 --attribute-walk
Udevadm info starts with the device specified by the devpath and then
walks up the chain of parent devices. It prints for every device
found, all possible attributes in the udev rules key format.
A rule to match, can be composed by the attributes of the device
and the attributes from one single parent device.
looking at device '/devices/platform/soc/3f980000.usb/usb1/1-1/1-1.2/1-1.2.1/1-1.2.1:1.0/host0/target0:0:0/0:0:0:0/block/sda/sda2':
KERNEL=="sda2"
SUBSYSTEM=="block"
[snip]
looking at parent device '/devices/platform/soc/3f980000.usb/usb1/1-1/1-1.2/1-1.2.1/1-1.2.1:1.0/host0/target0:0:0/0:0:0:0/block/sda':
KERNELS=="sda"
SUBSYSTEMS=="block"
[snip]
looking at parent device '/devices/platform/soc/3f980000.usb/usb1/1-1/1-1.2/1-1.2.1/1-1.2.1:1.0/host0/target0:0:0':
KERNELS=="target0:0:0"
SUBSYSTEMS=="scsi"
[snip]
looking at parent device '/devices/platform/soc/3f980000.usb/usb1/1-1/1-1.2/1-1.2.1/1-1.2.1:1.0':
KERNELS=="1-1.2.1:1.0"
SUBSYSTEMS=="usb"
[snip]
looking at parent device '/devices/platform/soc/3f980000.usb/usb1/1-1/1-1.2/1-1.2.1':
KERNELS=="1-1.2.1"
SUBSYSTEMS=="usb"
[snip]
[... and so on, up to the root device]
К сожалению, из вывода вашей команды udevadm
похоже, что ваш RFID-адаптер не имеет USBСерийный номер, поэтому отличить его от других устройств той же модели может быть хитрым.Чтобы подтвердить, что у него нет серийного номера, я рекомендую запустить lsusb -v -d 0c27:232a | grep iSerial
.Если число после iSerial
равно 0, это означает, что серийный номер отсутствует.
Я рекомендую просмотреть символические ссылки, которые Linux создает для вас в /dev/serial/by-id
;возможно, в этих символических ссылках будет достаточно деталей в их именах, чтобы вам не нужно было создавать новое правило udev.(Подсказка: запустите ls -lR /dev/serial/by-id
.)
Если вам по-прежнему нужна дополнительная помощь в поиске или создании стабильных символических ссылок, я думаю, вам следует подключить все четыре считывателя RFID и затем опубликовать полный вывод каждой из этих команд:
ls -lR /dev/serial/by-id
ls /dev/ttyACM*
udevadm info --name=ttyACM0 --attribute-walk