GNU/Linux >> Tutoriels Linux >  >> Linux

Comment obtenir des informations sur le fournisseur et le produit USB par programmation sous Linux ?

Je n'ai pas essayé moi-même , mais la valeur udev_device_get_property_value de libudev devrait l'être ; il est utilisé dans udev-util.c de pulseaudio comme udev_device_get_property_value(card, "ID_VENDOR_FROM_DATABASE")) .

Voici un petit exemple que je viens de mettre en place, basé sur udev-util.c - notez que j'ai utilisé un Arduino Duemillanove avec une puce FTDI FT232, dont je trouve le chemin udev en utilisant udevadm (voir les commentaires dans le code ci-dessous), puis je l'ai codé en dur dans le programme ci-dessous, udevl.c :

// sudo apt-get install libudev-dev
// build with: gcc -o udevl -ludev -Wall -g udevl.c

#include <stdio.h>

#include <libudev.h>

int main( int argc, char **argv )
{
  const char *v;
  char t[256];
  struct udev *udev;
  struct udev_device *card = NULL;

  if (!(udev = udev_new())) {
      fprintf(stderr, "Failed to allocate udev context.\n");
      return -1;
  }

  // $ lsusb | grep FT232
  // Bus 002 Device 002: ID 0403:6001 Future Technology Devices International, Ltd FT232 USB-Serial (UART) IC    
  // $ udevadm info --name=/dev/ttyUSB0 --attribute-walk | grep "looking at device"
  // looking at device '/devices/pci0000:00/0000:00:1d.0/usb2/2-2/2-2:1.0/ttyUSB0/tty/ttyUSB0'
  // (that one is under /sys)
  // hardcode that path below:

  // udev_get_sys_path(udev) for me: '/sys'
  sprintf(t, "%s/devices/pci0000:00/0000:00:1d.0/usb2/2-2/2-2:1.0/ttyUSB0/tty/ttyUSB0", udev_get_sys_path(udev));
  fprintf(stdout, " path: %s\n", t);

  card = udev_device_new_from_syspath(udev, t);
  fprintf(stdout, " udev_device: 0x%08X\n", (unsigned int)card);

  if ((v = udev_device_get_property_value(card, "ID_MODEL_FROM_DATABASE")) )
    fprintf(stdout, "got ID_MODEL_FROM_DATABASE: %s\n", v);
  else
    fprintf(stdout, "failed getting ID_MODEL_FROM_DATABASE: %s\n", v);

  fprintf(stdout, "Done.\n");

  if (card)
    udev_device_unref(card);

  if (udev)
    udev_unref(udev);

  return 0;
}

Ce programme (avec l'Arduino attaché) affiche :

$ ./udevl 
 path: /sys/devices/pci0000:00/0000:00:1d.0/usb2/2-2/2-2:1.0/ttyUSB0/tty/ttyUSB0
 udev_device: 0x09FBF080
got ID_MODEL_FROM_DATABASE: FT232 USB-Serial (UART) IC
Done.

... et "FT232 USB-Serial (UART) IC" est la bonne entrée pour VID:PID 0403:6001 dans usb.ids.

J'espère que cela t'aides,
Santé !


lsusb La commande demande des informations sur les périphériques USB actuellement connectés. Vous pouvez utiliser son -d option pour interroger un certain fournisseur/produit (mais cela semble fonctionner uniquement pour les appareils actuellement branchés) :

$ lsusb -d 0e21:0750
Bus 001 Device 005: ID 0e21:0750 Cowon Systems, Inc.

Vous pouvez afficher des informations pour tous les appareils :

$ lsusb
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 001 Device 004: ID 0421:01c7 Nokia Mobile Phones
Bus 001 Device 003: ID 0bda:8187 Realtek Semiconductor Corp. RTL8187 Wireless Adapter
Bus 001 Device 005: ID 0e21:0750 Cowon Systems, Inc.
Bus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 003 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 004 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 005 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 006 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 006 Device 002: ID 046d:c01b Logitech, Inc. MX310 Optical Mouse
Bus 007 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 008 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub

Vous pouvez également le rendre verbeux (lsusb -v ) et en imprimant beaucoup de trucs.

Notez que lors de l'accès aux informations sur le système sous Linux, il est préférable de le faire via des commandes shell (telles que lsusb ) que d'analyser directement les fichiers système auxquels ces commandes accèdent.


Linux
  1. Comment installer un pilote de périphérique sous Linux

  2. Comment obtenir des informations sur le système et le matériel sous Linux

  3. Comment installer et utiliser Etcher sur Linux pour créer une clé USB Live Linux

  4. Linux – Comment reconnecter un périphérique USB logiquement déconnecté ?

  5. Regardez l'identifiant du fournisseur de connexions USB, l'identifiant du produit et la révision

Lancement de Linux Mint 19.2 "Tina":voici les nouveautés et comment l'obtenir

Comment créer une clé USB multiboot sous Linux et Windows

Comment trouver l'utilisation de la bande passante d'un périphérique USB sous Linux

Comment démarrer n'importe quelle distribution Linux avec Windows - et s'en débarrasser quand vous en avez besoin

Comment formater un disque USB en exFAT sous Linux [graphiquement et ligne de commande]

Comment détecter et gérer les appareils sous Linux