Número de serie falso del dispositivo USB

9

Tengo un teléfono móvil conectado a mi PC a través de USB.

Al ver la información del dispositivo usando

sudo udevadm info --attribute-walk

el producto y la identificación del proveedor se muestran bien, pero no hay ATTR {serial} . Una aplicación que estoy usando (adb de Android) necesita que el dispositivo informe un número de serie para que funcione correctamente.

¿Hay alguna forma de falsificar el número de serie del dispositivo, por ejemplo, usando una regla udev?

Aclaración: la pregunta no es cómo obtener el número de serie del dispositivo USB, sino cómo establecer el número de serie.

Tenía un teléfono Android que no informa un número de serie a través de USB, y la herramienta adb no me gustó demasiado. Hasta ahora no parece haber una solución simple para esto. Sin embargo, hay días en que es muy fácil comprar un teléfono Android apropiado para el desarrollo.

Ralf
fuente
¿Es un teléfono Android? Si no, adb no funcionará, de todos modos.
Keith
Estoy adivinando que ADB en realidad no obtener esta información de udev. Probablemente de sysfs en su lugar, o directamente desde el dispositivo. Considere parchar adb, probablemente el enfoque más fácil.
derobert

Respuestas:

1

Primero, asegúrese de que el dispositivo que no informa un número de serie es realmente el problema. adb devicesenumerará el número de serie como todos los signos de interrogación si no tiene permiso para acceder al dispositivo correspondiente en /dev/bus/usb/. También recuerde que el adb inicia un servidor, es posible que deba eliminarlo para que vuelva a sondear.

Asumiendo que realmente es un problema con el dispositivo, rápidamente verifiqué el código fuente de adb. Aparece register_deviceen core/adb/usb_linux.clee el número de serie directamente desde el dispositivo. core/adb/usb_libusb.cllama libusb_get_device_descriptorpara hacerlo, que (verificando el código fuente de libusb) lo toma de sysfs o directamente del dispositivo. Así que desafortunadamente ningún truco de udev va a ayudar.

Sus elecciones parecerían ser:

  • descubra cómo hacer que adb funcione sin un número de serie. Posiblemente, parche adb(es de código abierto). Esta es una pregunta más para Stack Overflow, creo.
  • parche al controlador usbfs del kernel para falsificar una respuesta a la solicitud de adb. Esto suena mucho más difícil que parchearme adb.
  • parchee el kernel para permitir falsificar el número de serie en syfs, suponiendo que adb esté usando libusb.
  • arreglar el hardware roto
derobert
fuente
Gracias, esto lo explica. En mi caso, arreglar el hardware roto fue lo más fácil (comprar un mejor hardware).
Ralf
1

Si conoce el nodo del dispositivo específico (p. Ej. / Dev / sdb), puede buscarlo con el siguiente comando: udevadm info -a -p $(udevadm info -q path -n /dev/sdb)

Por lo general, si está intentando crear una regla personalizada en /etc/udev/rules.d/51-android.rules para dispositivos Android, escribir lsusben su terminal mostrará algo así Bus 002 Device 004: ID 062a:3270 Creative Labs . Los cuatro caracteres después de "ID" - en este caso sería - se 062ausan para indicar el específico idVendordentro de ese archivo.

ILMostro_7
fuente
Eso ayuda a escribir reglas udev, pero ¿hay alguna forma de escribir una regla que cambie el número de serie?
Ralf
No lo sé para su teléfono en particular, pero en mi experiencia una vez que se establecen las reglas de udev (y se ejecuta adb start-servercomo root o usando sudo), adb podrá leer el número de serie por sí solo.
Drake Clarris
0

Probablemente no sea serial sino FTDI, por lo que puede intentarlo de esta manera:

1) Obtenga el serial

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

2) Cree la regla y sustituya la XXXXXXXX con la serie que encontró o una serie FALSA

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

3) Recargar las reglas

sudo udevadm control --reload-rules

.

En el caso, intente contactar al autor de este artículo .

tmow
fuente
No creo que OP esté hablando del protocolo de serie sino del número de serie del dispositivo USB. Ese es un pequeño campo usado en el descriptor del dispositivo junto con las ID del proveedor y del producto. Se supone que es único para cada dispositivo, pero no es obligatorio en la especificación USB. No hay respuesta sobre cómo fingir, lo siento. Probablemente me parche al núcleo ...
ali1234