Поддельный серийный номер USB-устройства

9

У меня есть мобильный телефон, подключенный к ПК через USB.

При просмотре информации об устройстве с помощью

sudo udevadm info --attribute-walk

идентификатор продукта и поставщика отображается нормально, но нет ATTR {serial} . Приложение, которое я использую (Android ADB), нуждается в устройстве, чтобы сообщить серийный номер, чтобы работать должным образом.

Есть ли способ подделать серийный номер устройства, например, с помощью правила udev?

Пояснение: Вопрос не в том, как получить серийный номер устройства USB, а в том, как установить серийный номер.

У меня был телефон Android, который не сообщает серийный номер через USB, и инструмент adb не очень понравился. Пока что не существует простого решения для этого. Однако в наши дни очень просто купить подходящий телефон Android для разработки.

Ralf
источник
Это телефон на андроид? Если нет, ADB не будет работать, в любом случае.
Кит
Я предполагаю, что adb на самом деле не получает эту информацию от udev. Возможно, вместо sysfs или напрямую с устройства. Рассмотрим исправление adb, возможно, самый простой подход.
Дероберт

Ответы:

1

Во-первых, убедитесь, что устройство, не сообщающее серийный номер, действительно является проблемой. adb devicesперечислит серийный номер как все вопросительные знаки, если у него нет разрешения на доступ к соответствующему устройству под /dev/bus/usb/. Также запомните, что adb запускает сервер, вам может потребоваться убить его, чтобы заново его проверить.

Предполагая, что это действительно проблема с устройством, я быстро проверил исходный код adb. Появляется register_deviceв core/adb/usb_linux.cсчитывает серийный номер прямо с устройства. core/adb/usb_libusb.cвызывает libusb_get_device_descriptorдля этого, который (проверка исходного кода libusb) захватывает его из sysfs или непосредственно с устройства. Так что никакая хитрость udev не поможет, к сожалению.

Ваш выбор будет выглядеть так:

  • разберись как заставить работать adb без серийного номера. Возможно, патч adb(это с открытым исходным кодом). Это вопрос больше к переполнению стека, я думаю.
  • патч к драйверу ядра usbfs для фальсификации ответа на запрос adb. Это звучит намного сложнее, чем исправление ADB для меня.
  • исправьте ядро, чтобы разрешить подделку serial # в syfs, предполагая, что adb использует libusb.
  • исправить сломанное оборудование.
derobert
источник
Спасибо - это объясняет В моем случае починка сломанного оборудования была проще (покупка лучшего оборудования).
Ральф
1

Если вы знаете узел устройства конкретного устройства (например, / dev / sdb), вы можете найти его с помощью следующей команды: udevadm info -a -p $(udevadm info -q path -n /dev/sdb)

Обычно, если вы пытаетесь создать пользовательское правило в /etc/udev/rules.d/51-android.rules для устройств Android, запись lsusbв вашем терминале будет отображать что-то вроде Bus 002 Device 004: ID 062a:3270 Creative Labs . Четыре символа после «ID» - в данном случае это будет 062aиспользовано - используются для обозначения конкретного idVendorфайла.

ILMostro_7
источник
Это помогает при написании правил udev, но есть ли способ написать правило, которое изменяет серийный номер?
Ральф
Не знаю для вашего конкретного телефона, но по моему опыту, как только правила udev установлены (и вы запускаете adb start-serverот имени root или используете sudo), adb сможет читать серийный номер самостоятельно.
Дрейк Кларрис
0

Вероятно, это не серийный, а FTDI, так что вы можете попробовать так:

1) Получить сериал

sudo udevadm info --attribute-walk -n /dev/ttyUSB0  | sed -n '/FTDI/,/serial/p'

2) Создайте правило и замените XXXXXXXX на найденный вами серийный номер или серийный номер FAKE.

sudo echo 'SUBSYSTEM=="tty", ATTRS{serial}=="XXXXXXXX", GROUP="users", MODE="0660", SYMLINK+="myusbphone"' | sudo tee /etc/udev/rules.d/99-myusbphone.rules

3) Перезагрузить правила

sudo udevadm control --reload-rules

,

В случае, попробуйте связаться с автором этой статьи .

tmow
источник
Я не думаю, что OP говорит о последовательном протоколе, а о серийном номере устройства USB. Это мало используемое поле в дескрипторе устройства вместе с идентификатором производителя и продукта. Он должен быть уникальным для каждого устройства, но не является обязательным в спецификации USB. Нет ответа на то, как это подделать Я бы наверное
исправил