Faux numéro de série du périphérique USB


9

J'ai un téléphone portable connecté à mon PC via USB.

Lors de l'affichage des informations sur l'appareil à l'aide de

sudo udevadm info --attribute-walk

les identifiants produit et fournisseur s'affichent correctement, mais il n'y a pas d' ATTR {série} . Une application que j'utilise (Android adb) a besoin que l'appareil signale un numéro de série pour fonctionner correctement.

Existe-t-il un moyen de truquer le numéro de série de l'appareil, par exemple en utilisant une règle udev?

Clarification: la question n'est pas de savoir comment obtenir le numéro de série du périphérique USB, mais comment définir le numéro de série.

J'avais un téléphone Android qui ne rapporte pas de numéro de série via USB, et l'outil adb n'aimait pas trop ça. Jusqu'à présent, il ne semble pas y avoir de solution simple à cela. Cependant, certains jours, il est très facile d'acheter simplement un téléphone Android approprié pour le développement.


Est-ce un téléphone Android? Sinon, adb ne fonctionnera pas de toute façon.
Keith

Je suppose que adb n'obtient pas réellement ces informations d'udev. Probablement à partir de sysfs à la place, ou directement à partir du périphérique. Pensez à patcher adb, probablement l'approche la plus simple.
derobert

Réponses:


1

Tout d'abord, assurez-vous que l'appareil ne signale pas de numéro de série est vraiment le problème. adb deviceslistera le numéro de série comme tous les points d'interrogation s'il n'a pas la permission d'accéder au périphérique correspondant sous /dev/bus/usb/. Rappelez-vous également que l'adb démarre un serveur, vous devrez peut-être le tuer pour le ré-analyser.

En supposant que c'est vraiment un problème avec l'appareil, j'ai rapidement vérifié le code source adb. Il apparaît register_devicedans core/adb/usb_linux.clit le numéro de série directement à partir de l'appareil. core/adb/usb_libusb.cappelle libusb_get_device_descriptorpour le faire, qui (en vérifiant le code source libusb) le récupère à partir de sysfs ou directement à partir du périphérique. Aucune astuce udev ne va donc aider, malheureusement.

Vos choix semblent être:

  • comprendre comment faire fonctionner adb sans numéro de série. Eventuellement, patch adb(c'est open source). C'est une question plus pour Stack Overflow, je pense.
  • patch au pilote usbfs du noyau pour simuler une réponse à la demande d'adb. Cela me semble beaucoup plus difficile que de patcher adb.
  • patchez le noyau pour permettre de truquer le numéro de série dans syfs, en supposant que adb utilise libusb.
  • réparer le matériel cassé.

Merci - cela l'explique. Dans mon cas, la réparation du matériel cassé était plus facile (acheter un meilleur matériel).
Ralf

1

Si vous connaissez le nœud de périphérique du périphérique spécifique (par exemple / dev / sdb), vous pouvez le rechercher avec la commande suivante: udevadm info -a -p $(udevadm info -q path -n /dev/sdb)

Habituellement, si vous essayez de créer une règle personnalisée dans /etc/udev/rules.d/51-android.rules pour les appareils Android, l'écriture lsusbdans votre terminal affichera quelque chose comme Bus 002 Device 004: ID 062a:3270 Creative Labs . Les quatre caractères après "ID" - dans ce cas, ce serait - sont 062autilisés pour indiquer le spécifique idVendordans ce fichier.


Cela aide à écrire des règles udev, mais existe-t-il un moyen d'écrire une règle qui change le numéro de série?
Ralf

Je ne sais pas pour votre téléphone en particulier, mais d'après mon expérience, une fois que les règles udev sont définies (et que vous exécutez en adb start-servertant que root ou en utilisant sudo), adb sera capable de lire le numéro de série par lui-même.
Drake Clarris

0

Ce n'est probablement pas de série mais FTDI, vous pouvez donc essayer de cette façon:

1) Obtenez la série

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

2) Créez la règle et remplacez le XXXXXXXX par la série que vous avez trouvée ou une série FAKE

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

3) Recharger les règles

sudo udevadm control --reload-rules

.

Dans le cas, essayez de contacter l'auteur de cet article .


Je ne pense pas qu'OP parle de protocole série mais du numéro de série du périphérique USB. C'est un champ peu utilisé dans le descripteur de l'appareil avec les ID de fournisseur et de produit. Il est censé être unique pour chaque appareil, mais n'est pas obligatoire dans la spécification USB. Aucune réponse sur la façon de le simuler, désolé. Je patcherais probablement le noyau ...
ali1234
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.